史上最全面的Ubuntu下Android 下载、编译、运行

目录

目录... 1

1 简介... 1

2 环境搭建... 1

2.1 主机配置... 1

2.2 Ubuntu安装... 2

2.3 JDK安装... 3

2.4 其余包安装... 4

3 安装repo. 4

3.1 初始化repo客户端... 6

3.2 repo init 6

3.3 repo project完成工程... 7

3.4 重新执行repo init 8

3.5 repo sync. 9

4 正常下载... 12

5 下载中出现问题... 13

5.1问题1:... 14

5.2问题2:... 14

5.3问题3:... 15

5.4问题4:... 15

6 下载完成... 16

7 编译:... 18

7.1下载MALI 400(针对GPU)... 18

7.2 安装MALI 400. 18

7.3 编译Android源码... 18

7.4 编译出错... 19

7.4.1 错误1. 19

7.4.2 错误2. 20

7.4.3 错误3(可忽略)... 21

7.4.4 错误4. 21

7.4.5 错误5. 21

7.4.6 错误6. 22

7.4.7 错误7. 23

7.4.8 错误8. 25

7.4.9 错误9. 26

7.5 编译完成... 26

8 运行emulator. 28

1 简介

本小弟由于项目需要,准备做一个XXX设备。采用平台方案为:ZYNQ(ZU9EG)+ Android。

本小弟接触过很多ZYNQ的平台,但是Android还从未接触过(除了安卓手机),哈哈哈。所以就上网查询各种资料,开始摸石头过河。

首先在Xilinx的官网去搜索ZYNQ跑Android系统发现内容基本没有,但是搜索到了一个关键的东东《Getting Started with Android 8 v2019.2 for Xilinx Zynq UltraScale MPSoC》然后就开始了搭建之路。

https://github.com/MentorEmbedded/mpsoc-manifest/wiki/Getting-Started-with-Android-8-v2019.2-for-Xilinx-Zynq-UltraScale--MPSoC

貌似Xilinx官方并没有做ZYNQ平台的Android适配,应该是西门子的几个大哥在做适配。

2 环境搭建

2.1 主机配置

下载、安装Andorid对计算机的配置要求相对较高,可以省去很多恶心的问题:比如编译中:内存不足,硬盘空间不够。

我的电脑配置:

内存:16GB;

硬盘:1TB;(这个大于200G都可以)

2.2 Ubuntu安装

史上最全面的Ubuntu下Android 下载、编译、运行_第1张图片

图 1 系统版本

 

14.04.5 LTS镜像获取地址:

 图 2 iso镜像

http://old-releases.ubuntu.com/releases/14.04.0/?_ga=2.83239126.1304170281.1628644245-1553457993.1616034659

具体安装过程大家肯定都会,就不BB了。

