基于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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin