本帖最后由 as-null 于 2020-10-9 22:03 编辑
编译Android对系统机器的配置要求较高:
- 64位CPU
- 16GB物理内存+交换内存
- 30GB空闲的磁盘空间用于构建,源代码树另外占用大约8GB(共需要38GB)
- Ubuntu系统(官方推荐12.04,可以使用更新系统),本次构建使用ubuntu16.04
- Jdk 环境 openjdk1.7
Ubuntu系统在编译android前需要安装编译用到的系统库:
ubuntu 12.04 软件包安装:
sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ g++-multilib mingw32 tofrodos gcc-multilib ia32-libs\ python-markdown libxml2-utils xsltproc zlib1g-dev:i386
Ubuntu 13.10/14.04 软件包安装:
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev \ libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl \ libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \ lib32readline-gplv2-dev gcc-multilib libswitch-perl
安装 ARM 交叉编译工具链和编译内核相关软件包:
sudo apt-get install gcc-arm-linux-gnueabihf \ lzop libncurses5-dev \ libssl1.0.0 libssl-dev
下载rk3288的Androidsdk,rk3288最新sdk为5.1的起下载地址:百度网盘
下载完成后先验证一下 MD5 码: $ md5sum /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz
8fe99f519d487ff40c8bc7b5ded62887 firefly-rk3288_android4.4_git_20141211.tar.gz
确认无误后,就可以解压: git clone -b firefly/master git://git.us.linux-rockchip.org/rk3288_r-box_android4.4.2_sdk.git
编译android
编译内核
编译正式版(0930)开发板的内核: cd ~/proj/firefly-rk3288/kernel make firefly-rk3288_defconfig make -j8 firefly-rk3288.img 编译公测版(0809)开发板的内核: cd ~/proj/firefly-rk3288/kernel make firefly-rk3288_beta_defconfig make -j8 firefly-rk3288_beta.img
编译 Android
cd ~/proj/firefly-rk3288 make -j8 ./mkimage.sh
烧写分区映像
上一步骤的 ./mkimage.sh 会重新打包 boot.img 和 system.img, 并将其它相关的映像文 件拷贝到目录 rockdev/Image-rk3288/ 中。以下列出一般固件用到的映像文件: - boot.img :Android 的初始文件映像,负责初始化并加载 system 分区。
- kernel.img :内核映像。
- misc.img :misc 分区映像,负责启动模式切换和急救模式的参数传递。
- recovery.img :急救模式映像。resource.img :资源映像,内含开机图片和内核的设备树信息。
- system.img :Android 的 system 分区映像,ext4 文件系统格式。
- 请参照 如何升级固件 一文来烧写分区映像文件。
如果使用的是 Windows 系统,将上述映像文件拷贝到 AndroidTool (Windows 下的 固件升级工具)的 rockdev\Image 目录中,之后参照升级文档烧写分区映像即可,这样的好 处是使用默认配置即可,不用修改文件的路径。
打包成统一固件
编译完可以使用Firefly的脚本打包成统一固件,执行如下命令:
./FFTools/mkupdate/mkupdate.sh -l rk3288_box-userdebug
编译问题 编译问题按编译过程的顺序列出: clang: error: linker command failed with exit code 1 (use -v to see invocation) build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1 make: *** Waiting for unfinished jobs....
clang: error: linker command failed with exit code 1 (use -v to see invocation) build/core/host_shared_library_internal.mk:44: recipe for target 'out/host/linux-x86/obj32/lib/libnativehelper.so' failed make: *** [out/host/linux-x86/obj32/lib/libnativehelper.so] Error 1 make: *** Waiting for unfinished jobs.... host C++: dalvikvm <= art/dalvikvm/dalvikvm.cc host StaticLib: libsigchain_32 (out/host/linux-x86/obj32/STATIC_LIBRARIES/libsigchain_intermediates/libsigchain.a) make: *** wait: No child processes. Stop.
#### make failed to build some targets (42:14 (mm:ss)) ####
解决方案: - 修改[source_android]/art/build/Android.common_build.mk 如下:
# Host. ART_HOST_CLANG := false # Kevin modified below for Ubuntu 16.04 #ifneq ($(WITHOUT_HOST_CLANG),true) ifneq ($(WITHOUT_HOST_CLANG),false) # By default, host builds use clang for better warnings. ART_HOST_CLANG := true endif
2. 拷贝系统/usr/bin/ld.gold覆盖 [source_android]/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld
意思是部分api已经过时,需要处理或者升级。
解决方案:
执行命令 make update-api
|