mac上编译android4.4.4源码

一些碎碎念……本来因为想在mac上编译的,还专门买了一个外置的移动硬盘,然后自己按照官网和搜到的无数篇博客精心研究了很久很久,耗时三天,还是GG,但是基本上…xcode是个大坑,算了算了……反正最后始终没弄好,然后,虚拟机走起吧……

准备工作

首先,虚拟机用的是mac上的parallels desktop,然后镜像是Ubuntu 12.04.5 Desktop (64-bit)

然后android源码在这里下载,我没有用repo,直接从百度云取的,用的是android4.4.4_r1

这样一共只需要下载2G多点……而不是70G(死目

mac上虚拟机快速配置就可以快速安装好系统,不过记得安装好后,修改一下硬件,空间给128G,内存改4096M,核数改2-4随便

安装Java JDK 1.6

jdk版本:jdk-6u45-linux-x64.bin
下载地址:http://app.nidc.kr/java/jdk-6u45-linux-x64.bin

我们先在 /usr/local/目录下创建java文件夹:

1
2
3
4
5
cd /usr/local
sudo mkdir java
sudo cp [jdk-6u45-linux-x64.bin路径] /usr/local/java
sudo chmod 777 jdk-6u45-linux-x64.bin
sudo ./jdk-6u45-linux-x64.bin

安装成功后,java文件夹下多了一个文件夹:jdk1.6.0_45/
然后配置环境变量,用vim打开/ect/profile 文件,嗯,我不会用gedit,日常vim,这个其实随意。

1
sudo vim /etc/profile

添加下面的环境变量,要根据安装目录修改,并保存

1
2
3
4
5
6
7
8
# Java Environment
export JAVA_HOME=/usr/local/java/jdk1.6.0_45

export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

重启后使其生效并进行验证
也可使用下面的命令不重启使其生效,不过只针对当前域有效。

1
source /etc/profile

其实我是没重启的,直接source就行了,只要不另在终端里开标签或者重启终端就可以。
输入java -version 进行验证安装,成功后返回如下

1
2
3
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)

安装依赖

1
2
3
4
5
6
7
sudo apt-get install git gnupg flex bison gperf build-essential \
zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
libgl1-mesa-dev g++-multilib mingw32 tofrodos \
python-markdown libxml2-utils xsltproc zlib1g-dev:i386

sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

必须提到的是!我之前一直遇到很坑的问题,那就是虚拟机重启后打不开,始终没有解决,直到我不死心的尝试第n次,然后搜到了这个。
http://www.cnblogs.com/wangzehuaw/p/4057604.html
划重点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ sudo apt-get install git gnupg flex bison gperf build-essential \
> zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
> libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
> libgl1-mesa-dev g++-multilib mingw32 tofrodos \
> python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
zip is already the newest version.
zip set to manually installed.
gnupg is already the newest version.
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
libgl1-mesa-glx:i386 : Depends: libglapi-mesa:i386 (= 8.0.4-0ubuntu0.6)
Recommends: libgl1-mesa-dri:i386 (>= 7.2)
E: Unable to correct problems, you have held broken packages.

提示信息说缺少依赖库无法安装libgl1-mesa-glx:i386,那么就不要安装这个库了,从上面的install列表中减去这个库。
libgl1-mesa-glx:i386。如果强制安装了这个库会导致重启或关机后无法进入ubuntu问题,很严重。
如果也遇到了无法进入ubuntu系统的问题,请重装系统时不要安装这个库。

我真的第一次见到会break desktop的库……服了服了。

就因为这个坑了我三天!!!

所以像我一样直接去掉吧。

1
2
sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

解压源码

把之前下载的源码的7z包解压,比如我是建了个目录aosp,然后解压后,就有个android-4.4.4_r1的文件夹。

7z文件需要下一个东西来解压

1
2
sudo apt-get install p7zip-full
7z x android-4.4.4_r1.7z

解压好之后,进入源码路径,如果你的目录结构和我一样,就是

1
cd ~/aosp/android-4.4.4_r1

编译源码

清理

命令删除所有以前编译操作的已有输出:

1
make clobber

设置环境

使用build目录中的envsetup.sh脚本初始化环境

1
source build/envsetup.sh

选择目标

因为我不下载到实体机里,就直接输入lunch,然后回车即可。
默认选择第一个,即lunch aosp_arm-eng,该命令表示针对模拟器进行完整编译,并且所有调试功能均处于启用状态。

进行编译

编译前先看看你配置了几个核,然后make -j(核数✖️2)

1
cat /proc/cpuinfo | grep processor


可看到自己创建的虚拟机CPU核心共有2个,所以make -j4
编译后输出的文件都放在了源码根目录下的out文件中。

启动模拟器

1
emulator -partition-size 300

导入android源码进android studio

网上的做法比较乱,我只写一下我是怎么做的。
1.在整个Android源码全编成功之后,然后编译idegen模块,用以生成Android studio的工程配置文件,编译成功之后就生成了idegen.jar(out/host/darwin-x86/framework/idegen.jar),运行如下命令:

1
2
source build/ensetup.sh
mmm development/tools/idegen/


2.在源码根目录生成对应的android.ipr、android.iml IEDA工程配置文件。以便于AndroidStudio可以打开项目

1
development/tools/idegen/idegen.sh


3.下载android studio并启动

1
2
cd ~/android-studio/bin
./studio.sh

第一次启动要安装sdk,所以记得翻墙。

4.导入
打开 Android studio,选择刚刚生成的 android.ipr 打开,等待加载好了就可以了。

参考链接

https://source.android.com/source/initializing#installing-required-packages-ubuntu-1204
https://source.android.com/source/requirements#older-versions
https://bbs.pediy.com/thread-218366.htm
https://bbs.pediy.com/thread-218513.htm