前言
感谢看雪,简书,CSDN等各个平台上的前辈的编译教程,感谢Google让android编译越来越简单,以前编译基本各种问题,现在直接一步到底,超级流畅
配置环境
- ubuntu20.04-server(已切换清华镜像)
- 4 core
- 8G RAM
- 2T disk
- 物理主机
- 必备代理,速度够快,70Mb/s左右
- Pixel 2 XL 手机一部
- 配置proxychains
选择分支
这里我选择android-8.0.0_r21,因为这是支持Pixel 2 XL的初始分支,Youpk使用的是android-7.1.2_r33,我这里主要为了移植Youpk到Pixel 2 XL上,所以选择了一个最接近该分支而又支持Pixel 2 XL机型的android-8.0.0_r21分支
注意:分支需要与设备型号匹配,并不是一个机型就可以通刷所有分支的,具体匹配列表参看:Here
下载源码
sudo apt-get update
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python
mkdir ~/bin
export PATH=~/bin:$PATH
proxychains curl https://storage.googleapis.com/git-repo-downloads/repo -o ~/bin/repo
chmod a+x ~/bin/repo
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name Your Name
git config --global user.email you@example.com
proxychains repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r21
proxychains repo sync -c -j8
android-8.0.0_r21 大约需要54G流量
导入设备驱动(可选,刷入真实设备需要)
- 下载Pixel 2 XL对应版本驱动文件,地址:taimenopd1.170816.010
- 将两个压缩包放入源码根目录
- 执行解压命令
tar -zxvf xxxxx.tgz - 执行解压出的sh文件,不要回车太快,在最后会让输入
I ACCEPT - 执行完后可在源码根目录下找到vector目录
配置jdk
android-8.1.0_r1之前需要自己安装jdk,之后源码里就自带了,路径:prebuilts/jdk,所以android-8.0.0_r21需要配置jdk,因为我之前有下载android 10的源码,所以我这里直接省了安装步骤,将android 10里的jdk路径添加到$PATH里即可
export PATH=/{your_path}/android-10.0.0/prebuilts/jdk/jdk8/linux-x86/bin/:$PATH
构建源码
cd WORKING_DIRECTORY
sudo apt-get install libncurses5
export LC_ALL=C
export _JAVA_OPTIONS="-Xmx4g"
source build/envsetup.sh
lunch aosp_taimen-user
m
这里循环执行m,报错就继续执行,有给修复提示,就按提示做,否则默认一直m,只要不是每次错误都一样
刷入镜像
cd WORKING_DIRECTORY/out/target/product/taimen/
fastboot flashall -w
刷入镜像(远程服务器编译,本地Window)(On Xshell 5)
cd WORKING_DIRECTORY/out/target/product/taimen/
sz *.txt
sz *.img
- window下
切换到sz命令下载的目录,在该目录打开cmd,执行如下命令
set ANDROID_PRODUCT_OUT=./
fastboot flashall -w
移植Youpk
Youpk4Pixel2XL
Youpk 是一种通过修改系统源码实现主动调用进行脱壳的工具,基于android-7.1.2_r33 分支做的定制,仅支持Pixel 机型,但该机型问题太多了,买了两个,一个时不时无限重启,一个充不进去电,正好身边有一部Pixel 2 XL 用着还不错,并且Pixel 2 XL 支持的最初始分支android-8.0.0_r21 与android-7.1.2_r33 分支挺近的,代码差别应该不是很大,就想把Youpk 移植到Pixel 2 XL ,正好也学习下Youpk 的工作原理。
在此特感谢Youpk 工具作者的开源精神,否则要凭空研究出来对于我来说真是太难了,需要对越来越庞大的android源码有充分的了解。因此,我这个移植也会依照Youpk 的格式开源。以及感谢在移植过程中,在网上搜索到的各种填坑文章,以及Google开源的Android源码,还有各种在线源码搜索服务,还有各种编译系统以及填坑的文章,以及现在越来越快的科学速度,以及各种涉及到的效率工具。
具体原理就不用讲了,参考Youpk即可,其实我也不太懂,我就只管移植完事即可,哈哈。
很少研究这方面,若是有遗漏地方大佬勿喷,欢迎提出来哈
与Youpk不同的地方
CompilerFilter::kVerifyAtRuntime 换成了CompilerFilter::kVerify mirror::ClassLoader* 换成了ObjPtr<mirror::ClassLoader> StringPrintf 换成了android::base::StringPrintf ReaderMutexLock mu(self, *class_linker->DexLock()); 换成了ReaderMutexLock mu(self, *Locks::dex_lock_); ClassLinker 里好几个函数返回值变成了ObjPtr<T> 格式PrettyMethod(method) 换成了method->PrettyMethod() NATIVE_METHOD 和REGISTER_NATIVE_METHODS 位置发生了改变
最后
附上开源地址:Humenger/Youpk4Pixel2XL
成品
CSDN下载地址 或者加入星球《逆向涉猎》获取
🍟彩蛋:有个地方可以免费下载,若你能找到的话ψ(`?′)ψ
参考
|