简书地址:www.jianshu.com/p/2beae17c9…java
android源码编译的四个流程:1.源码下载;2.构建编译环境;3.编译源码;4模拟器运行python
首先确保本身已经安装了Git.linux
sudo apt-get install git
git config –global user.email “test@test.com”
git config –global user.name “test”
复制代码
使用清华大学镜像android
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
//拒绝链接可使用tuna的git-repo镜像,将地址换成清华大学的镜像地址
详情查看网址https://mirrors.tuna.tsinghua.edu.cn/help/git-repo/
复制代码
使用每个月更新的初始化包(也能够传统的初始化方法,由于网络慢会下载失败,仍是直接把初始化包下载下来再进行同步)git
下载地址 每个月更新的初始化包ubuntu
因为全部代码都是从隐藏的 .repo 目录中 checkout 出来的,因此只保留了 .repo 目录,下载后解压 再 repo sync 一遍便可获得完整的目录api
使用方法以下:
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-mo nthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压获得的 AOSP 工程目录
# 这时 ls 的话什么也看不到,由于只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍便可获得完整目录
# 或 repo sync -l 仅checkout代码
复制代码
同步完代码以后须要直接进行编译的话就是编译主分支的源码,若是须要特定版本,则须要本身切换分支,再次同步就切换到指定分支的源码了,执行如下命令(这里切换到8.0版本 支持设备 Pixel XL、Pixel)bash
分支列表 代号、标记和细分版本号markdown
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-8.0.0_r2
repo sync
复制代码
硬件要求:网络
软件要求
安装 openJDK 8
sudo apt-get update
sudo apt-get install openjdk-8-jdk
复制代码
依赖设置:
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
复制代码
解决方案:
在etc/apt 的sources.list 添加镜像源 deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse
而后 sudo apt-get update 接着继续使用该命令安装就能够了
复制代码
操做系统要求
Android版本 | 编译要求的Ubuntu最低版本 |
---|---|
Android 6.0至AOSP master | Ubuntu 14.04 |
Android 2.3.x至Android 5.x | Ubuntu 12.04 |
Android 1.5至Android 2.2.x | Ubuntu 10.04 |
JDK版本要求
Android版本 | 编译要求的JDK版本 |
---|---|
AOSP的Android主线 | OpenJDK 8 |
Android 5.x至android 6.0 | Oracle JDK 7 |
Android 2.3.x至Android 4.4.x | Oracle JDK 6 |
Android 1.5至Android 2.2.x | Oracle JDK 5 |
官方编译环境搭建文档地址
source build/envsetup.sh
或者
. build/envsetup.sh
复制代码
. lunch aosp_arm64-eng
复制代码
该命令表示针对模拟器进行完整编译,而且全部调试功能均处于启用状态。 若是您没有提供任何参数就运行命令,lunch 将提示您从菜单中选择一个目标。 全部编译目标都采用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能组合的代号。
BUILDTYPE 是如下类型之一:
编译类型 | 使用状况 |
---|---|
user | 权限受限;适用于生产环境(没有root权和dedug等) |
userdebug | 在user版本的基础上开放了root权限和debug权限. |
eng | 开发工程师的版本,拥有最大的权限,此外还附带了许多debug工具 |
make -j8
复制代码
编译中
运行模拟器
//依次输入如下命令(若是是在编译成功源码以后直接想运行模拟器,则直接输入emulator命令就行,由于前面编译源码已经输入过以上两条命令)
. build/envsetup.sh
lunch(选择刚才你编译源码设置的目标版本)
emulator
复制代码
编译idegen
source build/envsetup.sh // 将执行文件设置为临时变量
mmm development/tools/idegen/ //生成idegen.jar文件(#### build completed successfully (49 seconds) #### 标识生成idegen.jar文件)
复制代码
执行脚本 idegen.sh
. development/tools/idegen/idegen.sh
复制代码
看到下图,表示编译idegen完成,执行成功后在asop的根目录下生成android.ipr和android.iml两个个文件:
编译中遇到的坑
Error: library-pathout/host/linux-x86/lib64/libsepolwrap.so does not exist
openJDK 配置环境变量方法
1.用gedit文本编辑器在/etc/profile中添加环境变量:
命令 : sudo gedit /etc/profile
2.在打开的/etc/profile文件末尾添加下面几行:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
复制代码
编译Android 8.0出现问题
loadlocale.c:130:_nl_intern_locale_data: ?? 'cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' ???
Aborted (core dumped)
复制代码
能够在 build/envsetup.sh 最后加入
export LC_ALL=C
复制代码
编译出现 Try increasing heap size with java option '-Xmx',编译失败
解决方案,依次执行如下命令
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
jack-admin kill-server && jack-admin start-server
复制代码
最后
到此,Android源码编译完成,源码编译是一个须要耐心的过程,但愿看到文章的你也能够编译成功。文章中若是有错误,请你们给我提出来,你们一块儿学习进步,若是以为个人文章给予你帮助,也请给我一个喜欢或者关注。
参考资料