Fresco is a powerful system for displaying images in Android applications. It takes care of image loading and display so you don't have to.
Fresco's image pipeline will load images from the network, local storage, or local resources. To save data and CPU, it has three levels of cache; two in memory and another in internal storage.
Fresco 一个强大的Android图片显示系统。图片的加载和显示交由它负责,我们就不需要关心了。这两句足以说明他的牛逼——有几个插件感这么自己的称自己为System的。当然,Facebook出品,必属精品。
简单的了解了,貌似确实非常拉风,把我们平时需要做的基本上都做了,包括图片的加载,图片的显示,内存的管理等。使用之前,先来体验下他的强大。
git clone git@github.com:facebook/fresco.git
注:
github:https://github.com/facebook/fresco
gradle依赖:compile 'com.facebook.fresco:fresco:0.2.0+'
这个稍微有点麻烦,如果想直接运行这个这个项目,需要我们去配置NDK的环境(MAC):
1、下载NDK:http://developer.android.com/tools/sdk/ndk/index.html
这个地址直接列出了不同平台和版本的NDK环境下载地址,这里选择了Mac OS X 64-bit:android-ndk-r10d-darwin-x86_64.bin,MD5:cb101e1e62d56ea75b215f6bc6c27fae
2、NDK安装
在你选择下载的时候,下载页面会自动定位到如何安装的位置,具体流程为:
a、打开终端,定位到你下载的文件位置,
b、修改文件的权限:chmod a+x android-ndk-r10d-darwin-x86_64.bin
c、安装(解压):./android-ndk-r10d-darwin-x86_64.bin。这样我们就可以得到解压后的文件——一个名为android-ndk-r10d的文件夹。为了方便管理,建议将此文件夹copy到和android sdk管理同样方便的位置。
d、配置环境变量:在环境变量中添加ndk-build目录,具体为“export PATH=${PATH}:${NDK_HOME}:${NDK_HOME}/ndk-build:”,其中NDK_HOME为刚解压的ndk目录位置。分享下我们的环境变量设置:
export GRADLE_HOME=$HOME/android/gradle/gradle-2.2.1
export ANDROID_HOME=$HOME/android/android_sdk_mac
export NDK_HOME=$HOME/android/android-ndk-r10d
export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home";
export PATH=${PATH}:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/tools:${JAVA_HOME}/bin:${JAVA_HOME}/lib:${GRADLE_HOME}/bin:${NDK_HOME}:${NDK_HOME}/ndk-build:
配置好之后记得source下,不然下次启动才生效
Execution failed for task ':imagepipeline:ndk_build_gifimage'.
如果你遇到这个错误,多半是找不到ndk环境导致的,不出意外,配置了上面的环境变量就可以解决了。下面在简单的分析下:
打开源码下"imagepipeline"这个model的build.gradle文件,有这样一个函数:def makeNdkTasks(String name){...},其中又有这样一行:commandLine getNdkBuildFullPath(),定位到这个函数,你会发现下面的代码:
def getNdkBuildFullPath() {
// we allow to provide full path to ndk-build tool
if (hasProperty('ndk.command')) {
return property('ndk.command')
}
// or just a path to the containing directiry
if (hasProperty('ndk.path')) {
def path = property('ndk.path')
if (!path.endsWith(File.separator)) {
path += File.separator
}
return path + getNdkBuildName()
}
// if none of above is provided, we assume ndk-build is already in $PATH
return getNdkBuildName()
}
def getNdkBuildName() {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
return "ndk-build.cmd"
} else {
return "ndk-build"
}
}
虽然写不来这段代码,但是我们可以理解他的大概逻辑:先是尝试去“ndk.command”和“ndk.path”这两个地方查找ndk环境,当找不到时返回ndk-buil这个字符串(mac),这个时候肯定需要我们的环境变量中存在。
有了上面的操作,这个时候我们就可以顺利的build这个项目,最后附个build之后的APK,供体验。
下载:http://download.csdn.net/detail/ttdevs/8582171
参考:
https://github.com/facebook/fresco/issues/5