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 multiversedeb 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 multiversedeb 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 multiversedeb 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 androidsourcecd androidsourcemkdir android-9.0.0_r46cd 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/flexrm flex-2.5.39tar zxf flex-2.5.39.tar.gzcd flex-2.5.39./configuremakemv flex  ..cd ..rm flex-2.5.39 -rfmv 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.shmmm 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源码下载编译相关推荐

  1. Android FrameWork学习(一)Android 7 0系统源码下载 编译

    最近计划着研究下 Android 7.0 的系统源码,之前也没做过什么记录,这次正好将学习的内容记录下来,方便以后复习巩固. 既然要学习我们的系统源码,那我们第一步要做的就是下载源码并进行编译了. # ...

  2. Android FrameWork学习(一)Android 7.0系统源码下载\编译

    重点内容 转载. http://blog.csdn.net/cjpx00008/article/details/60474883 硬件环境要求 1. 编译环境 按照官方的说法,编译Android 2. ...

  3. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

  4. android 4.0模拟器启动不了,Android 4.0 framework源码修改编译,模拟器运行不起来,求助...

    当前位置:编程学习 > wap >> Android 4.0 framework源码修改编译,模拟器运行不起来,求助 我下载编译了android 4.0 ICS的源码,然后能利用编译 ...

  5. Android AOSP和Android-X86源码下载编译终极普法

        Android AOSP和Android-X86源码下载编译终极普法 引言   最近有朋友在询问怎么下载Android AOSP源码和Android-X86源码,编译学习!其实这个说简单也简单 ...

  6. android 4.0(ICS)源码下载方法

    本方法是基于ubuntu 10.04从android官网下载ICE源码,确保电脑可以正常连接网络,通过apt-get install curl git-core工具,在普通用户权限下,执行以下的命令可 ...

  7. Android 8.0系统源码分析--开篇

    个人分类: Android框架总结Android源码解析android framework 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat ...

  8. 【转】Ubuntu 14.04.3上配置并成功编译Android 6.0 r1源码

    http://www.linuxidc.com/Linux/2016-01/127292.htm 终于成功把Android 6.0 r1源码的源码编译.先上图,这是在Ubuntu中运行的Android ...

  9. android 系统源码调试 局部变量值_如何方便快速的整编Android 9.0系统源码?

    点击上方"刘望舒",选择"星标" 多点在看,就是真爱! 作者 :  刘望舒  |  来源 :刘望舒的博客地址:http://liuwangshu.cn/fram ...

最新文章

  1. pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值、滚动中位数、滚动最大最小值、滚动加和等
  2. ​京东AI研究院获QuAC机器阅读理解竞赛冠军,EL-QA模型能力业界领先
  3. 免费Opengrok-代码阅读工具:Kernel,Optee,ATF,Uboot...
  4. Spring Boot @EnableAutoConfiguration和 @Configuration的区别
  5. 逍遥自动秒收录导航网源码绿色版+全站SEO优化
  6. 拓端tecdat|R语言分布滞后非线性模型(DLNM)空气污染研究温度对死亡率影响建模应用
  7. 判断一个整数是否为2的方幂
  8. 笔记本安装黑苹果MacOS BigSur记录
  9. c#将byte转为int_C# int转byte[],byte[]转int
  10. 一个霸占程序员休息时间的 APP
  11. Libevent教程001: 简介与配置
  12. 高考十年后,我成为一名高级研发工程师
  13. 将阿拉伯数字转换成罗马数字 Integer to Roman
  14. Hugging Face(1)——Transformer Models
  15. mysql怎么创建库和创建表?
  16. 中国软件与IT外包产业以印度为镜
  17. 【Web前端HTML5CSS3】——CSS语法与选择器(超级全面)
  18. 凉凉!深扒那个有点“咪蒙”的阿里美女高管!
  19. html中加艺术字体,CSS实现漂亮的大标题文字效果
  20. 为什么 Spring 仍然会是云原生时代最佳平台之一?

热门文章

  1. 【简单项目实战】用C++实现学生成绩管理系统 | [普通实现]
  2. c:forEach中的 varStatus
  3. robotframework-ride生成新建机器人标志的快捷方式
  4. [DDCTF2018]流量分析(TLS)
  5. CU看到的一个好贴,收过来(未作任何改动)原作者:skipjack
  6. 我与上帝的三次对话!
  7. java不可以修改的修饰语,在Java程序中,用关键字_修饰的常量对象创建后就不能再修改了。...
  8. 宋婷科幻作品连载 | 算力:幻想几何学(二)
  9. 怎样做一个优秀的(懒惰的)系统管理员
  10. 下载Word文档的四种方法