Mac 10.14.x 下Android 10源码(QP1A.190711.020)编译和刷机 (Pixel 2 XL)
2021-04-01 01:45:38 Author: mp.weixin.qq.com(查看原文) 阅读量:8 收藏

一、目标

老一辈的Windows逆向工程师前仆后继的在分析Windows的内核,做梦也想看一眼Windows的源码,至今最多也只能看到好几代之前的泄露源码。移动时代就幸福了,最新版本的Android源码敞开了让你看,光是看怎么能够,怎么也得摸一摸。

下面奋飞就把这一周来,下载源码、编译加刷机的过程给大家细细道来。

  • Mac 10.14.6

  • jdk 1.8.0_101

  • xcode 11.3.1 (11C504)

  • Android 10.0 r2 (QP1A.190711.020)

  • Pixel 2 XL

二、分析

话说在东胜神洲傲来国,有个叫壳的东西,把App包的严严实实,想看一眼都不成,更别说摸了。

但是自西方传来Android心经,壳的一举一动都跑在Android上,那么我们把Android心经细细研读,有可能就可以看上一眼,乃至于摸上一把了。

下载源码

本次研读的Android心经不是最新的,来自于 肉丝大佬 网盘中aosp_pure_sourc_code目录下的 aosp1000r2, 详细版本号 ( QP1A.190711.020 )

https://pan.baidu.com/s/1zAYliYbkagdUUsykww_L4g 提取码:vv5u

准备硬盘空间, 200G左右

  • 推荐方案: 买块2T的移动硬盘,格式化成 Mac OS 扩展(区分大小写,日志式)

  • 不推荐方案: 给你心爱的小白腾出 200G空间

    1、创建一个大小写敏感的磁盘镜像
	$ sudo hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 200g ~/android.dmg
       2、加载它
	$ sudo hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android
  • Mac 系统下默认只能同时打开 1024 个文件,而在进行Android源码编译时有可能会超出这个限制,因此需要解除这个限制。在~/.bash_profile中添加以下内容, 马上生效命令: source ~/.bash_profile

	ulimit -S -n 1024

然后把aosp1000r2.7z 解压到硬盘下 aosp目录

下载对应的Mac SDK 我的是 10.14

https://github.com/phracker/MacOSX-SDKs/releases

解压到 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

xz -d MacOSX10.14.sdk.tar.xz
tar xvf MacOSX10.14.sdk.tar

Pixel 2XL 两个驱动下载到 aosp 源码根目录并解压

https://developers.google.com/android/drivers

下载 回来两个文件

google_devices-taimen-qp1a.190711.020-baa894dd.tgz

qcom-taimen-qp1a.190711.020-1d440636.tgz

tar zxvf FileName.tgz

解压到 aosp 目录,然后执行解压后的文件 xx.sh 生成的文件在 vendor 目录下面。

1:main

开始编译

cd aosp
source build/envsetup.sh
lunch aosp_taimen-userdebug
make -j16 // 我的cpu是4核,可以是2-4倍的线程数

好几个小时之后,最终会在aosp/out/target/product/taimen目录下生成镜像文件:

  • system.img:系统镜像

  • ramdisk.img:根文件系统镜像

  • userdata.img:用户数据镜像

  • recovery.img: recovery镜像

  • boot.img: 启动镜像

  • vendor.img: 驱动镜像

太棒了,开始刷机

adb reboot bootloader    // 手机进入bootloader模式 [音量调低键 按电源 也行]
fastboot flashall -w // 开始刷机
1:rc

完美搞定,收工……

一个悲伤的故事

wifi连不上,不能上网。问了问谷哥,哥说,问题出在persist分区损坏,只需要格式化一下这个分区就好了。

我信他个鬼, 从 https://developers.google.com/android/images 下载 Pixel 2 XL的QP1A.190711.020 工厂包,发觉里面有个 radio-taimen-g8998-00012-1905270706.img 是我们编译的代码里面没有的。

radio是通讯基带文件,果断先刷一次工厂包,然后再刷我们编译的版本。这次成功可以上网了。

我觉得 直接刷一下基带文件应该也可以解决,有兴趣的小伙伴可以试试。

fastboot flash radio radio-taimen-g8998-00012-1905270706.img

避坑指南

  • 编译报错

    FAIL: TestGlobEscapes //* (0.00s) glob_test.go:562: incorrect matches list: glob_test.go

把aosp/build/blueprint/Blueprints 文件里的 glob_test.go 和 fs_test.go 的行注释掉

  • 安装xcode命令行

xcode-select --install

总结

Android的源码配置的已经很傻瓜化了,在Ubuntu和Mac的的编译非常顺利,就是刷机遇到点困难,网上的很多教程也没有很详细的讲刷机的步骤。奋飞提供的思路就是和官方工厂包对比,缺什么咱们补什么。

科学上网是研究Android的先决条件。( ̄▽ ̄)ゞ

参考

https://www.anquanke.com/post/id/199898 肉丝大佬指南原文

关注微信公众号,最新技术干货实时推送

手机查看不方便,可以网页看

    http://91fans.com.cn


文章来源: http://mp.weixin.qq.com/s?__biz=MzI4NzMwNDI3OQ==&mid=2247483861&idx=1&sn=23eaa4221eb4d51cc965000e4ca83dc4&chksm=ebcefeeddcb977fba970fb49dbcdd07305cbbc1592688cdec00a1d727ae33df14e2857bce4a2&mpshare=1&scene=24&srcid=0401ffTQdnyR3Gv4CZMxTfbC&sharer_sharetime=1617212737318&sharer_shareid=5191b3dcb328f693d5261ba6bca8d267#rd
如有侵权请联系:admin#unsafe.sh