安装虚拟机的时候有两个大坑,提前跟你们说一下,不然后面会让你很恶心:

  1. 内存必须大于3G,不然编译Android源码的时候会有问题,下面有说明;(我设置的8G
  2. 硬盘最好大于150G,不然你放不下源码,源码、编译完后大概有150G,而且还有编译,(我设置的200G,其实我很后悔,200G还是少了,最好是300G)。

史上最全面的Ubuntu下Android 下载、编译、运行_第2张图片

 

图 3虚拟机配置

2.3 JDK安装

采用sudo apt-get install openjdk-8-jdk自动安装失败,所以使用手动安装方式。

必须安装OpenJDK而不是JDK,不然后面Android源码编译会出现问题,我吃亏了,哈哈哈~

执行:

1. 添加openjdk8的第三方源

sudo add-apt-repository ppa:openjdk-r/ppa

2. 执行更新

apt-get update

3. 安装openjdk8

sudo apt-get install openjdk-8-jdk

4. 选择版本

sudo update-alternatives –config Java

5. 确认安装成功

java -version

 

图 4 java install

2.4 其余包安装

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip

sudo apt-get install dosfstools e2fsprogs parted

3 安装repo

mkdir -p ~/bin 

PATH=~/bin:$PATH

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

chmod a+x ~/bin/repo   

执行命令curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo时一般会失败。

解决办法:

gedit /etc/hosts

在里面添加源:74.125.237.1      dl-ssl.google.com

史上最全面的Ubuntu下Android 下载、编译、运行_第3张图片

  图 5 添加dl-ssl

如果还是报错就多运行几次该命令:实在下载不下来,其实不下载也可以,因为后面用的是完整的repo project工程。哈哈~~~

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

 

 图 6 curl成功

3.1 初始化repo客户端

mkdir WORKING_DIRECTORY

cd WORKING_DIRECTORY

git config --global user.name "Your Name"

git config --global user.email "[email protected]"

比如:

git config --global user.name "Wang Jin"

git config --global user.email "[email protected]"

3.2 repo init

repo init -u git://github.com/MentorEmbedded/mpsoc-manifest.git -b zynqmp-android_8 -m release_android-8_xilinx-v2019.2.xml

其中参数解释如下:

史上最全面的Ubuntu下Android 下载、编译、运行_第4张图片

 

图 7参数解释

但是在执行上面命令时会报错

 

图 8 repo init

解决办法:

网上很多说添加option,添加清华镜像源,即:

--repo-url=https://gerrit-google.tuna.tsinghua.edu.cn/git-repo但是并没有解决我的问题。

下载完整的repo project解决了我的问题

3.3 repo project完成工程

下载repo project完整工程代码,下载地址:

https://download.csdn.net/download/hongmao6/21044535

将源码拷贝到虚拟机随便路径下解压

 图 9 repo project


执行命令:

cd /你的解压路径,例如我的:

cd /home/mock/Downloads/repo

chmod 777 repo修改权限

3.4 重新执行repo init

用完整的repo project生成的repo执行repo init

/home/mock/Downloads/repo/repo init -u git://github.com/MentorEmbedded/mpsoc-manifest.git -b zynqmp-android_8 -m release_android-8_xilinx-v2019.2.xml

解决问题

史上最全面的Ubuntu下Android 下载、编译、运行_第5张图片

 

图 10 解决问题

执行完成后会在WORKING_DIRECTORY目录下生成一个隐藏文件.repo,执行命令ls -al查看。

史上最全面的Ubuntu下Android 下载、编译、运行_第6张图片

 

图 11生成.repo

.repo文件内容如下:

 

 

图 12 .repo内容

3.5 repo sync

完成repo init后就可以下载源码了:

/home/mock/Downloads/repo/repo sync -c 不要用repo sync,也要用repo的完整工程生成的repo

但是还是出现问题:

史上最全面的Ubuntu下Android 下载、编译、运行_第7张图片

 

图 13 sync –c

解决办法:

网上推荐修改/etc/hosts文件,如下图所示,但是并没有解决我的问题,解决我的问题是修改的xml文件

史上最全面的Ubuntu下Android 下载、编译、运行_第8张图片

 

图 14添加源

解决这个问题的办法:

 

图 15 修改xml文件

gedit .repo/manifests/release_android-8_xilinx-v2019.2.xml

因为我下载的是v2019.2版本,所以修改的这个xml,如果默认你可以修改default.xml文件。

解决办法1:把原来的https://android.googlesource.com换成git://codeaurora.org就可以正常下载了,xml里面只有一处android.googlesource.com替换掉就可以了。

解决办法2(推荐使用,下载速度会快很多):修改文件gedit .repo/manifest.xml,把https://android.googlesource.com改为https://aosp.tuna.tsinghua.edu.cn/使用清华源。

史上最全面的Ubuntu下Android 下载、编译、运行_第9张图片

 

图 16 替换源

史上最全面的Ubuntu下Android 下载、编译、运行_第10张图片

 

图 17修改manifest.xml

4 正常下载

按照3.5 替换下载源,/home/mock/Downloads/repo/repo sync -c 就可以正常下载Android源码了,要下载很久很久很久很久。。。。。。。我用的家里的网络,200M的带宽,下载了大概7个小时。

史上最全面的Ubuntu下Android 下载、编译、运行_第11张图片

 

图 18 开始下载

史上最全面的Ubuntu下Android 下载、编译、运行_第12张图片

 

图 19部分截图

5 下载中出现问题

在下载的中途中,出现了多次问题:

5.1问题1

error: Exited sync due to fetch errors

解决问题:

反复执行:/home/mock/Downloads/repo/repo sync -c

因为repo sync会自动检查哪个文件已经下载,下载过了就不会再次下载了。

史上最全面的Ubuntu下Android 下载、编译、运行_第13张图片

 

图 20 Exited sync due to fetch errors

5.2问题2

curl: (22) The requested URL returned error: 404 Not Found

Server does not provide clone.bundle; ignoring.

不用管这个问题(直接fuck off),在下载的过程中,一直在找源码的server,如果没有就会从源码库里面下载。

史上最全面的Ubuntu下Android 下载、编译、运行_第14张图片

 

图 21 404 Not Found

5.3问题3

     下载过程中出现如下问题:Unable to create '/home/WORKING_DIRECTORY/.repo/projects/tools/external/gradle.git/shallow.lock': File exists.

解决问题:进入该目录删除shallow.lock文件,然后继续执行/home/mock/Downloads/repo/repo sync -c

5.4问题4

出现问题:

Syncing work tree:  99% (596/602)  error: The following untracked working tree files would be overwritten by checkout:

error :  tools/external/gradle/: platform/tools/external/gradle checkout

解决办法:

cd  tools/external/gradle目录;

执行命令:git reset HEAD BUILD依次类推,将所有的问题都删除。

然后继续执行/home/mock/Downloads/repo/repo sync -c就可以了。哈哈~

史上最全面的Ubuntu下Android 下载、编译、运行_第15张图片

 

图 22 sync error

6 下载完成

我尼玛,折腾了2天终于下载完成了,源码大小为:67G,我只下载的Android-8 v2019.2分支,之前在家里下载了Android 6居然有105G。

史上最全面的Ubuntu下Android 下载、编译、运行_第16张图片

 

图 23 下载完成

史上最全面的Ubuntu下Android 下载、编译、运行_第17张图片

 

图 24源码文件.

7 编译:

7.1下载MALI 400(针对GPU)

下载路径:

https://download.csdn.net/download/hongmao6/21097484

7.2 安装MALI 400

将文件拷贝到Android源码的顶层目录,即WORKING_DIRECTORY目录下。

执行命令:mkdir -p tmp_mali && tar -xf mali-400-userspace.tar -C ./tmp_mali && mkdir -p vendor/xilinx/zynqmp/proprietary && cp -r tmp_mali/mail/Android/android-6.0.1/MALI-userspace/r6p2-01rel0/* vendor/xilinx/zynqmp/proprietary/ && rm -rf tmp_mali/

史上最全面的Ubuntu下Android 下载、编译、运行_第18张图片

 

图 25mali 400

7.3 编译Android源码

  1. source build/envsetup.sh
  2. lunch 选择你要编译的平台 我编译:lunch zcu102-eng
  3. make  -j4

7.4 编译出错

7.4.1 错误1

make -j4编译了1个小时后,出现错误:

arm-linux-androideabi-g++: internal compiler error: Killed (program cc1plus)

扩展虚拟机的内存:

关闭虚拟机,点击设置,将虚拟机的内容扩大为8G4G也可以),之前我的内存设置为3G(太小了)。

史上最全面的Ubuntu下Android 下载、编译、运行_第19张图片

 

图 26虚拟机设置

然后重新make -j4

7.4.2 错误2

make -j4时报错:如果正确安装了OpenJDK不会有这个问题,我之前安装成了JDK,而不是OpenJDK。

You are attempting to build with an unsupported JDK.

Only an OpenJDK based JDK is supported.

史上最全面的Ubuntu下Android 下载、编译、运行_第20张图片

 

图 27 JDK

重新安装OpenJDK就可以了:

apt-get upgrade

sudo apt-get install openjdk-8-jdk

然后重新make -j4

7.4.3 错误3(可忽略)

出现错误:ninja: no work to do.(可以忽略这个问题)

解决办法:make clean后重新编译

  1. source build/envsetup.sh
  2. lunch 选择你要编译的平台 我编译:lunch zcu102-eng
  3. make  -j4

7.4.4 错误4

编译过程中出现错误:

 home/WORKING_DIRECTORY/linux-xlnx/scripts/extract-cert.c:21:25: fatal error: openssl/bio.h: No such file or directory

解决办法:是因为没有安装openssl的库

apt-get install libssl-dev

然后重新make -j4

7.4.5 错误5

编译过程中出现错误:

Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log

SSL error when connecting to the Jack server. Try 'jack-diagnose'

SSL error when connecting to the Jack server. Try 'jack-diagnose'

史上最全面的Ubuntu下Android 下载、编译、运行_第21张图片

 

图 28 jack  server  error

解决办法:

gedit /etc/java-8-openjdk/security/java.security

删除:文件jdk.tls.disabledAlgorithms =里面 TLSv1, TLSv1.1变量

删除606行: jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \

删除607行: RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224, \

删除608行: include jdk.disabled.namedCurves

然后重新make -j4

7.4.6 错误6

编译过程中出现问题:

Out of memory error (version 1.3-rc7 'Douarn' (445000 d7be3910514558d6715ce455ce0861ae2f56925a by [email protected])).史上最全面的Ubuntu下Android 下载、编译、运行_第22张图片

 

图 29 out  of  memory  error

解决办法:执行下面3条命令:

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"

./prebuilts/sdk/tools/jack-admin kill-server

./prebuilts/sdk/tools/jack-admin start-server

sudo ufw disable

sudo git config --global http.sslVerify false

然后重新make -j4

再次编译时出现下面打印才说明成功:

Jack server already installed in "/root/.jack-server"

Server is already running

7.4.7 错误7

编译过程中出现问题:

Connection to the Jack server timeout, retrying with debug

* Hostname was NOT found in DNS cache

*   Trying 127.0.0.1...

* Connected to localhost (127.0.0.1) port 8076 (#0)

* successfully set certificate verify locations:

*   CAfile: /root/.jack-server/server.pem

  CApath: /etc/ssl/certs

* SSLv3, TLS handshake, Client hello (1):

} [data not shown]

* Operation timed out after 0 milliseconds with 0 out of 0 bytes received

* Closing connection 0

Building with Jack:...r_intermediates/with-local/classes.dex

ninja: build stopped: subcommand failed.

史上最全面的Ubuntu下Android 下载、编译、运行_第23张图片

 

图 30错误7

解决办法:

  1. sudo ufw disable 关闭防火墙
  2. sudo git config --global http.sslVerify false  关闭ssl校验
  3. 然后重新make -j4

7.4.8 错误8

编译过程中出现问题:

Communication error with Jack server (52). Try 'jack-diagnose'

ninja: build stopped: subcommand failed.

史上最全面的Ubuntu下Android 下载、编译、运行_第24张图片

 

图 31 错误8

解决办法:

gedit prebuilts/sdk/tools/jack-admin

1.找到如下语句:

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"

2.将上述语句修改为:

JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"

3.重新启动jake server

./prebuilts/sdk/tools/jack-admin start-server

7.4.9 错误9

dex2oatd F 08-18 08:27:10 73934 73934 heap.cc:438] Check failed: region_space_mem_map != nullptr No region space mem map

Runtime aborting...

Dumping all threads without appropriate locks held: thread list lock mutator lock

All threads:

DALVIK THREADS (0):

"dex2oatd" prio=5 (not attached)

解决办法:

我怀疑是我的内存空间不够,我就加了一根8G的内存条(之前内存只有8G),将虚拟机内存设置为了8G(之前是4G),重新虚拟机,然后继续make -j4就编译完成了。

这个问题我也不懂,反正就这样解决了。疑惑中。。。。。。

7.5 编译完成

看到这样的输出后,就是编译完成了,前前后后历时12个小时,为啥网上别的人只用了几个小时,难道是我CPU不行,有可能,我CPU是i5 4460太老了(公司的电脑)。

史上最全面的Ubuntu下Android 下载、编译、运行_第25张图片

 

图 32编译成功

史上最全面的Ubuntu下Android 下载、编译、运行_第26张图片

 

图 33 编译生成路径

      

编译完成后,所有生成文件路径为 out/target/product/zcu102该目录下,最重要的是生成的那几个.img文件。

8 运行emulator

编译完成后,如果你没有重新打开Terminal,直接运行emulator命令就可以了,等待一会儿一会儿一会儿。。。。后就会出现Android的手机界面了,真的不容易呀~~~~~。

如果你重新打开了一个Terminal控制终端,那么需要:

  1. source build/envsetup.sh
  2. lunch xxxx 选择你要编译的平台 我编译:lunch zcu102-eng
  3. emulator开启Android界面。

史上最全面的Ubuntu下Android 下载、编译、运行_第27张图片

 

图 34运行成功

 


你可能感兴趣的:(ubuntu,Android,zynq,android)