Android 高德地图崩溃:Pointer tag was truncated
环境
- 设备:Android 16+、HyperOS
- 最低系统环境:Android 11(API 30)以上 64 位设备
- 高德地图:
com.amap.api:3dmap:9.8.3
错误
Abort message: 'Pointer tag for <addr> was truncated, see 'https://source.android.com/devices/tech/debug/tagged-pointers'.'
#00 libc.so (abort+156)
#01 libc.so (free+104)
#02 libAMapSDK_MAP_v9_8_3.so
...
#16 libAMapSDK_MAP_v9_8_3.so (Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeDestroy+72)
#19 com.autonavi.base.ae.gmap.GLMapEngine.destroyAMapEngine
#21 com.amap.api.col.3l.cb.destroySurface
#25 android.opengl.GLSurfaceView$GLThread.guardedRun
关键错误:
Pointer tag was truncated
崩溃发生在高德地图执行 nativeDestroy 销毁地图引擎时,Native 层调用 free() 释放内存触发 Bionic 检查。
原因
Android 11 开始,64 位 ARM 设备支持 Native Heap Pointer Tagging,利用 64 位指针高位保存 Tag。旧版 Native SDK 在进行指针运算、转换或内存管理时可能丢失 Pointer Tag,之后将异常指针传给 free(),Bionic 检测到 Tag 被截断后直接执行 abort。
高德 Native SDK
→ 指针 Tag 被截断
→ nativeDestroy
→ free()
→ Bionic 检测异常
→ abort
从堆栈看,问题集中在:
libAMapSDK_MAP_v9_8_3.so
→ GLMapEngine.nativeDestroy
→ free()
因此属于高德地图 9.8.3 Native 库与 Android Native Heap Pointer Tagging 的兼容问题。
解决
在 AndroidManifest.xml 的 <application> 中关闭 Native Heap Pointer Tagging:
<application
...
android:allowNativeHeapPointerTagging="false">
</application>
重新安装应用后生效。
该配置绕过 Pointer Tagging 检查,适合处理无法立即升级或修改的第三方 Native SDK 兼容问题;长期仍应优先升级存在兼容问题的 Native SDK。