基于NXP iMX8 进行安卓Android编译和开发

2024-04-19 11:08

本文主要是介绍基于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 "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 上安装安卓

借助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 的 SDK。Android 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上的安卓应用开发。和手机、平板安卓设备不同,行业设备可能还需要很多的外设通信,如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/

 

这篇关于基于NXP iMX8 进行安卓Android编译和开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/917372

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(