Firefly开源社区

打印 上一主题 下一主题

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

51

积分

0

威望

0

贡献

技术小白

积分
51

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

发表于 2020-10-9 21:57:57      浏览:5990 | 回复:0        打印      只看该作者   [复制链接] 楼主
本帖最后由 as-null 于 2020-10-9 22:03 编辑

        编译Android对系统机器的配置要求较高:

  • 64CPU
  • 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' 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

image.jpg (178.28 KB, 下载次数: 715)

image.jpg
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表