一个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
安装javaubuntu 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
我试了编译Android7.1.2的系统,必须要python2,kali是自带的python2
Ubuntu18只需要输入python或者python2就会有提示,然后根据提示apt install即可
因为conda虚拟环境会导致访问的Python变成anaconda的python,只需要删除~/.bashrc里关于conda init的代码重新打开一个终端即可。编译完了,在执行一遍conda init bash, 又是原来的conda环境
启动TLSv1, TLSv1.1https://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
apt install 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 init和repo 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-user、aosp_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
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安装这个压缩包的时候会报错)。



