Blog:
iMX8 安卓Android编译和开发

Thursday, October 17, 2019

安卓 Android 因其丰富的生态环境,以及快捷的应用开发和分发,获得了广泛的市场关注。Toradex最新基于 NXP iMX8 处理器的Apalis iMX8QM 和Colibri iMX8QXP 也提供给了Android 9.0 (Pie) 支持。下面我们将介绍如从源码开始编译安卓。

安卓系统目前并非Toradex 官方直接提供技术支持的操作系统,而由合作伙伴 Kynetics 进行移植和维护。并对用户免费提供源码下载,结合NXP的发布情况不定期进行升级维护,甚至是 OTA 更新服务和增值技术支持。

构建 Docker 镜像

安卓编译是一个很复杂的过程,无论是编译安卓本身涉及的配置,还是对编译电脑的性能和网络(需要从Google服务器下载资源)。因此我们建议采用高性能CPU电脑,空余磁盘空间至少250GB。为了减少对编译环境的配置的难度,我们提供了 Docker 镜像,里面集成了编译安卓所需的工具。如果你的Ubuntu电脑之前没有安装过 Docker ,可以参考下面命令。

使用apt 安装:

$ sudo apt-get update
$ sudo apt-get install docker-ce

启动Docker

$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组

$ sudo groupadd docker
$ sudo usermod -aG docker $USER

验证Docker安装

$ docker run hello-world

在完成Docker安装后,下载Dockerfile,用其编译Docker镜像。

$ docker build -t android-build-env .

当编译完成后可以看到已经生成了android-build-env 镜像,接下来我们将在这个Docker 镜像中完成安卓编译。

$ docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
android-build-env            latest              9c9ea78b1f48        2 days ago          1.17GB
gradle                       jdk8                c7745382f42e        6 days ago          553MB

我们也将该镜像上传到了FTP,你可以直接下载并导入。

$ docker load -i android-build.tar

获取安卓源码

Kynetics 网站注册,24小时内会通过审核。然后下载所需的源码包。解压后将其中的fetch_script.sh文件和projects文件夹复制到~/android-build 目录。从 NXP 网站下载补丁文件,位于BSP, Drivers and Middleware 板块的P9.0.0_2.0.1_PATCH_ANDROID_SOURCE文件。同样将其放到~/android-build目录。我们将在该目录里使用Docker 镜像android-build-env编译安卓。

运行Docker 镜像

执行下面命令,启动Docker 镜像,并将~/android-build挂载到Docker 镜像的 /android-build 目录。

$ cd ~/android-build
$ docker run --rm -it -v ${PWD}:/android-build android-build-env bash

你将会看到一个Bash会话终端。

编译安卓

接下来的编译操作都将在Docker 镜像中完成,即上面打开的Bash会话终端。

设置BUILD_HOME变量

# export BUILD_HOME=/android-build

你将可以看到BUILD_HOM 目录下的文件。

# ls -lh $BUILD_HOME
-rwxrwxr-x  1 gradle gradle 5.3K Aug 27 12:42 fetch_script.sh
-rwxrwxr-x  1 gradle gradle  42M Oct 16 03:06 imx-p9.0.0_2.0.1-ga.tar.gz
drwxrwxr-x  5 gradle gradle 4.0K Oct  4 15:20 projects

配置 git 信息

# git config --global user.email "you@example.com"
# git config --global user.name "Your Name"

下载repo 工具

# mkdir ~/bin
# curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# chmod a+x ~/bin/repo
# export PATH=${PATH}:~/bin

由于该工具需要从Google 服务器上下载。你也可以在Docker镜像外下载,或者从我们的FTP服务器上下载,然后放在~/android-build目录中,在Docke镜像的/android-build目录中看到。

进入编译目录BUILD_HOME

# source fetch_script.sh apalis_8qm-p9.0.0_2.0.1-snapshot-20190726

该过程中将会下载所需编译工具文件,根据你的网速不同,可能需要数个小时,期间会从众多的服务器下载资源,包括Google的服务器,请保证网络的可用性。此时还未开始下载Android系统自身的源代码。

上述过程结束后,生成以下目录

# $BUILD_HOME/android_build

如果下载失败,可以删除android_build目录再次尝试。

然后启动最后的编译

# cd $BUILD_HOME/android_build
# source build/envsetup.sh
# lunch apalis_8qm-userdebug

接受Kynetics EULA协议,根据编译电脑的CPU核数进行编译

# make -j8

这个过程也将消耗数个小时之多。

期间会下载所有涉及的源代码,包括从https://android.googlesource.com/下载大量Android 源码。如果你的网络带宽(首次会下载30GB左右的数据)不容乐观,可以切换国内的镜像站点。

修改aosp-p9.0.0_2.0.0-ga.xml文件。该文件可以在Ubuntu主机上,或者在Docker镜像中修改。Ubuntu 上位于~/android-build/android_build/.repo/manifests,Docker镜像位于/android-build/android_build/.repo/manifests。将其中的https://android.googlesource.com/ 使用 https://aosp.tuna.tsinghua.edu.cn/替换。

<remote  name="aosp"
          fetch="https://aosp.tuna.tsinghua.edu.cn/"
          review="https://android-review.googlesource.com/" />

详细的说明请参考网站说明。

IMX8 上安装安卓

在完成了安卓编译和安装后,下面我们将简单介绍如何在IMX8 上开发一个安卓APP。

硬件连接

通过Ixora 底板上的OTG,将IMX8连接到开发电脑。

在Ubuntu上安装adb后即可访问iMX8 上的安卓系统。

$ sudo apt-get install adb
$ adb shell
apalis_8qm:/ $

Android Studio 配置

下载最新的Android Studio并安装。在撰写本文是,Android Studio的默认安装已经选择了Android 10 SDK,所以需要手动安装Android 9 的 SDK。Android Studio SDK安装过程也会访问Google服务器,请注意网络环境。

安装完成进入欢迎界面后,选择Import an Android code sample

选择Sunflower app。

例程会从github上下载。

等待Gradle build 结束。然后点击右上方的 Run按键。

在Connected Devices中选择Toradex 计算机模块。

在IMX8运行Sunflower。

使用Update Factory 进行OTA更新

Update Factory进行注册试用。

根据注册的账号信息,修改配置ufConf.conf

tenant=<Your Tenant>
url=https://personal.updatefactory.io/
controllerId=<Chosen Controller ID>
gatewayToken=<From System Config>
targetToken=<From Device Details>
apiMode=true
enable=true
updateFactoryServer=true

将配置文件发送到IMX8。重启后生效。

$ adb push ufConf.conf /sdcard/UpdateFactoryConfiguration/ufConf.conf

总结

通过上面的介绍,您可以很快开启在IMX8上的安卓应用开发。和手机、平板安卓设备不同,行业设备可能还需要很多的外设通信,如CAN、SPI、I2C等,以及GPIO控制,如果您需要使用这些接口,请联系Toradex或者Kynetics。

参考:

https://developer.toradex.com/knowledge-base/partner-demo-image-kynetics-android#-apalis-imx6-apalis-imx8qm-v10b-and-colibri-imx8qxp-v10b
https://developer.toradex.cn/knowledge-base/how-to-setup-android-build-environment-using-docker
https://www.kynetics.com/docs/2019/Android_Pie_9.0.0_Toradex_i.MX8QM_Apalis_Ixora_B0/

Author: 胡珊逢,FAE,韬睿(上海)

Leave a comment

Please login to leave a comment!
Have a Question?