as-null 发表于 2020-10-9 21:57:57

Android系统首次编译及问题记录

本帖最后由 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
确认无误后,就可以解压:mkdir -p ~/proj/firefly-rk3288
cd ~/proj/firefly-rk3288
tar xf /path/to/firefly-rk3288_android4.4_git_20141211.tar.gz
git reset --hard
git remote add bitbucket https://bitbucket.org/T-Firefly/firefly-rk3288.git
以后就可以直接从 bitbucket 处更新:git pull bitbucket master:master
也可以到 https://bitbucket.org/T-Firefly/ ... mmits/branch/master 在线浏览源码。 另外,linux-rockchip 社区搭建了 git 镜像服务器,详见这里。 如果要下载源码,请用以下命令(可选其它镜像服务器):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' failedmake: *** Error 1make: *** 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' failedmake: *** Error 1make: *** Waiting for unfinished jobs....host C++: dalvikvm <= art/dalvikvm/dalvikvm.cchost 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)) ####

解决方案:
[*]修改/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 := trueendif
2. 拷贝系统/usr/bin/ld.gold覆盖/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld


[*]报错信息

意思是部分api已经过时,需要处理或者升级。
解决方案:
执行命令 make update-api
页: [1]
查看完整版本: Android系统首次编译及问题记录