AOSP

环境准备

一个kali虚拟机,具体安装请看:https://blog.csdn.net/Qwertyuiop2016/article/details/118440538

也可以选择Ubuntu,用起来差不多,因为kali里内置的工具我一个也没用过。下面是我给虚拟机的配置情况。特别注意图中红框的部分,不能勾选(如果勾选,编译的时候会卡死)。

另外,我安装kali时,给的空间是240G,aosp的源码就190G,加上其他一些编译的文件,至少要300G的空间吧。所以我添加了一块500G的硬盘(步骤就不描述了,点击下面的添加一直下一步改个空间确定就行),这样添加的硬盘其实就是一些vmdk文件,你甚至可以在另一个虚拟机加载这个硬盘。当你不需要时,直接移除硬盘即可。最好是选择单个文件,这样目录清晰一些,而且其他的虚拟机加载也方便,相当于是个移动硬盘了。

添加完成之后打开虚拟机搜索GParted,就可以看到硬盘了。点击上面的设备->创建分区表,接着格式化一下硬盘,使用mount命令挂载即可。比如我的500G硬盘上面显示的是/dev/sda1,挂载硬盘命令:
mkdir /root/sda1
mount /dev/sda1 /root/sda1

安装依赖

https://source.android.google.cn/setup/build/initializing?hl=zh-cn

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

安装java

ubuntu apt install openjdk-8-jdk
kali
http://security.debian.org/debian-security/pool/updates/main/o/openjdk-8/
从上面的链接下载四个文件到某个空文件夹:
openjdk-8-jdk-headless_8u302-b08-1~deb9u1_amd64.deb
openjdk-8-jdk_8u302-b08-1~deb9u1_amd64.deb
openjdk-8-jre-headless_8u302-b08-1~deb9u1_amd64.deb
openjdk-8-jre_8u302-b08-1~deb9u1_amd64.deb
当前文件夹下执行dpkg -i *.deb就安装成功了

切换java为java1.8
update-alternatives --config java
update-alternatives --config javac

python

我试了编译Android7.1.2的系统,必须要python2,kali是自带的python2

Ubuntu18只需要输入python或者python2就会有提示,然后根据提示apt install即可

因为conda虚拟环境会导致访问的Python变成anaconda的python,只需要删除~/.bashrc里关于conda init的代码重新打开一个终端即可。编译完了,在执行一遍conda init bash, 又是原来的conda环境

启动TLSv1, TLSv1.1

https://segmentfault.com/a/1190000039970343

按照文章中的步骤去掉TLSv1, TLSv1.1

这是为了解决下面的这个错误

Jack server failed to (re)start, try 'jack-diagnose' or see Jack server log
SSL error when connecting to the Jack server. Try 'jack-diagnose'
SSL error when connecting to the Jack server. Try 'jack-diagnose'

安装repo

先安装repo
sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/local/bin/repo
chmod +x /usr/local/bin/repo

配置git
git config --global user.email "你的邮箱"
git config --global user.name "你的用户名"

设置repo的同步源(改命令仅在当前终端有效,也可以加入~/.bashrc)
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

repo查看帮助信息: repo help,查看某个命令的帮助信息: repo help sync。不过这两个命令需要先执行repo init。

下载源码

https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

