Android系统源码学习——编译运行简记
2017-12-13 10:32
405 查看
参考
下载源码
下载安装repo工具
创建源码接收目录
配置git用户名和邮箱
初始化代码仓库
同步源码
编译源码
问题预防
编译android系统
编译Android SDK
运行
运行模拟器
真机运行
这一步可选,为了防止后面运行
下载源码
下载安装repo工具
创建源码接收目录
配置git用户名和邮箱
初始化代码仓库
同步源码
编译源码
问题预防
编译android系统
编译Android SDK
运行
运行模拟器
真机运行
参考
Android Open Source Project中文网站下载源码
源码来源:清华大学开源软件镜像站——AOSP下载安装repo工具
不要一看到googlexxx就被唬到了,这个链接完全可以访问。mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo
这一步可选,为了防止后面运行
repo init出现无法连接到gerrit.googlesource.com错误,切换到清华的git源
echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'" >> ~/.bashrc . ~/.bashrc
创建源码接收目录
mkdir SOURCE_DIR cd SOURCE_DIR
配置git用户名和邮箱
git config --global user.name "Your Name" git config --global user.email "you@example.com"
初始化代码仓库
初始化主代码仓库:repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest[/code]
初始化某个分支版本代码仓库(代号、标记和细分版本号列表):repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r4同步源码
这里并发数不能太大,按清华开源镜像站建议,设为4。repo sync -j4
这一步会耗时较久,如果中途失败了,可以重新运行repo sync继续。编译源码
问题预防
包括android 7.x在内的,凡是使用了jack编译工具的源码版本,在编译之前需要修改一个地方:源码目录/prebuilts/sdk/tools/jack-admin文件,找到JACK_SERVER_COMMAND声明的地方,将原来的:#... 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参数,可以防止编译期间出现Out of memory error...GC overhead limit exceeded.的问题。
如果编译中途遇到才修改,建议重启先手动重启jack-server,再继续make。./prebuilts/sdk/tools/jack-admin stop-server ./prebuilts/sdk/tools/jack-admin start-server编译android系统
. build/envsetup.sh lunch make -j8
编译输出目录在:SOURCE_DIR/out/target/product/[PRODUCT_NAME],如:android-7.1.1_r14/out/target/product/bullhead。
这一步一般几个小时,视电脑性能而定。完成时截图:编译Android SDK
. build/envsetup.sh lunch sdk-eng make sdk
编译输出目录在:SOURCE_DIR/out/host/linux-x86/sdk运行
运行模拟器
完整操作:. build/envsetup.sh lunch emulator
如果是在同一个终端里编译完sdk后立即运行模拟器,由于前面已经执行过.及lunch命令了,就只需要执行:emulator真机运行
手机型号:Nexus 5X
配置电脑对手机的usb访问权限,可以参考我的另一篇博客:Linux配置Android设备USB访问权限。
如何进入fastboot模式并解锁设备,详细步骤可以参考官方指导:Running Builds。
主要用到的命令是:$ adb reboot bootloader #重启手机进入fastboot $ fastboot oem unlock #重新加锁为:fastboot oem lock $ fastboot flashall -w #将编译的镜像写入手机flash
如果是在新的终端里面cd到编译目录,直接运行fastboot flashall -w,会遇到error: could not load boot.img的问题:$ cd android-7.1.1_r14/out/target/product/bullhead $ fastboot flashall -w error: could not load boot.img
经过我的摸索,得到的解决方法是:先运行一次lunch命令,选择对应的编译版本和类型,再烧写镜像就好了。$ cd android-7.1.1_r14 $ lunch # 选择设备对应的类型,我这里选择:21. aosp_bullhead-userdebug $ cd out/target/product/bullhead $ fastboot flashall -w target reported max download size of 536870912 bytes wiping userdata... Creating filesystem with parameters: Size: 11773390848 Block size: 4096 Blocks per group: 32768 Inodes per group: 8176 Inode size: 256 Journal blocks: 32768 Label: Blocks: 2874363 Block groups: 88 Reserved block group size: 703 Created filesystem with 11/719488 inodes and 84965/2874363 blocks wiping cache... Creating filesystem with parameters: Size: 100663296 Block size: 4096 Blocks per group: 32768 Inodes per group: 6144 Inode size: 256 Journal blocks: 1024 Label: Blocks: 24576 Block groups: 1 Reserved block group size: 7 Created filesystem with 11/6144 inodes and 1422/24576 blocks -------------------------------------------- Bootloader Version...: BHZ21c Baseband Version.....: M8994F-2.6.39.3.03 Serial Number........: 01bf27deae6532f8 -------------------------------------------- checking product... OKAY [ 0.020s] sending 'boot' (12033 KB)... OKAY [ 0.370s] writing 'boot'... OKAY [ 0.209s] sending 'recovery' (16165 KB)... OKAY [ 0.455s] writing 'recovery'... OKAY [ 0.284s] erasing 'system'... OKAY [ 0.431s] sending sparse 'system' 1/2 (503150 KB)... OKAY [ 12.371s] writing 'system' 1/2... OKAY [ 9.437s] sending sparse 'system' 2/2 (484987 KB)... OKAY [ 12.276s] writing 'system' 2/2... OKAY [ 8.659s] erasing 'vendor'... OKAY [ 0.099s] sending 'vendor' (199062 KB)... OKAY [ 4.913s] writing 'vendor'... OKAY [ 3.757s] erasing 'userdata'... OKAY [ 1.206s] sending 'userdata' (136726 KB)... OKAY [ 3.362s] writing 'userdata'... OKAY [ 2.378s] erasing 'cache'... OKAY [ 0.071s] sending 'cache' (5688 KB)... OKAY [ 0.232s] writing 'cache'... OKAY [ 0.116s] rebooting... finished. total time: 60.783s
附两张user-debug版本的Android 7.1运行截图![]()
相关文章推荐
- Android源码编译可执行文件 | 运行 | C层检测系统API版本号
- Android源码编译可执行文件 | 运行 | C层检测系统API版本号
- 如何编译运行Android系统自带桌面Launcher2源码
- Android中如何编译运行系统自带桌面Launcher2源码
- 【Android 系统】编译android源码学习
- Android中如何编译运行系统自带桌面Launcher2源码
- Android源码学习(5)Android编译系统之envsetup.sh
- ANDROID源码编译3 - 编译和运行
- Ubuntu系统 + VMware虚拟机+32位编译环境 安装编译Android2.3源码
- Ubuntu10.04系统 32位机上安装编译Android2.3源码
- Android 源码编译 文件系统制作
- ubuntu 11.10(32位系统)下编译android源码
- Android 4.0.1 源码下载,编译和运行
- Android通过源码编译apk获得系统权限
- ubuntu 11.10(32位系统)下编译android源码
- android 4.0.1源码编译,学习错误解决
- android修改系统源码(重新编译源码)
- Android系统源码编译全过程—— Android编译问题:Only 64-bit build environments are supported beyond froyo/2.2
- 将系统自带的Launcher2源码导入eclipse中编译运行
- Android系统源码编译全过程——下载Android源文件并编译