您的位置:首页 > 编程语言 > ASP

在Ubuntu 16.04上为树莓派(RaspBerry Pi 3)编译Android 7(Nougat)

2017-08-08 08:58 645 查看


1. 环境准备和介绍        

本文章的测试环境如下:

软件环境:VMware Workstation Pro + Ubuntu 16.04  64 bit,虚拟机的内存配置6GB,4个CPU

硬件环境:RaspBerry Pi3 + 16GB SD卡

测试Android版本:Android-7.1.2_r19

2.下载Android源码

2.1 Installing Repo

Repo是一个用于方便管理Android代码的一个工具,管理Android使用的多个Git库。

安装Repo

mkdir ~/bin
export PATH=$PATH:$HOME/bin

下载Repo

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2.2 Install python-mako

sudo apt-get install python-mako

2.3 Download Android source code
Prepare working directory

$ sudo mkdir -p /workspace/raspberry

$cd /workspace/raspberry

Download source codes

$repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.2_r19
$ git clone https://github.com/android-rpi/local_manifests .repo/local_manifests
$ repo sync

 

sync过程会持续非常长的时间,如果网络状况比较好,大概需要4-5小时。

可以休息一下了,看下下面的下载参考吧。

http://source.android.com/source/downloading.html

https://github.com/android-rpi/local_manifests

3. 编译RPI 3的Android版本

3.1 编译Android的RPI版本

编译过程看起来非常简单,但是编译的时间会很漫长,而且有可能出错。

Build Kernel

$
cd kernel/rpi

$ ARCH=arm scripts/kconfig/merge_config.sh arch/arm/configs/bcm2709_defconfig kernel/configs/android-base.config kernel/configs/android-recommended.config

$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make zImage

$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make dtbs

Build Android

$
source build/envsetup.sh

$ lunch rpi3-eng

$ make ramdisk systemimage

或者

$make-j4/8/16

如果你有足够的内存和CPU,用-j参数可以加速编译过程,如果内存和CPU太少,就不要加参数慢慢等吧。顺便看看下面的链接

https://github.com/android-rpi/device_brcm_rpi3

3.2 编译中出现的问题

在编译过程中,遇到了两种错误信息,都与内存配置有关,也就是说要编译Android 7来耍一下,你需要至少有5GB以上的内存。

Jack server report failure

在编译过程中,如果遇到jack-admin报告错误,大体如下,说明你的jack-admin配置的内存不够,请参照下面的解决方法修改prebuilts/sdk/tools/jack-admin中对java参数的配置。

3 warnings

[ 34% 16872/49032] host Java: bouncyca...tle-bcpkix-

host_intermediates/classes)

warning: [options] bootstrap class path not set in conjunction with -

source 1.7

Note: Some input files use unchecked or unsafe operations.

Note: Recompile with -Xlint:unche
4000
cked for details.

1 warning

[ 34% 16888/49032] Building with Jack:...l_intermediates/with-

local/classes.dex

FAILED: /bin/bash out/target/common/obj/JAVA_LIBRARIES/core-

all_intermediates/with-local/classes.dex.rsp

Communication error with Jack server (56). Try 'jack-diagnose'

ninja: build stopped: subcommand failed.

build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed    

make: *** [ninja_wrapper] Error 1

               该问题可以通过如下的修改解决

@ubuntu:/workspace/raspberry/prebuilts/sdk/tools$ diff -Nru jack-admin jack-admin.original 

--- jack-admin 2017-08-03 11:46:29.352035527 +0800

+++ jack-admin.original 2017-08-08 10:44:56.580124906 +0800

@@ -451,7 +451,7 @@

     if [ "$RUNNING" = 0 ]; then

       echo "Server is already running"

     else

-      JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS-Xmx5120M
-cp $LAUNCHER_JAR $LAUNCHER_NAME"

+      JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS cp $LAUNCHER_JAR $LAUNCHER_NAME"

       echo "Launching Jack server" $JACK_SERVER_COMMAND

       (

         trap "" SIGHUP

在我的环境下,用5GB勉强可以工作,低于4.5GB之后该jack-admin问题就会一直报告。如果内存足够,推荐6GB。

Allocate Memory failure.

如果你的内存不够大,或者为虚拟机分配的内存过低时,或者在make时用的-j参数过大,都有可能遇到该问题。解决的方法是分配更多的内存给Ubuntu,或者降低-j的参数。

4. 准备RPI 3的SD卡

4.1 Partitions of SD card

  p1 512MB for BOOT : Do fdisk : W95 FAT32(LBA) & Bootable, mkfs.vfat

  p2 512MB for /system : Do fdisk, new primary partition

  p3 512MB for /cache  : Do fdisk, mkfs.ext4

  p4 remainings for /data : Do fdisk, mkfs.ext4

 Set volume label for each partition - system, cache, userdata

  : use -L option of mkfs.ext4, e2label command, or -n option of mkfs.vfat

4.2 Install kernel and ramdisk to BOOT partition

cp -rf  device/brcm/rpi3/boot/* /media/xxx/boot/
cp -rf  kernel/rpi/arch/arm/boot/zImage /media/xxx/boot/
cp -rf  kernel/rpi/arch/arm/boot/dts/bcm2710-rpi-3-b.dtb /media/xxx/boot/dts
cp -rf  kernel/rpi/arch/arm/boot/dts/overlays/vc4-kms-v3d.dtbo /media/xxx/boot/dts/overlays/vc4-kms-v3d.dtbo
cp -rf  out/target/product/rpi3/ramdisk.img /media/xxx/boot/

4.3 Install filesystem to SYSTEM partition

$ sudo dd if=out/target/product/rpi3/system.img of=/dev/<p2> bs=1M// 我的环境下system分区设备为sdc2

准备完毕,把SD卡插入到你的树莓派3上,可否看到熟悉的Android启动界面呢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: