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 这里的
OUT这里的OUT指的是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个-)