Ubuntu16.0.4下载AOSP源码并编译

Ubuntu16.0.4下载AOSP源码并编译

JDK安装

sudo apt-get install openjdk-8-jdk
安装完成之后查看是否成功
java -version

源码下载

源码下载参考清华大学镜像网站
下载repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo  > ~/bin/repo
chmod a+x ~/bin/repo

更新
repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

并重启终端模拟器。
初始化源码
使用repo下载源码使用的是python3 16.0.4默认是python2 需要切换一下
切换python版本
我们可以使用 update-alternatives 来为整个系统更改Python 版本。以 root 身份登录,首先罗列出所有可用的python 替代版本信息:
如果出现以上所示的错误信息,则表示 Python 的替代版本尚未被update-alternatives 命令识别。想解决这个问题,我们需要更新一下替代列表,将python2.7 和 python3.4 放入其中。
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
#update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
#update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
#update-alternatives: using /usr/bin/python3.5 to provide /usr/bin/python (python) in auto mode
–install 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先 级的选项就会被选中。这个例子中,我们为/usr/bin/python3.4 设置的优先级为2,所以update-alternatives 命 令会自动将它设置为默认 Python 版本。
python --version Python 3.5.2
接下来,我们再次列出可用的 Python 替代版本。

update-alternatives --list python /usr/bin/python2.7 /usr/bin/python3.5

现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。

update-alternatives --config python

根据显示的列表中 选择1或者2选择版本即可
开始拉代码

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest 

上述命令是拉去master分支的代码 如果想拉去某个特定的tag的代码 上述命令后面加上-b 和对应的版本就行
对应的版本在此查看
https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds
初始化完成后 同步代码 该过程根据电脑性能和网速时间有差距
repo sync
初始化完成后如果还想切换分支
.repo/manifests$ git branch
在此处切换分支 重新同步即可
代码同步完成后开始编译
注意 编译AOSP源码有设备要求 磁盘建议600G 内存建议32G 最低要求16G
而且需要添加swap交换空间 否则会编译报错
添加swap交换空间
1.首先查看当前内存大小
free -m
2.创建swap文件
建议在当前用户目录下先创建个swapfile

mkdir /home/roo/swapfile

cd  swapfile

sudo dd if=/dev/zero of=swap bs=1G count=32

上述是创建了一个32G的交换空间
2.2 转换swap文件
sudo mkswap -f swap
2.3 激活swap文件
sudo swapon swap
2.4 卸载swap文件【不适用的话卸载即可 现在是创建 不需要这一步】
sudo swapoff swap
2.5 永久生效
上述命令设置成功后 在重启之后就失效了 我们需要在/etc/fstab下加入如下命令
/home/libin/swapfile/swap none swap defaults 0 0
开始编译
. build/envsetup.sh
lunch 选择你要编译的版本 目前我们使用模拟器 且是安卓13
选择 lunch sdk_phone_x86_64 【必须选这个 不然会缺少文件无法启动模拟器】
make -jn 根据你电脑的内核数填写 不写也可以 建议-j2 虽然慢一点 但是不容易报错
之后大概五六小时就会编译成功
emulator 启动模拟器
将源码导入Android studio
第一步 下载Android studio
在Linux下下载 首先进入官网 下载对应的工具
然后解压
tar -xzf android-studio-*.tar.gz
解压完成之后进入bin目录
使用 ./studio.sh 启动
启动之后会发现Android studio图标没在桌面自动生成
此时 只需要在启动的AS里面 tools下面选择 创建快捷方式即可
第二步 将AOSP源码导入AS
首先需要代码全编一次 上面已经完成了 之后执行下面的命令

source build/envsetup.sh
make idegen
development/tools/idegen/idegen.

为了导入加载更快 我们需要修改下iml文件

android.ipr:一般保存了工程相关的设置,比如 modules 和 modules libraries 的路径,编译器配置,入口点等。

android.iml:用来描述modules。它包括modules路径、 依赖关系,顺序设置等。一个项目可以包含多个 *.iml 文件。

这些是不需要加载的 全部复制进去就行