下载源码有两种方法(#后面为注释,复制命令时请勿带上):
第一种(下载压缩包)

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar # 解压tar包
cd AOSP                # AOSP为解压的tar的文件夹,进入到这个文件夹
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r8
repo sync -l -c              # 同步, -l表示只从本地.repo文件夹内同步,不访问网络。 -c表示当前分支

第二种(直接同步整颗树)

mkdir WORKING_DIRECTORY # WORKING_DIRECTORY只是个文件夹的名称,随意指定
cd WORKING_DIRECTORY
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r8
repo sync

两种方法都会得到一个.repo的文件夹,这是全部的安卓源码。结合上面的命令, 是不是可以只下载某个分支的源码,比如下面的命令
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r8
repo sync -c

不太清楚是不是可以,按常理来说可以,因为我只编译某个系统确要下载整个源码,这不合理。

分支列表请看:https://source.android.google.cn/setup/start/build-numbers?hl=zh-cn

.repo文件夹,其他均可以随意删除,比如你可以直接rm ./*,这会把所有的非隐藏文件删除掉,即只保留.repo。下次想在编译只需要再次运行repo initrepo sync -l又可以得到某个分支的源码了。

开始编译

https://source.android.google.cn/setup/build/building

export LC_ALL=C # 这个的解释看百度吧
source build/envsetup.sh
lunch # 选择一个设备,输入序号即可。

各个版本的解释

aosp 意味着一个全功能的Android。有时也称为通用系统映像。
mini 意味着精简的Android。
emulator 意味着这个 Android 是要在qemu-emulator 中运行的。
x86 arm   Android运行的CPU架构
user 正常的发行版Android
eng 带有附加调试工具的开发配置
userdebug 具有 root 访问权限和调试功能

并不是只有它列出来的才能使用,你可以自己拼接:aosp_sailfish-useraosp_sailfish-eng等。

使用lunch aosp_sailfish-user即可编译指定的版本。我第一次编译的是aosp_x86_64-eng,因为我想在电脑上运行这个编译的镜像

m -j8 # 开始编译,-j后面的8是指线程数,即使你不指定-j,它仍然以它认为最合适的线程数编译,不会是单线程的

m和make:https://blog.csdn.net/luoshengyang/article/details/19023609


我八线程编译用了一个小时15分钟,速度还行

启动模拟器

要想在电脑上运行你编译的aosp镜像,最好选择x86的,如果是arm的,你可能一个小时都等不来它启动成功。

编译完直接在当前终端执行emulator就可以启动了。不过在vmware中启动模拟器需要vt-x的支持,要先关机在勾选上面的第一张图的那个Vt-x的勾在开机。但是关机后当前终端的环境变量又没了。所以需要重新执行:
source build/envsetup.sh
lunch aosp_x86_64-eng # 你编译选择的哪个,这里就要选哪个,不然找不到镜像文件
emulator

驱动

如果需要在真机中运行,还需要下载驱动文件

下载地址:https://developers.google.com/android/drivers

需要下载和源码设备匹配的版本,比如源码是android-8.1.0_r1,则应下载OPM1.171019.011版本的驱动,在根据设备来选,比如pixel,就选择Pixel binaries for Android 8.1.0 (OPM1.171019.011)

源码分支和驱动版本的对应关系看:

https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

下载完成后解压到源码的目录,执行一遍压缩包里的sh脚本即可。脚本实际上是将文件解压到vendor目录下。如果你下载错了,直接删除这个目录的文件重新下载执行一遍即可

刷入手机

编译完之后会在out/target/product/sailfish/生成一些镜像文件,刷机步骤如下:

cd out/target/product/sailfish/ # 其实我试了不在这个目录也能刷,只要设置了ANDROID_PRODUCT_OUT指向这个目录就行。为了避免不必要的错误还是谨慎点好

export ANDROID_PRODUCT_OUT=$(pwd)

fastboot flashall -w # 将目录镜像刷入手机

其实刷机真正用到的是那些文件,目录用不上。如果要保存的话只需要保存文件就可以了。下次刷机设置ANDROID_PRODUCT_OUT,然后刷就行。

至于手机进入fastboot这些基本操作就不多说了

xposed

http://www.manongjc.com/detail/11-xslsxmzofjxcljo.html

几乎都是按照上面这篇博客来操作的

需要注意的地方:

编译XposedBridge和XposedInstall时,要使用java8来编译,不能用自带的java11,不然会报下面这个错误,

更换JDK版本:在File->Setting->Build,Execution…->Build Tools->Gradle,右侧的Gradle JDK就可以改jdk的版本

另外,编译XposedTools时需要先编译对应的系统。比如你想编译./build.pl -t arm64:25,就需要先编译aosp安卓7.1arm64架构的系统,我编译的是aosp_angler-userdebug,然后build.conf填这个编译的源码路径

如果没有编译系统就编译xposed的话也会报错,如果只编译了x86的系统,然后编译arm的xposed不会报错,但是编译出来的压缩包刷不到手机(XposedInstaller安装这个压缩包的时候会报错)。

编译xposedTools只是需要aosp的源码而已,编译完成的所有文件(xposed的zip刷机包,XposedInstaller等)是可以在任何机器上运行的。另外,运行的手机或者模拟器需要对应你编译的sdk版本和CPU架构。我测试了在手机和逍遥模拟器都可以直接刷入我自己编译的zip包

kali编译aosp和xposed相关推荐

  1. kali系统AOSP源码编译

    kali系统AOSP源码编译 文章目录 kali系统AOSP源码编译 前言 一.编译准备 1.修改`zsh`为bash 2.安装`openjdk-8-jdk` 3.修改默认Python版本 4.添加环 ...

  2. Ubuntu18 编译 AOSP 步骤

    什么是AOSP AOSP是"Android Open Source Project"的缩写,即"Android开放源代码项目",由谷歌发起,此项目致力于Andr ...

  3. open ssl android编译,aosp 编译过程中Jack server SSL error 错误解决方法

    编译aosp 大概率会出现jack server 跑不起来然后抛一个类似这样的错误[ 10% 538/4980] Ensuring Jack server is installed and start ...

  4. Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27

    文章目录 一. 前言 二.系列文章 三. 服务器配置 3.1 Repo 工具配置 3.2 AOSP 依赖配置 四. 下载源码 4.1 下载 aosp tar ball 4.2 同步代码 4.3 切分支 ...

  5. MAC下编译AOSP问题:Undefined symbols for architecture i386

    MAC编译AOSP遇到SDK版本编译问题 ld: warning: ignoring file /Library/Developer/CommandLineTools/SDKs/MacOSX10.14 ...

  6. kali linux 内核,关于kali编译安装内核和多内核保留的问题求解答。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 没动静啊,难道沉了么?一说这内核啊有人说和那个boot文件夹里的有关,我没事闲将live启动的kali1.0.5的boot文件夹中的文件弄了出来放到了实体 ...

  7. Android系统编译aosp

    Android系统编译 公号文字版本:https://mp.weixin.qq.com/s/y6ReUNd3EDUctNVO_x3ZwQ 博客文字版本:http://liuwangshu.cn/bat ...

  8. Ubuntu 20.04编译AOSP 并启动模拟器

    平台 CPU: Intel® Core™ i7-8700 CPU @ 3.20GHz DDR: 24GB 硬盘: SSD 1TB 系统: Ubuntu 20.04 x64 概述 疫情期间居家办公, 为 ...

  9. lineageOS编译aosp源码并刷入小米Mix2S

    本篇文章教大家修改Android系统源码并刷入到自己的国产手机,这对于手上没有pixel手机的小伙伴来说是个好消息,本文以mix2 为例,其他手机基本可以才考这篇文章的思路去做,定制属于自己的操作系统 ...

最新文章

  1. mysql数据库优化(二)
  2. 在Eclipse中打开Hadoop工程
  3. 【机器学习PAI实践三】雾霾成因分析
  4. 【AI白身境】学深度学习你不得不知的爬虫基础
  5. python numpy np.finfo()函数 eps
  6. 【Java正则表达式】正则基本语法、使用方式(分组、替换、分割)、简单爬虫基础
  7. 关于 SAP 电商云 Spartacus UI package.json 中的 sass 依赖
  8. SAP CRM BSPWDApplication.do
  9. gRPC in ASP.NET Core 3.x - gRPC 简介(1)
  10. C语言 ,嵌入式 ,c++,数据结构 面试题目(4)
  11. Qt样例学习1(数字时钟)
  12. CacheManager操作缓存
  13. linux 不换行显示数据库,linux下怎么在不按回车情况下就能读取字符读取到字符不回显...
  14. python贡献度分析以及相关性分析小例子
  15. 赫兹的单位换算_赫兹的换算(赫兹单位的换算怎么换)
  16. prisma 连接不上Postgres
  17. ​机器如何“猜你喜欢”?深度学习模型在1688的应用实践...
  18. 如何使用chatGPT生成小红书种草文案
  19. vss服务器的简单使用
  20. dhcp服务器设置(路由器dhcp服务器怎么设置)

热门文章

  1. 怎么用计算机编写文件,怎样在电脑上写作文做文件
  2. 完整且详细的单链表代码
  3. QT的QList排序
  4. 虚实交融的元宇宙图景中社会科学的跃升
  5. python网球比赛模拟_python初体验 —— 模拟体育竞技
  6. 对比不同子载波数量下的OFDM和FBMC频谱matlab仿真
  7. 笔记本电脑外放没声音,或外放有声音/插耳机没声音———Realtek High Definition Audio Driver安装
  8. Linux_MySQL数据库基础
  9. 数字阅读市场陷入两强之争 掌阅能不能守住半壁江山?
  10. AppInfoUtil 获取App应用程序信息工具类