1. 安装必备软件。
1.1 安装JDK6。
sudo apt-get install sun-java6-jdk
也可以自己安装,以64位jdk1.6.0_45版本为例,进入安装目录(/usr/local):
cd /usr/local
chmod a+x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
在/etc/profile中增加JAVA环境变量:
export JAVA_HOME=/usr/local/jdk1.6.0_45
export JAVA_OPTS="-Xms256m -Xmx1024m"
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
. /etc/profile
1.2 安装其他软件。
sudo apt-get install bison gcc-multilib g++ lib32z1 lib32stdc++6 flex gperf libxml2-utils git
2. 下载android源码。
TODO: 我的源码是以前下载的,这部分待追加。
3. 编译android源码。
以4.3编译为例:
cd android/4.3
. build/envsetup.sh
lunch aosp_arm-eng #aosp_arm-eng为模拟器选项,用户根据需要可以选择其他target
make -j4 #j后面数字为cpu内核数的1-2倍比较好
编译时可能遇到的错误及解决方案:
gcc: error trying to exec 'cc1plus': execvp:No such file or directory
sudo apt-get install g++
/bin/bash: prebuilts/misc/linux-x86/bison/bison: No such file or directory
sudo apt-get install bison
/i686-linux-gcc: No such file or directory
sudo apt-get install gcc-multilib
libz.so.1: cannot open shared object file
sudo apt-get install lib32z1
libstdc++.so.6: cannot open shared object file
sudo apt-get install lib32stdc++6
/bin/bash: flex: command not found
sudo apt-get install flex
sh: 1: gperf: not found
sudo apt-get install gperf
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
sudo apt-get install g++
/bin/bash: xmllint: command not found
sudo apt-get install libxml2-utils
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
sudo apt-get install git
4. 编译内核。
android内核与android源码要分开下载,我下载了goldfish用于生成模拟器。
export PATH=$(pwd)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH #pwd为android源码根目录
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
make goldfish_armv7_defconfig #make goldfish_defconfig也能正常编译,但生成模拟器时黑屏
make -j4
5. 用自己编译的源码和内核生成模拟器。
将emulator命令加入PATH以便后面用到:
export PATH=$(pwd)/out/host/linux-x86/bin:$PATH
模拟器生成命令如下,其中goldfish即为kernel目录,我单独放在一个与android源码平级的目录下:
emulator -kernel ../goldfish/arch/arm/boot/zImage -sysdir out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
编译时可能遇到的错误及解决方案:
Failed to load libGL.so
error libGL.so: cannot open shared object file: No such file or directory
sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0 /usr/lib/libGL.so
qemu: could not load initrd 'ramdisk'
TODO: 网上找到的修改out/target/product/generic和ramdisk.img权限我都试过,没用,所以我实际用到的命令是:
emulator -kernel ../goldfish/arch/arm/boot/zImage -sysdir out/target/product/generic -system system.img -data userdata.img
成功运行能看到android启动界面。