赞
踩
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 |
具体要求可查看:Google源码编译要求
sudo apt-get install git
git config --global user.email “test@test.com”
git config --global user.name “test”
其中test@test.com为你自己的邮箱,test为你的用户名
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/
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
sudo apt-get install libncurses5
搭建编译环境官方文档(Google搭建Android源码编译环境)
创建AOSP(文件夹名称可以更改)文件夹作为本地代码仓库,命令如下:
mkdir AOSP
cd AOSP
通过执行初始化仓库命令可以获取AOSP项目master上最新的代码并初始化该仓库,命令如下:
//官方下载(异世界下载,不推荐)
repo init -u https://android.googlesource.com/platform/manifest
//清华镜像源(推荐)
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
//科大镜像源(推荐)
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest
如果执行该命令的过程中,如果提示无法连接到 gerrit.googlesource.com,那么我们只需要编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为:
REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'
然后重新执行上述命令即可
一般情况下我们只需要关注某个特定版本的代码(分支列表)如:
//不推荐
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r30
真 · 初始化
//推荐
repo init --depth=1 -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r30
--depth=1
表示只下载最近版本的代码,只保留最近的commit版本
同步命令
repo sync
多线程并发同步
repo sync -j`nproc`
//nproc表示cpu支持最大线程数,如双核四线程,可使用
repo sync -j4
//四核八线程,可使用
repo sync -j8
-j
参数指定同时运行多少个任务,nproc
是当前计算机的处理单元个数
真 · 同步
//推荐
repo sync -c -f --no-tags --no-clone-bundle -j`nproc`
-c
或者--current-branch
表示只拉取当前分支代码(不指定可能会拉取其他分支的代码)
--no-tags
不拉取tags,tag虽然不大,但架不住多
--no-clone-bundle
不使用clone.bundle,clone.bundle是git bundle一样的打包文件,使用bundle文件可以做cdn下载的分流,cdn听上去不错,但是如果cdn到google的服务器,或者clone.bundle本来就占空间,不是很划算,所以不使用clone.bundle
-f
如果sync失败,继续同步
--force-sync
如果文件目录有差异,强制覆盖掉
//注意:需要在源码文件夹根目录执行
source build/envsetup.sh
或
./build/envsetup.sh
lunch
结果如下:
选择编译目标(示例:选择aosp_x86_64-eng
)
aosp_x86_64-eng
或
6
进行编译:
//nproc为cpu支持的最大线程数
make -j'nproc'
//如四核八线程可执行
make -j8
耐心等待编译完成即可
至此,Android 源码编译结束
接下来可以通过emulator
命令开启Android模拟器
//启动模拟器
emulator
运行结果如下:
make
指令进行源码编译时不会重复编译已经编译过的资源)/源码根目录/prebuilts/sdk/tools/jack-admin
打开,找到JACK_SERVER_COMMAND=“java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME”
更改为:
JACK_SERVER_COMMAND=“java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS
-Xmx4096M
-cp $LAUNCHER_JAR $LAUNCHER_NAME”
其中-Xmx4096M
表示指定的jack_server内存大小,我在内存大小为8G的情况下设置成4096M,具体设置多少视实际情况而定。
编译过程中经常出现类似如下错误:
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
ninja: build stopped: subcommand failed.
build/core/ninja.mk:148: recipe for target ‘ninja_wrapper’ failed
make: *** [ninja_wrapper] Error 1
或
_nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))’ failed
解决方法:
在build/envsetup.sh脚本中最后添加一句话
export LC_ALL=C
(工具链绝对路径太长导致(ubuntu18))
保存文件,并重新执行source build/envsetup.sh
和lunch
等指令并重新编译源代码。
源码编译成功后,执行emulator
报如下错误:
这是由于KVM用户组权限问题导致模拟器启动失败,具体解决方法请参考Ubuntu 18.04 emulator运行Android源码编译的 X86 虚拟机image
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。