Ubuntu20.4 Android-9.0.0_r46源码下载编译
Posted 清浅岁月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu20.4 Android-9.0.0_r46源码下载编译相关的知识,希望对你有一定的参考价值。
Ubuntu20.4 android-9.0.0_r46源码下载编译调试
安装Ubuntu虚拟机
ubuntu镜像下载地址: https://ubuntu.com/download
官网下载地址较慢可以去 清华源,中科大源,华为,阿里源直接下载都可以
我是VM虚拟机安装,预留空间300G,4核,8G内存,正常安装虚拟机就行
配置ubuntu虚拟机环境
设置root账户 密码
sudo passwd root
安装vim,方便修改后面文件
sudo apt-get install vim
更换ubuntu更新源
打开ubuntu源文件
sudo vim /etc/apt/sources.list
打开清华源:https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
复制下面的内容到/etc/apt/sources.list这个文件中
注:这个是ubuntu22.04LTS的,根据自己 的ubuntu选择对应版本的
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
把上面的内容放到/etc/apt/sources.list中,把文件已有的内容都给注释调
更新
sudo apt-get update
sudo apt-get upgrade
更新完之后
安装git工具
sudo apt-get install git
看一下版本确定安上了
git --version
配置git,不设置在后面repo下载的时候提让你设置
git config --global user.name "xxxx"
git config --global user.email "xxxx@xxx.com"
安装curl
sudo apt install curl
下载Android源码
根据清华源的说明:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
这个是从google那边的的repo,建议用清华源的
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod a+x ~/bin/repo
更换repo的源,不然使用repo的时候还会去google更新
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
初始化repo,创建存放源码的目录,因为我下载的是android-9.0.0_r46这个版本
mkdir androidsource
cd androidsource
mkdir android-9.0.0_r46
cd android-9.0.0_r46
在androidsource/android-9.0.0_r46 目录下初始化repo
root@xxxx-ubuntu:androidsource/android-9.0.0_r46# repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-9.0.0_r46
会报这个错误:
/usr/bin/env: “python”: 没有那个文件或目录
ubuntu22.04版本已经安装的是python
root@xxxx-ubuntu:/# whereis python3
做一个软链:
root@xxxx-ubuntu:/# sudo ln -s /usr/bin/python3 /usr/bin/python
再到androidsource/android-9.0.0_r46 执行初始化操作就可以
初始化成功后再执行拉取代码就行
清华源建议-j4 ,太慢了,根据自己的核数可以适当调大,不然会很慢很慢的,不建议太大,太大电脑吃不消,会卡死
网速较好的情况下,2小时左右 ,我的是500m宽带,半个小时左右就下载完了,源码大概90g左右
repo sync -j8
开启下载,尽量保持不要断网,关机什么操作,不然容易出现乱七八糟的一些问题,实在不幸出现了在之前的下载目录下再次执行,会继续的,不带-j8,默认是4个线程
repo sync -j8
注:尤其是下载完,checkout阶段尽量不要中断,不然会有各种莫名其妙的问题
最后提示成功:
Checking out: 96% (664/687) platform/prebuilts/maven_repo/google-play-service-client-libraChecking out: 100% (687/687), done in 2m32.129s
repo sync has finished successfully.
代码下载成功
编译Android源码
代码下载完成,checkout成功后,进行源码的编译
注意:
ubuntu 20.04版本中的python版本默认是3.9的,Android9.0的版本必须使用python2.7的版本,
如果不更换前面编译没问题,后面一点会出现python的代码问题,建议早点更换,直接安装,设置默认版本就行
看这个帖子安装就行:https://blog.csdn.net/rasiel_2019/article/details/123654672
在源码 目录下执行
source ./build/envsetup.sh
之后 执行:
lunch
会出现各种版本,选择一个,之后执行make -j8 命令,8是根据自己的内核个决定的
make -j8
之后就等待就行。
我在编译的时候出现下面的错误:
out/soong/.intermediates/frameworks/compile/mclinker/lib/Script/libmcldScript/android_x86_64_core_static/gen/lex/frameworks/compile/mclinker/lib/Script/ScriptScanner.cpp:1487:8: error: member reference type ‘std::istream *’ (aka ‘basic_istream *’) is a pointer; did you mean to use ‘->’?
yyin.rdbuf(std::cin.rdbuf());
out/soong/.intermediates/frameworks/compile/mclinker/lib/Script/libmcldScript/android_x86_64_core_static/gen/lex/frameworks/compile/mclinker/lib/Script/ScriptScanner.cpp:1490:9: error: member reference type ‘std::ostream *’ (aka ‘basic_ostream *’) is a pointer; did you mean to use ‘->’?
yyout.rdbuf(std::cout.rdbuf());
最后查找并非路径过长的原因,是因为自带的flex有问题导致的,重新编译flex就好了
cd prebuilts/misc/linux-x86/flex
rm flex-2.5.39
tar zxf flex-2.5.39.tar.gz
cd flex-2.5.39
./configure
make
mv flex ..
cd ..
rm flex-2.5.39 -rf
mv flex flex-2.5.39
回到根目录继续就行,make -j8 就行会继续编译,已经编译好的文件不再编译,所以未编译的文件数会变少。
我的在编译过程中经常出现ubuntu的终端,编译一段时间就会自定消失了,最后发现应该是虚拟机内存设置的较少,修改虚拟机内存到16G,交换存储较少,以及Java堆栈溢出的情况。
解决方法:
1.修改虚拟机的内存到16g
2.增加交换内存空间,按照下面帖子处理
https://blog.csdn.net/qq_36758914/article/details/107117169
处理完异常继续编译,还是执行 make -j8,意外中断什么的想继续也是再次执行,不带-j8默认是4个线程,较慢。
如果和我一样出现终端莫名其妙消失了什么的,最好关闭虚拟机重新开启释放一下数据再执行。
还有一点就是编译的时候,最好挂到后台进程,把终端输出的内容写到文件中,如果意外终端或者,终端意外关闭,无法查看编译进度,以及原因,使用nohup 命令,不会的同学可以查看了解一些,这个命令很简单。
最后如果编译成功就会出现
[100% 605/605] Create vendor-qemu.img
记录了1+0 的读入
记录了2048+0 的写出
1048576字节(1.0 MB,1.0 MiB)已复制,0.00360856 s,291 MB/s
记录了95+1 的读入
记录了96+0 的写出
100663296字节(101 MB,96 MiB)已复制,0.216267 s,465 MB/s
记录了1048576+0 的读入
记录了1048576+0 的写出
1048576字节(1.0 MB,1.0 MiB)已复制,1.56277 s,671 kB/s
Creating new GPT entries.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
Setting name!
partNum is 0
REALLY setting name!
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
The operation has completed successfully.就算编译成功了
成功之后,因为我这边想看一下framwork相关的代码,而且编译的是一个手机的版本,没有手机就没有刷机,后面有手机把刷机的流程补上。我是想导入AndroidStudio看一下代码,顺便修改framework代码,调试一下。
整体存储:
源代码:90G左右
编译后的产物:80G左右
安装的各个工具:30G左右
我这边总共用了:211G左右,所以虚拟机的存储空间要至少300G左右,我用的是500G的固态硬盘。直接把虚拟机建在硬盘中运行的
编译的时候有的lib无法找到 那应该就是需要安装,直接安装就行了
AndroidStudio 导入源码
已下载,并编译成功后,导入AndroidStudio 需要在根目录下执行:
source ./build/envsetup.sh
mmm development/tools/idegen
生成idegen.jar
执行成功后
./development/tools/idegen/idegen.sh
会在根目录下生成这几个文件
android.iml: 用于描述modules,包括modules路径、依赖关系,顺序设置等,一个项目可以包含多个*.iml文件
android.ipr:保存工程相关的设置,如modules和modules libraries的路径,编译器配置,入口点等
在ubuntu中安装AndroidStudio 在google中文网站上下载安装即可.
下载解压后,在bin木目录下 执行 ./studio.sh即可
之后调整一下AndroidStudio的内存大小即可。
在 setting> System Settings 好像只能选择最大3072MB,选最大就行
之后将android.ipr导入就行。
androidStudio会进行一段时间的处理,代码较多一般电脑是扛不住的。我看有人裁剪了部分依赖导入,大家可以处理一下再倒入,不然太多AndroidStudio一直在scanindex进度中
搭建android源码浏览服务
如果想快速查看粗滤的查看代码的话,建议安装这个
tomact+opengrok
opengrok:是一个web快速索引的,属于web的一个应用,需要部署在web服务器上
tomcat:部署web应用的一个服务器
opengrok 和 tomcat 依赖你已经安装的java环境 ,根据你安装的java环境下载对应的版本,在tomcat的官网查询一下你机器上
已经安装的.
tomcat与java版本查询地址:https://tomcat.apache.org/whichversion.html
一定要和Java Versions版本匹配,不然会有问题
xxxx@xxxx-ubuntu:~$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
xxxxx@xxxx-ubuntu:~$ javac -version
javac 1.8.0_312
我的版本是1.8 所以下载8.5.78的tomcat
还有opengrok 的版本也要和java版本匹配,没找到他们的匹配关系
下载地址:
https://github.com/oracle/opengrok/releases?after=1.3.6&page=14
我这边下载的是1.1-rc41
根据这个博客去安装就行
https://blog.csdn.net/m0_58169865/article/details/119103944
其中设置权限哪里 chmod 不是chomd,小白估计会粘贴复制,小心出错。
以上是关于Ubuntu20.4 Android-9.0.0_r46源码下载编译的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu20.4 Android-9.0.0_r46源码下载编译