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,小白估计会粘贴复制,小心出错。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值