当你新换了一台mac电脑编译Android源码或者第一次编译Android源码,立刻就会体验到酸爽的各种坑。不管何种方式,在亲爱的祖国,去一个404的网站上下载70G左右的源码(可以选择清华大学和中科大的镜像),然后编译一次需要2-4小时并且需要不停修复环境错误,请保持120分的耐心
Mac下编译Android源码的三种方式如下
- 方式一、在Mac OSX 上编译android源码 掉坑指数:5星 操作方法: 链接
掉坑来源:编译源码过程中,你的mac系统版本跟约定版本有一丁点差异,编译工具链有细微的不同就可能引发编译失败。你就会陷入各种不停修改各种配置错误的境地,甚至有些问题你处于吃螃蟹状态,就算你在google和stackoverflow上寻觅思路也很难找到线索,加上编译源码一次3-4小时的过程,有可能导致你进入崩溃或者放弃。
- 方式二、利用Docker,并参考大神kylemanna的创造 掉坑指数:3.5星 操作方法:链接
优势:借助Docker,我们可以不用担心编译环境问题;不论我们的开发机是什么系统,都可以使用Docker创建Ubuntu Image,并且直接在这个Ubuntu系统环境中创建编译所需要的工具链
掉坑来源: kylemanna的思路不仅非常正确,而且还简化了源码下载过程。但是坑的地方是Docker在实际操作过程中,依然由于mac系统对docker支持的细节处理问题,还是会陷入到不停地填各种配置和工具的坑中,与第一种相比坑会少一些,但是一旦你的细节问题特别多,跟第一种方法的也差不多悲惨。
方式三:Ubuntu14.04 掉坑指数:1.5星
优势
可能是东半球Android源码编译的最好方式
我们就来详细说说掉坑指数最少方法所需要经历的过程。
- 1 Mac OS 下安装ubuntu双系统,操作链接
注意点:
- a 准备好U盘,U盘在diskutil的命令执行前格式化成FAT32.
- b mac分出一个安装ubuntu的分区出来,格式化成FAT32,在安装ubuntu的过程中格式化成ext4
- c 2个必备操作,开机按alt键进入选择磁盘,开机按command+r进入工具模式。
- d 安装The rEFInd Boot Manager方便操作。安装rEFInd需要关闭os x的安全保护。如下:
重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode
点击 Utilities > Terminal
在 Terminal 中输入 csrutil disable,之后回车
重启 Mac
- 2 解决ubuntu的wifi问题,正常情况下,你会碰到根本在ubuntu上找不到wifi的情况,请参考下面的链接
- 3 如果我们编译一个比较新的android源码(Android7.0以上或者ASOP master),我们都需要jdk8,ubuntu14.04上默认使用的是openjdk7,我们需要把系统的默认jdk换成openjdk8,请参考下面的链接
- 4 下载一些必须的依赖工具:
sudo apt-get install git g++-multilib gcc-multilib
lib32ncurses5-dev lib32readline-gplv2-dev
lib32z1-dev m4 libxml2-utils
lzma
!!!能安装的全安装,减少编译源码错误后根据提示来安装的次数
- 5 Android官方编译参考链接。根据官方的编译方式,在我们亲爱的祖国,即使你搭梯子60-70G的源码也得让你非常下的巨不爽,so,推荐清华大学开源站链接 或者中科大开源站链接的镜像方式。
- 6 以清华大学开源站为例子展示下载源码:
- a 下载repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
- b1 传统初始化方法
建立工作目录:
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
初始化仓库:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果提示无法连接到 gerrit.googlesource.com,请参照git-repo的帮助页面的更新一节。
如果需要某个特定的 Android 版本[参考官网的分支介绍](https://source.android.com/source/build-numbers#source-code-tags-and-builds)
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
同步源码树(以后只需执行这条命令来同步):
repo sync
- b2 建议方式:使用每月更新的初始化包同步aosp主干分支源代码编译
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码
- 7 Fuxxxxxing Jack:在编译过程中可能会出现jack权限不够,jackserver无法启动等各种问题
- 解决办法1:(很可能导致jack启动不起来等:有更好办法的同学请告诉我)
0 请修改~/.jackserver的权限
1. 修改 $HOME/.jack-server/config.properties
这一行:set jack.server.max-service=1
2. export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8
-XX:+TieredCompilation -Xmx2G"
aosp目录/prebuilts/sdk/tools/jack-admin kill-server
aosp目录/prebuilts/sdk/tools/jack-admin start-server
- 解决办法2:干掉jack!!!{降低编译速度但是靠谱 无赖选择}
在build/core/configure_local_jack.mk中关闭那蛋疼的jack
把此行变为:
LOCAL_JACK_ENABLED := #$(strip $(LOCAL_JACK_ENABLED))
- 8 执行AOSP编译过程
Clean up
$ make clobber
Set up environment
$ source build/envsetup.sh
Choose a target
$ lunch aosp_angler-userdebug (输入lunch 然后根据提示来选择,真机nexus6p的代号为angler)
Build the code
$ make -j4 (根据cpu的核心线程数来选择-j4 -j8 -j16等等)
[提示有缺少的工具 比如m4 则apt-get安装后再次执行
!!!所以在第四步安装的依赖工具越多越好]
- 9 运行编译源码
- a 虚拟机运行
$ emulator
- b 刷机安装,在aosp源码目录下:在lunch步骤我选择了lunch aosp_angler-userdebug,所以可以顺利刷入nexus6P
adb reboot bootloader
fastboot flashall -w
网友评论