<excludeFolder url="file://$MODULE_DIR$/./external/emma"/>
<excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/>
<excludeFolder url="file://$MODULE_DIR$/out/eclipse"/>
<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/external/bluetooth"/>
<excludeFolder url="file://$MODULE_DIR$/external/chromium"/>
<excludeFolder url="file://$MODULE_DIR$/external/icu4c"/>
<excludeFolder url="file://$MODULE_DIR$/external/webkit"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/host"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/docs"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates"/>
<excludeFolder url="file://$MODULE_DIR$/out/target/product"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilt"/>
<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/build"/>
<excludeFolder url="file://$MODULE_DIR$/cts"/>
<excludeFolder url="file://$MODULE_DIR$/dalvik"/>
<excludeFolder url="file://$MODULE_DIR$/developers"/>
<excludeFolder url="file://$MODULE_DIR$/development"/>
<excludeFolder url="file://$MODULE_DIR$/device"/>
<excludeFolder url="file://$MODULE_DIR$/docs"/>
<excludeFolder url="file://$MODULE_DIR$/external"/>
<excludeFolder url="file://$MODULE_DIR$/hardware"/>
<excludeFolder url="file://$MODULE_DIR$/kernel"/>
<excludeFolder url="file://$MODULE_DIR$/libcore"/>
<excludeFolder url="file://$MODULE_DIR$/libnativehelper"/>
<excludeFolder url="file://$MODULE_DIR$/ndk"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/platform_testing"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/rc_projects"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/trusty"/>
<excludeFolder url="file://$MODULE_DIR$/u-boot"/>
<excludeFolder url="file://$MODULE_DIR$/vendor"/>
<excludeFolder url="file://$MODULE_DIR$/toolchain"/>
<excludeFolder url="file://$MODULE_DIR$/rkbin"/>
<excludeFolder url="file://$MODULE_DIR$/RKDocs"/>
<excludeFolder url="file://$MODULE_DIR$/rkst"/>
<excludeFolder url="file://$MODULE_DIR$/RKTools"/>
<excludeFolder url="file://$MODULE_DIR$/rockdev"/>
<excludeFolder url="file://$MODULE_DIR$/test"/>

删除所有<orderEntry type="module-library"></orderEntry>项。这些项是引用的源码中编译出来的jar包,如果保留,在浏览过程中查看类型跳转到这些jar中的class文件,而不是源码java文件。删除后,则可以直接跳转到源码文件。
比如下列的这些

<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$MODULE_DIR$/./AMSS/lagvm/LINUX/android/out/target/product/prodname/system/framework/locksettings.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>
<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$MODULE_DIR$/./AMSS/lagvm/LINUX/android/out/target/product/prodname/system/framework/framework.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>

然后就可以导入到AS了 此时注意修改下AS的menory
设置下搜索 Memory Settings即可 修改IDE max heap size为最大即可
然后等待导入就行
Ubuntu下安装ADB
sudo apt-get install android-tools-adb
这一步可能会报错 如果报错 进行如下修改
报错内容:
dpkg: error processing /var/cache/apt/archives/xinetd_1%3a2.3.15.3-1_amd64.deb (–unpack):
subprocess dpkg-deb --control returned error exit status 2
Errors were encountered while processing:
/var/cache/apt/archives/xinetd_1%3a2.3.15.3-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
1.sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #备份
2.sudo vim /etc/apt/sources.list #修改


deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

保存后更新sudo apt-get update #更新列表
然后使用adb devices查看当前设备 查看ADB是否安装成功
补充 在VmWare启动虚拟机Ubuntu时遇到的错误
报错:

Linux - Assuming drive cache:write througu /dev/sda1 contains a file system with errors,check forced

解决办法:
查询本机支持的文件系统扫描工具:fsck -C fd -N /dev/sda1,界面输出相应信息
输入命令:fsck.ext4-C0 /dev/sda1 这个是根据上一步的结果 一般都是这个
对于扫描文件系统的一些操作询问,出现很多次yes/no 的提示,一直输入y就可以了。
最后出现 FILE SYSTEM WAS MODIFIED 的提示,此时输入 reboot 重启系统就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值