Android7.X 源码下载、编译、运行系统详解(ubuntu 16.0.4)


 Android - [MT6737] MTK 编译环境搭建入口:

 Android 高通8909 系统之路之 裁剪系统 一

             

一、源码下载

从android官网下载源码大家如果能*的话就下吧,这里采用的源码镜像地址为清华大学的。下载方式大家根据以下步骤即可:

1、下载repo工具

1
2
3
4
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod +x ~/bin/repo

2、下载初始化包


1
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar

3、解压下载的初始化包


1
tar xf aosp-latest.tar

4、得到完整的源码


1
2
cd aosp
repo sync

第三步解压后会在home目录下生成一个aosp目录,进入此目录执行repo sync便可同步更新代码目录。

源码的下载大概经过2个小时左右就ok(当然啦,是指网速快点的,像我公司的网络下载的时候能达到2-3M每秒)

二、编译

我这里的编译环境为ubuntu16.0.4

1、安装编译所需要的库


1
2
3
4
5
6
7
8
9
10
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

2、安装open jdk


1
sudo apt-get install openjdk-7-jdk

 Ubuntu16.04的安装源已经默认没有openjdk7(Android 6.0 使用 7.0 使用jdk-8)了,所以要自己手动添加仓库,如下:

# 1. oracle openjdk ppa source

sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk  // OpenJdk 7安装:


3、安装GCC


1
sudo apt-get install gcc

4、更新所有的库


1
sudo apt-get update

5、编译

设置jack服务内存


1
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6g"

编译


1
2
3
source build/envsetup.sh
lunch aosp_arm-eng
make -j8

make命令可以携带参数,比如pc时八核的可以make -j8

三、运行

机器性能好的编译大概再两个小时左右,编译完成之后就可以开始用模拟其运行了

1
2
3
4
5
6
7
export ANDROID_PRODUCT_OUT=out/target/product/generic
export ANDROID_BIN=out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH
 
source build/envsetup.sh
lunch aosp_arm-eng
emulator64-arm -gpu off -memory 2048

Android7.X 源码下载、编译、运行系统详解(ubuntu 16.0.4)


android N 编译
环境配置
需要使用openjdk 8,所以,有两种方法:
方法一: sudo apt-get update; sudo apt-get install openjdk-8-*
先确保/etc/apt/source.list正确,update不出错。

甲骨文官网上的jdk不行,它是jdk se,不适用于我正在使用的平台 android N 的编译。


3、编译问题处理

遇到最后显示ninja的,如果不能立即找出错误,搜索jack关键字,多是因为jack不能正确开启、运行有关的。

问题一:
Starting build with ninja
ninja: Entering directory `.'
ninja: error: 'out/target/product/msm8953_64/obj_arm/SHARED_LIBRARIES/libqct_resampler_intermediates/export_includes', 
needed by 'out/target/product/msm8953_64/obj_arm/SHARED_LIBRARIES/libaudioresampler_intermediates/import_includes', 
missing and no known rule to make it
make: *** [ninja_wrapper] Error 1

解决:配置好java环境和jack_vm_args。

# set java 8
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=$JAVA_HOME/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib


# set for android N build
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
echo "ANDROID_JACK_VM_ARGS=$ANDROID_JACK_VM_ARGS"

问题二:
FAILED:Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log
No Jack server running. Try 'jack-admin start-server'
……
ninja: build stopped: subcommand failed.
make[1]: *** [ninja_wrapper] Error 1
解决:
A:prebuilts/sdk/tools/jack-admin 文件,在 JACK_SERVER_COMMAND=“…… -cp ……” -cp 前添加-Xmx7000m(7000m为内存大小的一半左右,根据所用的主机配置而定)
测试jack-admin kill-server/start-server 命令,看start-server是否能够成功运行。
B:通过查看文件 $HOME/.jack-server/logs/jack-server-*.log
“ServerException: './config.properties' musthave permission rw------- but have rwx------
Caused by: java.io.IOException: './config.properties' must have permissionrw------- but have rwx------”
如果有权限问题,根据提示修改对应文件的权限即可。不过我没遇到过

问题三(这log我没遇到过):
com.android.jack.server.api.v01.ServerException: Problem while opening service port
        at com.android.jack.server.JackHttpServer.start(JackHttpServer.Java:611)
        at com.android.jack.server.JackServerImpl.run(JackServerImpl.java:62)
        at com.android.jack.launcher.ServerLauncher$3.run(ServerLauncher.java:391)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.BindException: Address already in use
……
解决:
需要同时修改 $HOME/.jack-server/config.properties 和 $HOME/.jack-setting 中的端口号,方才有效,
可以在别的用户启动了jack server的情况再启动另一个jack server,这样就可以实现多用户同时编译,
jack.server.service.port=8076 

jack.server.admin.port=8077