AOSP源码编译踩坑实录

admin 2023年2月17日20:58:00评论16 views字数 2335阅读7分47秒阅读模式

AOSP源码编译踩坑实录

前言

最近在研究安卓沙箱,恰好又看到几篇文章和视频,所以尝试基于Android8.1版本,记录一下从源码下载到编译的全过程(踩坑记录)。

环境

操作系统:Ubuntu 16.04
内存:12G
磁盘:300G

配置编译环境

下载platform-tools压缩包并配置系统环境变量。

  1. https://dl.google.com/android/repository/platform-tools_r30.0.5-linux.zip


  2. unzip platform-tools_r30.0.5-linux.zip -d /home/


  3. vim ~/.bashrc


  4. 末尾添加:

  5. export ADB_PATH=/home/platform-tools

  6. export PATH=$PATH:$ADB_PATH


  7. 激活环境:

  8. source ~/.bashrc

安装Git环境

  1. sudo apt-get install git

  2. 初始化Git

  3. git config --global user.email "[email protected]"

  4. git config --global user.name "xxx"

安装repo命令

  1. 没有bin目录就先创建:

  2. mkdir /home/user/bin


  3. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

  4. chmod a+x ~/bin/repo


  5. 配置源

  6. vim  ~/.bashrc


  7. 末尾添加:

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


  9. 激活环境

  10. source  ~/.bashrc

然后开始准备下载源码。

源码下载

注意这里的源码分支应该根据我们的设备情况而选定,详细参考官网:官网

AOSP源码编译踩坑实录

这里我使用的是pixel1,所以对应的分支就是android-8.1.0_r31,在下载源码的过程中,时间太长可能会中途失败,所以我们需要编写down.sh,保持运行:

  1. #!/bin/bash

  2. echo"==========start repo sync==="

  3. repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-8.1.0_r31

  4. repo sync -j4 -d --force-sync --no-clone-bundle

  5. while [ $? = 1 ]; do

  6. echo "======sync failed, re-sync again======"

  7. sleep 3

  8. repo sync -j4 -d --force-sync --no-clone-bundle

  9. done

然后就是运行开始下载,漫长的等待。
下载完后如图:
AOSP源码编译踩坑实录

源码编译及碰到的问题

在源码编译过程中,一定要注意对应Android版本的平台要求,和Android版本所需要的JDK版本,这里编译的是Android8,使用OpenJDK8,系统自带也是,就不用再去下载。
AOSP源码编译踩坑实录然后配置驱动文件,需要下载对应设备的驱动文件,这里我们使用的是Google piexl1,可以去官方网址下载下载地址:
AOSP源码编译踩坑实录下载后,解压将sh文件放到安卓源码目录下。
AOSP源码编译踩坑实录依次运行下载的驱动文件,按Enter键一行行的查看,最后输入 I ACCEPT。
开始准备编译,使用build目录中的envsetup.sh脚本初始化环境。

  1. source build/envsetup.sh

AOSP源码编译踩坑实录输入 lunch,选择与设备对应的编译版本,这里我是pixel1,选sailfish。
AOSP源码编译踩坑实录执行命令开始编译。

  1. make -j4 #看你设置的线程来

AOSP源码编译踩坑实录

报错一

第一个报错,提示SSL error:
AOSP源码编译踩坑实录原因是默认的openjdk 版本是1.8.0_292,默认禁用了TLSv1, TLSv1.1。
解决办法:
把/etc/java-8-openjdk/security/java.security文件中的下面部分:

  1. jdk.tls.disabledAlgorithms=SSLv3,TLSv1, TLSv1.1, RC4, DES, MD5withRSA,

  2. DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,

  3. include jdk.disabled.namedCurves

改为(取消TLSv1, TLSv1.1 禁用):

  1. jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA,

  2. DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL,

  3. include jdk.disabled.namedCurves

然后在sdk/prebuilts/sdk/tools/ 目录下执行:

  1. ./jack-admin kill-server && ./jack-admin start-server

报错二

第二个报错,提示Out of memory error,这个没办法,加内存增加swap分区。
AOSP源码编译踩坑实录

报错三

第三个报错,提示conection to the jack server time out。
防火墙的问题,执行命令:

  1. sudo ufw disable 关闭防火墙


  2. sudo git config --global http.sslVerify false 关闭ssl校验

编译成功

终于没有报错了,然后就是漫长的等待,编译成功。

AOSP源码编译踩坑实录

生成的编译结果在out/target/product/sailfish下。

AOSP源码编译踩坑实录

刷入设备

从官网下载刷机包。
要做的是替换掉image zip中的文件,在编译结果目录中找到,替换(最好不要解压再压缩,直接替换)。

AOSP源码编译踩坑实录

运行脚本刷机。

AOSP源码编译踩坑实录最后效果:

AOSP源码编译踩坑实录





原文始发于微信公众号(gakki的童养夫):AOSP源码编译踩坑实录

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月17日20:58:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  AOSP源码编译踩坑实录 http://cn-sec.com/archives/1557130.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: