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:unchecked 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/ bs=1M// 我的环境下system分区设备为sdc2


准备完毕,把SD卡插入到你的树莓派3上,可否看到熟悉的Android启动界面呢


更多相关文章

  1. Out Of Memory Error in Android(安卓)- part 1
  2. 使用meminfo分析Android单个进程内存信息
  3. Android应用性能优化
  4. Android(安卓)Studio 之 Gradle 安装配置和编译
  5. Androrat 编译运行错误集
  6. Android(安卓)网络框架Volley JAR包生成
  7. NDK HOWTO
  8. [置顶] 解决Android(安卓)SDK和Android(安卓)Studio不能更新的问
  9. Unity 打包错误:CommandInvokationFailure: Failed to build apk

随机推荐

  1. android studio 如何进行单元测试
  2. Android的AutoCompleteTextView在API17高
  3. Android 蓝牙自动连接实现
  4. Android NDK概述
  5. 嵌入式开发八:ARM cortex A8/9 - Android(
  6. flutter配置高德地图SDK
  7. android粗略获得程序运行时间的方法
  8. Android 获取经纬度。2018年写
  9. Android service通信
  10. imageView动画效果