一. Mac OS X(10.11.4)编译环境设置
1.1 创建大小写敏感的磁盘镜像
可以通过磁盘管理工具进行设置,也可以通过以下命令生成70g的镜像文件
sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+'
-size 70g -volname android ~/android.dmg
1.2 将镜像文件转为可读写磁盘
hdiutil convert ~/android.dmg.sparseimage -format UDRW -o ~/android.dmg
(android.dmg.sparseimage 为创建的磁盘名,可能是android.dmg.sparseimage 或android.dmg ,根据实际情况填写)
1.3 双击android.dmg挂载磁盘
二、下载和编译的准备工作
2.1 Xcode是少不了的,没有安装的同学还是安装吧,我也是刚安装的。没安装的就安装个最新版的,这个直接在appStore下载。
2.2 安装MacPorts之前需要确认环境变量PATH中,/opt/local/bin出现在/usr/bin之前,可以运行一下这行来确认:
echo $PATH
否则,在.bash_profile文件种添加
PATH=/opt/local/bin:$PATH
特别说明:下面的一些知道step3的步骤我这边总出问题就跳过了,事实上也没影响后面源代码的下载,跳不跳过就取决与你了
从MacPorts安装make, git, and GPG packages:
POSIXLY_CORRECT=1 sudo port install gmake libsdl git-core gnupg
如果你是Mac OS X 10.4版本的话,还要安装个bison
POSIXLY_CORRECT=1 sudo port install bison
下面要把gmake 3.82还原到3.81,否则之后编译源码会出错:(3.82有Bug,用不了):
sudo vim /opt/local/etc/macports/sources.conf
然后在rsync那行的上面一行加上
file:///Users/Shared/dport
之后按这个步骤来就行了:
mkdir /Users/Shared/dports
cd /Users/Shared/dports/
svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/devel/gmake/
portindex /Users/Shared/dports
安装3.81版的:
sudo port install gmake @3.81
检查一下gmake版本,看到版本号是3.81就对了:
gmake --version
于是最后下载Android源码前的最后一步就是,修改文件标识符限制:
由于Mac OS 默认将同时打开的文件标识符数量限制得太小,并行编译处理时可能会超出这个限制。所以在 ~/.bash_profile 里加上这么一段:
#set the number of open files to be 1024
ulimit -S -n 1024
三、开始下载android的源码了,开心啊
3.1 在你的home目录下创建文件夹 /bin
mkdir ~/bin
3.2 设置环境变量
PATH=~/bin:$PATH
3.3 下载repo工具并且给这个工具可执行权限
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
chmod a+x ~/bin/repo
3.4 下载源码
推荐使用清华大学TUNA镜像源,使用每月更新的初始化包进行下载更新。具体步骤请看
https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
四.编译源码
4.1 在android.dmg磁盘下创建文件夹android用于存放源码:
cd /Volumes/android
mkdir android
4.2 将下载的源码拷贝到android文件夹中并进入源码目录
cd /Volumes/android/android/android-6.0.1/
4.3 设置环境
source build/envsetup.sh
4.4 根据设备选择target
lunch target
注:target有以下可选:
- aosp_arm-eng
- aosp_arm64-eng
- aosp_mips-eng
- aosp_mips64-eng
- aosp_x86-eng
- aosp_x86_64-eng
- aosp_deb-userdebug
- aosp_flo-userdebug
- full_fugu-userdebug
- aosp_fugu-userdebug
- mini_emulator_arm64-userdebug
- m_e_arm-userdebug
- mini_emulator_mips-userdebug
- mini_emulator_x86-userdebug
- mini_emulator_x86_64-userdebug
- aosp_flounder-userdebug
- aosp_angler-userdebug
- aosp_bullhead-userdebug
- aosp_hammerhead-userdebug
- aosp_hammerhead_fp-userdebug
- aosp_shamu-userdebug
其他设备可以到这里阅读
4.5 编译
make -j4
-jN,N这个数字可以跟你的CPU实际情况而定。
android目录底下会生成out文件夹,文件夹下:
4.6 错误解决
Which would you like? [aosp_arm-eng] 6
build/core/combo/mac_version.mk:38:
*****************************************************
build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at
/Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40:
*****************************************************
build/core/combo/mac_version.mk:41: *** Stop.. Stop.
** Don't have a product spec for: 'aosp_x86_64'
** Do you have the right repo manifest?
把文件中 build/core/combo/mac_version.mk:
mac_sdk_versions_supported := 10.6 10.7 10.8
修改为
mac_sdk_versions_supported := 10.11
(我的Xcode 是10.11,具体查看一下路径中的sdk版本
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/)
五.用android studio查看Android源码
5.1 编译源码idegen模块及生成AS配置文件(*.ipr)
mmm development/tools/idegen/
这行命令的意思是编译idegen这个模块项目,然后生成idegen.jar文件(不信你自己去查看这个模块的Android.mk的目标吧,不多解释)。运行完以后如果看到如下信息则说明编译OK:
#### make completed successfully (7 seconds) ####
接着执行如下脚本:
development/tools/idegen/idegen.sh
这行命令的意思是在根目录生成对应的android.ipr、android.iml IEDA工程配置文件。等待片刻得到类似如下信息说明OK:
Read excludes: 21ms
Traversed tree: 194799ms
通过如上操作我们就完成了基本的源码配置工作。
5.2 使用Android Studio导入源码工程
有了如上的这些操作以后,我们打开Android Studio,然后选择打开一个现有的Android Studio项目,然后选择打开源码根目录下的android.ipr文件,导入就行
5.3 加快AS读取源码速度
在打开android.ipr之后AS会花费一定的时间来读取源码,首次扫描源码中所有的Source Folders的时候花费的时间比较长,尤其源码存放在机械硬盘上的时候(完整扫描一次以后后续再打开就没这么慢了)。因为我们经常查看和编译的源码目录为packages和framework等,所以我们可以仅保留需要的源码文件夹不做设置,其他设为Excluded(请按需配置)。
在android根目录上安快捷键F4(如果已经设为Eclipse快捷键方式则为F12)打开Module Setting
选中不需要扫描的目录后点右上的Excluded(其中out和prebuilts目录较大,建议选择),完成以后效果如左侧,文件夹颜色区分,红色的即为排除在外的文件夹,AS将不扫描其中内容。 重新启动AS,会发现扫描源码目录的时间大大缩减了。
5.4 配置AS的JDK和SDK
在上一步操作之后的等待期间刚好让我们来配置一下JDK和SDK。
在IDE中参照下图Project Structure设置,先在SDKs设置中加入必须的JDK,SDK。(可选)然后创建一个新的JDK,可以取名为1.8(No Libraries),然后删除classpath标签页下面的jar文件。 这样可以确保使用Android源码里的库文件。
并将1.8(No Libraries)作为Android SDK要使用的Java SDK。如下图
之后在Project标签中的Project SDK中选择对应的Android API版本
5.5 解决源码中跳转错误问题
1)确保在上一步中已为当前工程设置正确了SDK和JDK
2)设置’Modules’的依赖
先将所有依赖删掉
点击上图中’+’并选择’Jars or directories’选项,依次将frameworks和external文件夹添加进来.如:
如果代码跳转错误,请仿照上面的步骤将相应代码的路径或jar文件添加到其Dependencies标签页中即可。
感觉以下文章作者:
http://www.jianshu.com/p/9cbdc475dff6
http://www.cnblogs.com/xyz123753/p/3322453.html
https://liuzhichao.com/2016/osx-download-and-build-android-source.html
https://mirror.tuna.tsinghua.edu.cn/help/AOSP/
http://blog.youkuaiyun.com/yanbober/article/details/48846331