基于NXP iMX8 进行安卓Android编译和开发
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 "[email protected]"
# 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 上安装安卓
借助Toradex Easy Installer 可以很方便地在线直接将Android 安装到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.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/