mac系统android编译源码
= =!! 太痛苦, 放弃保智商….
操作环境
- mac系统: OS X EI Captian 10.11.5
- 下载源码: Android 6.0.1
结果: mac环境配置环境, 虚拟机可以启动, 真机使用构建的镜像没有试验. 源码导入ok,调试没做.
首先丢出链接: Google官方源码构建教程 (自备梯子).
我就直接记录我的操作步骤,不说明原因,因为我也不会!
step_1
首先mac文件系统模式是不区分大小写, 但是git托管不是. 所以创建一个大小写敏感的磁盘镜像
```
$ sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg
```
tip:
这里推荐80g的大小, 首先源码就40多G, 编译之后72G(如果只想看看源码那就50G够了,但是如果想调试,刷机,模拟步骤最好80G,有人说如果可以删除AOSP根目录下的.repo
文件夹,可以省出27G,至于有没有影响请自行测试).
step_2
把刚刚创建的镜像挂起. 可以直接在~/根目录
下双击刚刚创建的android.dmg.sparseimage
,也可以如下
```
$ sudo hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android
```
step_3
设置文件的限制.官网提示设置。Mac 系统下默认只能同时打开 1024 个文件,而在进行 Android 源码编译时有可能会超出这个限制,因此需要解除这个限制。在~/.bash_profile
中添加以下内容:
```
# set the number of open files to be 1024
ulimit -S -n 1024
```
step_4
安装必须的关联工具
-
Xcode 点我下载有的帖子说Xcode版本不能太高, 但博主这里没有出现问题.
-
MacPorts 点我下载主要安装make , git 和 GPG
``` $ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg ```
step_5
安装repo, 因为android源码托管就是在git利用repo来辅助管理的
```
# 这两个命令是创建一个bin目录,并把这个bin目录加到全局变量里面
$ mkdir ~/bin
$ PATH=~/bin:$PATH
# 这里下载repo 并改变其权限方便后面调用
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
```
step_6
把我们的下载的源码包放入到最开始创建的磁盘镜像中.
我的下载步骤是这样的.利用国内的镜像下载,下一个大的初识包25G左右,感觉比较省事,开始步骤说明
-
进入到
~/bin文件夹中打开repo文件
修改开始的https://android.googlesource.com/
使用https://aosp.tuna.tsinghua.edu.cn/
代替. -
cd到创建的磁盘镜像中
``` wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包 # 说明: 如果掉网了没关系 加上-c支持断点续传 如下 wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包 # 下载完毕之后开始解压.命令如下 $ tar xf aosp-latest.tar $ cd AOSP # 解压得到的 AOSP 工程目录 # 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录. 命令如下 $repo sync # 正常同步一遍即可得到完整目录 ```
step_7
这时候源码都有了, 准备编译
这里需要注意如果你是zsh
那么你需要切换之前的bash
终端
```
$ chsh -s /bin/bash #切换终端模式
```
然后可以重新打开终端进入原来的路径继续下面的步骤
```
$ source build/envsetup.sh
$ lunch aosp_arm-eng #aosp_xxx xxx为各个版本的各种适用场景,官网有说明
$ make -j4 #j后面的数据是线程的处理数, 看你的电脑是几核的,对应1到2倍
```
这个过程有2个小时吧. 有过一次错误.
ninja: build stopped: subcommand failed.make: *** [ninja_wrapper] Error 1
解决方案
AOSP/prebuilts/sdk/tools中的jack-admin文件
的start-server)
函数下面(443行)
```
isServerRunning
RUNNING=$?
if [ "$RUNNING" = 0 ]; then
echo "Server is already running"
else
#JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME" #原有的隐藏
JACK_SERVER_COMMAND="java -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS-Xmx2048M -cp $LAUNCHER_JAR $LAUNCHER_NAME" #新增的
echo "Launching Jack server" $JACK_SERVER_COMMAND
```
参考地址: 点我
step_8
开始运行了
这里我只是运行了模拟器,起来了.真机因为没有nexus5或者6的机器我就没有去试.
运行模拟器
$ emulator
稍等一会吧,有个五到十分钟,不知道是不是我之前生成的镜像是arm模式的原因..
如果是刷机的话
如果有真机并且连接到了电脑,准备刷机的话,输入以下命令:
$ adb reboot bootloader
进入刷机模式后,输入下面的指令:
$ fastboot -w flashall
我走了上面的第一步报了一个
```
build/core/config.mk:608: *** Error: could not find jdk tools.jar
at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/../lib/tools.jar,
please check if your JDK was installed correctly. Stop.
```
解决方案: $ export ANDROID_JAVA_HOME=$(/usr/libexec/java_home -v 1.7)
参考链接
step_9
最后就是导入源码了
```
$ mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh
```
上面第一条命令是按模块编译我们只需要编译idegen
模块即可,不需要整个android的. 如果这条提示common not found 那么重新执行一遍$ source build/envsetup.sh
再执行 mmm的命令
第二条就是生成我们as的需要的工程配置文件在AOSP的根目录下会生成android.ipr和android.iml
. 我们在之后as中通过File
到open
打开android.ipr
就行.
注意哦, index导入的时间很长,你可以干点别的去.
源码调试没有搞. 可以参考以下链接
- 自己动手调试源码
- 参考流程