高德 Play 版 · 免 root 内置版 2.3.2
针对 Google Play 版高德地图 17.02.2.2014(versionCode 170105)。
国内版(17.02.0.2010)请用主 Release 里的 Amap-2.3.2-nonroot-embedded.apk。
为什么 Play 版要单独出包
Play 版与国内版是两次独立构建,不是同一份代码的两种分发:
- 8 个 DEX 全部不同
libamapr.so也不同(32,984,120 vs 32,983,424 字节)
所以两版不能共用同一组 native 补丁地址。本版内置双变体表,运行时按三重自检选择,
三关全过才写内存;都不匹配则完全不碰,高德零崩溃。
本次适配做了什么
- native 偏移重推导:Play 版
VT_SLOT_PROCESS 0x1f40b08/FN_PROCESS 0x18b1a74/
GADGET 0xe842c8。旧 gadget0xe84148在 Play 版里已变成ret; stp…(某个函数的中间),
照抄会跳进无效位置 —— 这正是选择靠自检、不靠版本号的原因。 - 去更新改为按名 + 形状校验:
AppUpgradeController.w签名从(e,ZZ)V变成(I,String,Z)V,
且appupgrade.e这个类在 Play 版里不存在,精确签名那条路会整条落空。改后两版都命中。 - 候选表保留多候选:
k84.f/s27.d、wm3.c/lv3.c各只在一个版本上命中,单留一个会静默失效。
真机验证(170105)
建筑去除 开→无楼块 / 关→有楼块(A/B 双向)
帧率上限 60→59~60 90→70~82 120→117~120
开屏拦截 alimama_blocked sendSplashScreen + sendH5Log
去更新 update_block_install w=1 v=1
悬浮球 floating layer attached to NewMapActivity
公告/版本 ver_code=2302 已从服务器取到
90 档落在 80 附近是 120Hz 屏幕整数分频的正常结果,不是缺陷。
安装
四个文件必须一起装,只装 base.apk 会报 INSTALL_FAILED_MISSING_SPLIT:
adb install-multiple base.apk split_config.arm64_v8a.apk split_config.xxxhdpi.apk split_config.zh.apk
签名与官方不同,装之前必须卸载官方高德(会清除登录态与离线地图)。
校验
sha256 e28719168467ee24d618c4ce24961c21b551df3e5b292a2e8e50b402ca9b7e6a Amap-Play-2.3.2-nonroot-embedded.zip