Android7.0 下载编译
来源:互联网 发布:怎么在淘宝上注册开店 编辑:程序博客网 时间:2024/05/22 00:42
编译环境:Ubuntu 16.04
镜像文件:清华大学AOSP镜像 Android7.0
一、源码下载
1 镜像地址
清华大学AOSP(Android Open Source Project)https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
- 1
- 2
2 过程摘录
下载Repo 工具
mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo
- 1
- 2
- 3
- 4
使用每月更新的初始化包
由于首次同步需要下载 24GB 数据,过程中任何网络故障都可能造成同步失败,我们强烈建议您使用初始化包进行初始化。下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。由于所有代码都是从隐藏的.repo
目录中 checkout 出来的,所以我们只保留了.repo
目录,下载后解压 再 repo sync
一遍即可得到完整的目录。
使用方法如下:
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包tar xf aosp-latest.tarcd AOSP # 解压得到的 AOSP 工程目录# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录repo sync # 正常同步一遍即可得到完整目录# 或 repo sync -l 仅checkout代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
此后,每次只需运行 repo sync
即可保持同步。 我们强烈建议您保持每天同步,并尽量选择凌晨等低峰时间
3 解决repo sync下载代码时Failed connect错误的办法:
下载android代码时错误提示:error: Failed connect to android.googlesource.com:443
解决方法:编辑/etc/hosts文件
vim /etc/hosts
- 1
增加下面内容,保存
173.194.72.82 http://www.googlesource.com173.194.72.82 android.googlesource.com37.61.54.158 cache.pack.google.com173.194.74.82 gerrit.googlesource.com
- 1
- 2
- 3
- 4
4 其他
- 初始化包大小21.4G,我的网速5-6M/s,下载时间基本一个小时左右。
- Android7.0,aosp目录编译完之后的大小是54.6G,安装Ubuntu时要注意留够足够的空间,推荐100G+以上。
二、源码编译
1 搭建编译环境
- openJdk is needed !我自己平时开发用的是JDK1.8,这里就要安装一下openjdk,并且更改环境变量。
sudo apt-get updatesudo apt-get install openjdk-7-jdk
- 1
- 2
但是如果你是刚安装完Ubuntu,那么就可以跳过此步骤,Ubuntu自带openjdk
- required package
sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
- 1
- 因为源码包含C 和 C++代码,gcc为必须
sudo apt-get install gcc
- 1
- Setting up ccache , 使用ccache
ccache是一个编译器ccache用于C和C++。可以让构建更加快速。在源代码的根目录处,做如下操作:
$export USE_CCACHE=1$export CCACHE_DIR=/<path_of_your_choice>/.ccache$prebuilts/misc/linux-x86/ccache/ccache -M 50G</path_of_your_choice>
- 1
- 2
- 3
建议的cache大小为50-100G
可以使用如下操作来查看使用的ccache大小
$watch -n1 -d prebuilts/misc/linux-x86/ccache/ccache -s
- 1
若使用Ice Cream Sandwich(4.0.x)或更老的版本,需要用prebuilts来代替prebuilts/misc
2 开始编译 Building the System
- 1.Set up environment
$ source build/envsetup.sh
- 1
or
$ . build/envsetup.sh
- 1
- 2.Choose a Target
$ lunch You're building on LinuxLunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_arm64-eng 3. aosp_mips-eng 4. aosp_mips64-eng 5. aosp_x86-eng 6. aosp_x86_64-eng 7. aosp_manta-userdebug 8. aosp_flo-userdebug 9. aosp_deb-userdebug 10. full_fugu-userdebug 11. aosp_fugu-userdebug 12. aosp_tilapia-userdebug 13. aosp_grouper-userdebug 14. aosp_mako-userdebug 15. aosp_hammerhead-userdebug 16. aosp_flounder-userdebug 17. aosp_shamu-userdebug 18. mini_emulator_x86-userdebug 19. mini_emulator_arm64-userdebug 20. mini_emulator_x86_64-userdebug 21. mini_emulator_mips-userdebug 22. m_e_arm-userdebugWhich would you like? [aosp_arm-eng]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 3.build
使用make构建,GNU make可以通过使用-jN参数来处理并行任务。此处的N,根据所用的计算机的硬件的核数来指定,一般N指定为CPU核心的1到2倍。例如我的CPU是i5-6500(CPU4个核,每个核2个线程),那么最优的构建是使用make -j8。
make -j8
- 1
3 build successfully
#### make completed successfully (01:04:27 (hh:mm:ss)) ####
- 1
- 目录结构如下:
7 9月 24 00:36 android-info.txt 62 9月 24 00:22 build_fingerprint.txt 4.0K 9月 24 10:34 cache 66M 9月 24 12:26 cache.img 70K 9月 23 23:51 clean_steps.mk 38 9月 24 00:22 current_build_config.mk 4.0K 9月 24 10:41 data 4.0K 9月 24 09:51 dex_bootjars 4.0K 9月 24 01:33 gen 1.4K 9月 24 12:25 hardware-qemu.ini 70K 9月 24 11:00 installed-files.txt 1.1M 9月 24 00:30 module-info.json 4.0K 9月 24 11:00 obj 38 9月 23 23:51 previous_build_config.mk 1.5M 9月 24 10:40 ramdisk.img 4.0K 9月 24 10:39 recovery 4.0K 9月 24 10:39 root 4.0K 9月 24 10:39 symbols 4.0K 9月 24 10:50 system 1.8G 9月 24 11:01 system.img 550M 9月 24 10:58 userdata.img 550M 9月 24 12:41 userdata-qemu.img ~/aosp/out/target/product/generic$
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
4 编译中的问题解决
- 第一次编译,在编译到82%的时候失败,报错 : Increase Java heap size
including ./tools/external/fat32lib/Android.mk ... Starting build with ninja ninja: Entering directory `.' [ 0% 1/21542] Ensure Jack server is installed and started Jack server already installed in "/home/smile/.jack-server" Server is already running [ 0% 2/21542] Building with Jack: out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-all_intermediates/with-local/classes.dex.rsp Java heap space Try increasing heap size with java option '-Xmx<size>' Warning: This may have produced partial or corrupted output. ninja: build stopped: subcommand failed. build/core/ninja.mk:146: recipe for target 'ninja_wrapper' failed make: *** [ninja_wrapper] Error 1 \#### make failed to build some targets (08:25 (mm:ss)) ####
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
stackoverflow上关于此问题的解决方法([详见这里](http://stackoverflow.com/questions/34940793/increasing-heap-size-while-building-the-android-source-code-on-ubuntu-15-10)),在make之前进行heap size配置:
1. export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m" 2. out/host/linux-x86/bin/jack-admin kill-server 3. out/host/linux-x86/bin/jack-admin start-server
- 1
- 2
- 3
三、运行
1 推送设备(真机运行)Flash device
- To flash a device, you will need to use fastboot, which should be included in your path after a successful build. Place the device in fastboot mode either manually by holding the appropriate key combination at boot, or from the shell with
$ adb reboot bootloader
- 1
- Once the device is in fastboot mode, run
$ fastboot flashall -w
- 1
- The -w option wipes the /data partition on the device; this is useful for your first time flashing a particular device but is otherwise unnecessary.
2 模拟器运行 Flash emulator
- 1.build generic img
lunch 1即可
- 2.启动模拟器
~/aosp$ emulator emulator: WARNING: system partition size adjusted to match image file (1536 MB > 200 MB)emulator: WARNING: data partition size adjusted to match image file (550 MB > 200 MB)emulator: WARNING: Increasing RAM size to 1GB Creating filesystem with parameters: Size: 576716800 Block size: 4096 Blocks per group: 32768 Inodes per group: 7040 Inode size: 256 Journal blocks: 2200 Label: Blocks: 140800 Block groups: 5 Reserved block group size: 39 Created filesystem with 11/35200 inodes and 4536/140800 blocks resize2fs 1.42.13 (17-May-2015) The filesystem is already 140800 (4k) blocks long. Nothing to do!Creating filesystem with parameters: Size: 69206016 Block size: 4096 Blocks per group: 32768 Inodes per group: 4224 Inode size: 256 Journal blocks: 1024 Label: Blocks: 16896 Block groups: 1 Reserved block group size: 7 Created filesystem with 11/4224 inodes and 1302/16896 blocks emulator: UpdateChecker: skipped version check
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
3 注意事项
1 因为上面的环境变量配置的是临时的,所以终端关闭后,直接运行emulator是不行的,需要重新运行下/build/envsetup.sh 和lunch 选择之前编译的版本
2 安装kvm,开启硬件加速
无论是在Windows平台还是Linux平台,或者还是Mac OSX平台,虚拟机的硬件加速全靠这个。
$ sudo apt-get install qemu-kvm
- 1
直接执行,完成安装即可。
开启之后我们可以使用下面的指令来验证
$ egrep -c '(vmx|svm)' /proc/cpuinfo
- 1
执行的结果不为0
表示开启成功(我的是4
)。
参考http://timeriver.com.cn/
- Android7.0 下载编译
- Android7.0源码下载,编译,运行
- Android7.0 编译问题
- MacPro Android7.0源码下载
- Android7.0 Ninja编译原理
- Android7.0 Ninja编译原理
- Android7.0 Ninja编译原理
- VMware + ubuntu 编译android7.0
- 1. Android7.0编译问题
- 下载安装APK(兼容Android7.0)
- Android7.0下载Apk自动安装
- Android7.0下载Apk自动安装
- 下载安装APK(兼容Android7.0)
- 下载安装APK(兼容Android7.0)
- 下载安装APK(兼容Android7.0)
- Android7.0下载Apk自动安装
- 下载安装APK(兼容Android7.0)
- Android7.0下载Apk自动安装
- QThread中的互斥、读写锁、信号量、条件变量
- L1-030. 一帮一
- node.js学习(六、express创建web服务器)
- L3-011. 直捣黄龙
- 科普:手机定位的原理
- Android7.0 下载编译
- 51nod 编辑最短距离
- HDU 3349 lazy gege【数学几何】
- CentOS软件包管理之源码安装
- 在java web 中使用过滤器+反射机制+代理模式,来改进servlet
- ZOJ 2852 DP
- Java内存区域与内存溢出异常-HotSpot虚拟机对象探秘
- 【听讲座】前英特尔中国研究院首席科学家吴甘沙:无智能不驾驶
- iis 使用服务器端证书和客户端证书及访问客户端证书信息