By Toradex 胡珊逢

简介

安卓 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/manifestsDocker镜像位于/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 上安装安卓

借助Toradex Easy Installer 可以很方便地在线直接将Android 安装到IMX8 模块上。

                                              image001.png

 

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

 

 

 

硬件连接

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

image002.jpg

 

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

----------------------------

$ sudo apt-get install adb

$ adb shell

apalis_8qm:/ $

----------------------------

 

 

Android Studio 配置

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

 

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

image003.png

选择Sunflower app

image004.png

 

例程会从github上下载。

image005.png

 

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

image006.png

 

 

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

image007.png

 

IMX8运行Sunflower

image008.jpg

 

 

使用Update Factory 进行OTA更新

Update Factory进行注册试用。

image009.png

 

 

根据注册的账号信息,修改配置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上的安卓应用开发。和手机、平板安卓设备不同,行业设备可能还需要很多的外设通信,如CANSPII2C等,以及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/