AOSP(一)Ubuntu20.10编译AOSP

Ubuntu20.10 双系统安装

1、windows系统分出一个200G的磁盘空间
2、制作Ubuntu启动盘
3、安装Ubuntu双系统,可以与Windows共存,也可以自己分配分区。
在这里插入图片描述

4、更改ubuntu系统软件来源:阿里镜像 https://mirrors.aliyun.com/ubuntu/

AOSP编译

一、准备工作:

jdk环境:

sudo apt-get update
sudo apt-get install openjdk-8-jdk

下载 git

sudo apt-get upgrade
sudo apt-get install git

设置 git 账户

git config --global user.email "xxxxxxx@gmail.com"
git config --global user.name "xxxxx"

下载python

sudo apt-get install python

配置PATH环境变量

mkdir ~/bin
echo "PATH=~/bin:\$PATH" >> ~/.bashrc
source ~/.bashrc

安装 curl 库,并设置权限

sudo apt-get install curl
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo

在这里插入图片描述

二、编译:

1、准备
2、配置repo工具下载及安装

	通过执行以下命令实现repo工具的下载和安装
	mkdir ~/bin
	PATH=~/bin:$PATH
	curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
	chmod a+x ~/bin/repo

3、下载 AOSP 源码:
科大源 https://lug.ustc.edu.cn/wiki/mirrors/help/aosp

下载https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,
下载完成后记得根据 checksum.txt 的内容校验一下,
由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,
下载后解压 再 repo sync 一遍即可得到完整的目录。

tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
或 repo sync -l  (lmn的l)仅checkout代码

在这里插入图片描述

三、安装依赖库

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g+±multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g+±multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev

这时可能无法安装libesd0-dev

sudo vim /etc/apt/sources.list

在最后添加:

deb http://kr.archive.ubuntu.com/ubuntu/ xenial main universe
deb-src http://kr.archive.ubuntu.com/ubuntu/ xenial main universe


sudo apt update

再次安装

sudo apt install libesd0-dev

四、开始编译

source build/envsetup.sh

lunch 21
time make -j1
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

五、启动emulator

编译完成后,先进入代码目录,执行如下

source build/envsetup.sh
lunch aosp_x86_64 #也就是我们上面编译的项目
emulator

在这里插入图片描述在这里插入图片描述

六、编译error

[error 01] java.lang.OutOfMemoryError

export _JAVA_OPTIONS="-Xmx8g"  #增加heap到8G

附:Ubuntu 16.04无损分区大小调整工具Gparted

https://www.cnblogs.com/pengmn/p/10993382.html
在这里插入图片描述

[error 02] AttributeError: ‘str’ object has no attribute ‘decode’

参考:https://blog.csdn.net/qq_41185868/article/details/82079079

解决问题

AttributeError: ‘str’ object has no attribute ‘decode’

解决思路

根据问题提示,意思是,属性错误:“str”对象没有属性“decode”
python3.5和Python2.7在套接字返回值解码上的区别
python在bytes和str两种类型转换,所需要的函数依次是encode(),decode()

解决方法

直接去掉decode(‘utf8’)

tips:str通过encode()方法可以编码为指定的bytes。反过来,当从网络或磁盘上读取了字节流,那么读到的数据就是bytes。要把bytes变为str,就需要用decode()方法。反之,则使用encode()方法即可!

大功告成!

在这里插入图片描述

七、参考

自己动手编译Android源码(超详细) :https://www.jianshu.com/p/367f0886e62b
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/
https://www.cnblogs.com/zh2314372037/p/10572090.html
https://www.cnblogs.com/xiaoshiwang/p/13266655.html
https://blog.csdn.net/qq_41185868/article/details/82079079

八、附加

8.1 附加Ununtu相关

1、快捷键terminal: ctrl+alt+t

2、快捷键桌面: ctrl+alt+d

3、压缩:
单个文件压缩打包 tar czvf my.tar file1

多个文件压缩打包 tar czvf my.tar file1 file2,…

单个目录压缩打包 tar czvf my.tar dir1

多个目录压缩打包 tar czvf my.tar dir1 dir2

解包至当前目录:tar xzvf my.tar

解压到指定目录:tar xf csdn.tar -C /home/quantum6/work

典型的如在Ubuntu 12.04里安装了gcc-4.6和gcc-4.8,想让gcc命令自动使用4.8版。
安装g+±4.8后,将其设置为默认。gcc同理

首先要让系统知道我们安装了多个版本的g++
命令最后的 20和50是优先级,如果使用auto选择模式,系统将默认使用优先级高的
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50

使用交互方式的命令选择默认使用的版本

sudo update-alternatives --config g++

其他命令:
查询系统中安装有哪些版本

sudo update-alternatives --query g++

1、设置桌面图标步骤
创建xxx.desktop文件
文件内容为:

[Desktop Entry]
Name=android-studio
Exec=sh /home/dingqb/tools/android-studio/bin/studio.sh
Icon=/home/dingqb/tools/android-studio/bin/studio.png
Type=Application
StartupNotify=true

1-2 eclise 配置 xxx.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/home/dingqb/tools/eclipse/eclipse
Icon=/home/dingqb/tools/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true

2、安装搜狗输入法
官网下载deb文件,双击安装
3、ctrl +h查看隐藏文件

8.2 附加AOSP编译相关

1、https://source.android.google.cn/setup/build/downloading

2、同步安卓源码时Checkout出现错误,如何解决?

首先看一下(repo status)本地是否有改动
有改动先放弃改动

(repo forall -vc "git reset --hard")

再同步就行

(repo sync) ,

如果想快点可以加几个参数

repo sync -f -j8

repo sync -l (仅仅checkout 代码不更新)

4、准备:

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev

A:error while loading
shared libraries: libncurses.so.5
Q:sudo apt-get install libncurses5:i386
A:解决ubuntu编译aosp报错问题:error while loading shared libraries: libncurses.so.5
Q:sudo apt install libncurses5s

编译步骤:

source build/envsetup.sh
lunch #选择编译的目标版本
make -j1

编译失败:

AOSP中make clean与make clobber的区别

1、make clean

它会删除本次设置所生成的所有的output与中间文件。
等价于指令:rm -rf O U T 这 里 的 OUT 这里的 OUTOUT指的是out/target/product/[product_name]

2、make clobber

它会删除所有设置所生成的所有的output与中间文件。
等价于指令:rm -rf out/

可以看到,make clobber的严格在于它把整个out目录都删除了。
使用 make clobber 之前先

source build/envsetup.sh
make clobber

编译失败:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

oracle 账号:

http://bugmenot.com/view/oracle.com

https://mirrors.huaweicloud.com/java/jdk/

1、下载jdk
将下载的包放到 /usr/lib/jvm 目录中

解压 jdk 包:

tar -zxvf jdk-8u261-linux-x64-2.tar.gz

2、设置jdk系统环境

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_201/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_201/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_201/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_201/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_201/bin/javap 300

3 、切换jdk

sudo update-alternatives --config java

4、切换python

linux下自由切换默然编译选择python2还是python3的方法
使用 alternate 机制可以自由切换python默认版本,只需要在终端输入简单的几个指令:

sudo update-alternatives –install /usr/bin/python python /usr/bin/python2 100(install前面是2个-)
sudo update-alternatives –install /usr/bin/python python /usr/bin/python3 150(install前面是2个-)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值