配置编译环境
安装虚拟机
- 这里我使用
VMware
安装Ubuntu-22.04.1-desktop-amd64.iso
- 具体教程可以参考
https://zhuanlan.zhihu.com/p/141033713
编译配置
- 需要至少16G内存
- 200G左右的硬盘
- 如果满足以上条件可以继续了
安装依赖
sudo apt-get update && sudo apt-get install git openjdk-8-jdk python git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5
配置repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
sudo ln /usr/bin/python2 /usr/bin/python
下载AOSP源码
- 具体教程可以查看
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
- 新建源码目录
mkdir aosp
cd aosp
- 配置repo使用tuna的镜像源
- 修改
~/.bashrc
在最后插入export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
并输入source ~/.bashrc
刷新环境变量
- 修改
- 配置git
git config --global user.email "username@gmail.com"
git config --global user.name "username"
- 初始化仓库
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
- 初始化并指定版本
- 在此查看版本
https://source.android.google.cn/docs/setup/about/build-numbers#source-code-tags-and-builds
- 这里
Youpk
修改的源码是android-7.1.2_r33
,所以输入repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.2_r33 --depth 1
- 在此查看版本
- 同步源码
repo sync -j4
配置jack-admin
android 6.0~8.1
需要配置- 查看是否安装jack服务
./prebuilts/sdk/tools/jack-admin list-server
- 如果命令不存在则需要安装
cd prebuilts/sdk/tools/
./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
- 修改
java.security
- 编译不报错的可以不配置,具体参考
https://stackoverflow.com/questions/67363030/rebuild-android-code-with-error-ssl-error-when-connecting-to-the-jack-server-t
- 编辑
/etc/java-8-openjdk/security/java.security
- 搜索
jdk.tls.disabledAlgorithms=
并删除TLSv1, TLSv1.1
- 编译不报错的可以不配置,具体参考
下载Youpk源码
git clone https://github.com/Youlor/unpacker
cp -r -n unpacker/android-7.1.2_r33/* .
修改源码
- 这里根据
unpacker\diff
目录下的diif
文件修改aosp
的源码 - 检查有没有修改对,不然一会编译报错还得重来
编译源码
export LC_ALL=C
source build/envsetup.sh
lunch
make -j32
- 当看到这个就是编译完了
#### make completed successfully (29:03 (mm:ss)) ####
- 编译速度取决于电脑配置,我使用的
i7-12700k
大概半个小时编译完成
- 编译完会在
out/target/product/angler
目录下生成镜像文件system.img
:系统镜像ramdisk.img
:根文件系统镜像userdata.img
:用户数据镜像recovery.img
:recovery镜像boot.img
:启动镜像vendor.img
:驱动镜像
- 使用虚拟机只需要
system.img
,ramdisk.img
,userdata.img
这几个文件
配置虚拟机
- 首先配置好
Android SDK
- 这里我是安装了
Android Studio
- 打开
Android Studio
后在视图里打开Device Manager
- 点击
Create device
创建虚拟机 - 在
Category
里选择Phone
然后选择Pixel
下一步 - 点击标签
x86 Images
选择Nougat 25 x86_64 Android 7.1.1
下载- 这里可以随便选择一个,因为之后要替换镜像
- 替换镜像
- 把之前编译出来的三个镜像替换到
%ANDROID_HOME%\system-images\android-25\default\x86_64
- 把之前编译出来的三个镜像替换到
- 替换完后可以点击下一步创建虚拟机了
- 打开
脱壳
- 具体教程可以查看
https://github.com/Youlor/unpacker
adb shell
echo 待脱壳的包名 >> /data/local/tmp/unpacker.config
- 如果apk没有整体加固, 未避免installd调用dex2oat优化, 需要在安装之前执行这一步
- 启动应用等待10秒后查看
/data/data/包名/unpacker
- pull出dump文件
adb pull /data/data/包名/unpacker
- 调用修复工具 dexfixer.jar, 两个参数, 第一个为dump文件目录(必须为有效路径), 第二个为重组后的DEX目录(不存在将会创建)
java -jar dexfixer.jar /path/to/unpacker /path/to/output