本文记录在 AndroidStudio 中配置 NDK 开发环境并编译 Fresco 源码。
有两种方法可以查看 Fresco 的源码,第一种是比较常见的,在AndroidStudio 中通过 Gradle 的 compile 导入 Fresco,然后就能查看 Fresco 的源码了,第二种是通过 下载 github 上的 Fresco 源码,在本地编译使用。两种方法并没有太大区别,稍有不同的就是本地编译的方式可以查看官方给出的demo效果并且项目目录结构比较清晰,方便整理,为了持续深入研究Fresco源码,于是选择第二种方式,在本地编译 Fresco,下面记录了本地编译的过程和遇到的问题以及解决办法
使用工具:
- OS X 10.11
- AndroidStudio 1.5.1
- Fresco 0.7.0
配置NDK
在之前版本的 AndroidStudio (大概是1.3之前)中对 NDK 的支持不是很完善,需要手动下载 Android NDK 并进行相关配置,而在之后的版本中逐渐完善了对 NDK 的支持,可以在 AndroidStudio 的 SDK Manager 中直接下载 NDK 并进行相关配置
下载 NDK
在 AndroidStudio 中首先打开 SDK Manager 找到 SDK Tools 可以看到如下图所示的 Android NDK 如果之前没有勾选,说明还没有下载 NDK 需要勾选然后下载
等待下载完成,就可以在sdk目录中看到下载的 ndk 的目录 ndk-bundle:
配置环境变量
mac下的环境变量在当前用户目录的 .bash_profile 文件中,因此需要在这个文件中添加 ndk 的环境变量,步骤如下:
- 定位到.bash_profile文件
启动终端Terminal,一般默认启动时就是在当前用户的目录,所以接下来直接输入
open .bash_profile
注:如果是第一次使用,可能还没有这个文件,所以需要先创建这个文件
touch .bash_profile
open .bash_profile
- 添加 NDK 的路径到环境变量中
添加如下内容到.bash_profile文件中:
export ANDROID_SDK_ROOT=/Users/TC/Dev/Android/sdk
export ANDROID_NDK_ROOT=/Users/TC/Dev/Android/sdk/ndk-bundle
export ANDROID_TOOL=/Users/TC/Dev/Android/sdk/platform-tools
export PATH=$ PATH:$ ANDROID_SDK_ROOT
export PATH=$PATH:$ANDROID_NDK_ROOT
export PATH=$PATH:$ANDROID_TOOL
从上面的内容可以看到,其中 ANDROID_SDK_ROOT 这个变量指向的是 sdk 的文件夹路径,而ANDROID_NDK_ROOT变量指向的是 ndk 的文件夹路径,然后还有个ANDROID_TOOL指向的是platform-tools文件夹的路径,接下来保存并退出,在终端执行更新的命令:
source .bash_profile
- 验证是否添加成功
在终端执行
ndk-build
如果有反应,则说明配置成功,如下图:
编译Fresco
配置好 NDK 后,就可以开始编译 Fresco 源码了,首先从 从github下载Fresco源码 下载完成,开始在 AndroidStudio 中导入项目,首先打开AndroidStudio,选择 File->Open-> 选择 Fresco 文件夹,等待 AndroidStudio 导入并编译,在编译的时候可能会出现一些问题,下面是我遇到的一个问题,以及解决办法:
错误描述:
Execution failed for task ‘:imagepipeline:ndk_build_gifimage’,
> A problem occurred starting process ’ command’ ndk-build”
错误原因:ndk-build 路径错误导致找不到 ndk-build
解决办法:
- 定位到 Fresco的文件夹下 -> imagepipeline 目录 -> build.gradle 文件
- 用文本编辑器打开
- 找到如下代码:
def getNdkBuildName() {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
return "ndk-build.cmd"
} else {
return "ndk-build"
}
}
- 修改为如下:
def getNdkBuildName() {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
return "ndk-build.cmd"
} else {
//将 ndk-build 的路径修改为绝对路径
return "/Users/TC/Dev/Android/sdk/ndk-bundle/ndk-build"
}
}
按照以上步骤修改,然后保存,在 AndroidStudio 中 Rebuild 一下,基本就能解决这个问题。
完成以上操作,就能顺利的编译 Fresco 的源码了
参考资料: