Android API23(6.0)下Marshmallow tgkill崩溃求助
解决Android 6.0(API 23)下Support Library 26.x.x触发的tgkill崩溃问题
我来分享几个针对这个问题的排查和修复方向,希望能帮到你:
1. 定位Support Library 26的API兼容性问题
Support Library 26.x.x可能引入了一些仅在Android 7.0+(API24及以上)支持的API,在API23上调用时触发了底层异常。你可以:
- 检查代码中使用的Support Library组件(比如
RecyclerView、AppCompat相关类),是否有调用API24+的方法却未做版本判断 - 用
lint工具扫描项目,它会自动检测跨版本API调用问题:./gradlew lint
2. 排查JNI层异常触发点
从崩溃栈来看,异常从JNI的CallVoidMethodV触发,最终走到tgkill,说明是Native层异常导致进程终止。你可以:
- 检查项目中是否有自定义JNI代码,或者依赖的第三方库包含JNI逻辑,这些代码可能在API23下存在兼容性问题
- 如果是纯Java项目,大概率是Support Library内部JNI逻辑出问题,尝试降级Support Library到25.x.x版本,看是否能规避崩溃
3. 针对API23做特殊适配
Android 6.0引入了运行时权限机制,Support Library 26可能在权限处理上有疏漏,你可以:
- 确保所有危险权限都已通过
ContextCompat.checkSelfPermission和ActivityCompat.requestPermissions正确申请,避免因权限缺失导致底层调用失败 - 对API23单独做兼容性封装,避免直接调用仅高版本支持的系统API
4. 捕获更详细的异常信息
当前崩溃栈仅展示Native层信息,缺少Java层调用链路,你可以:
- 开启
StrictMode检测潜在兼容性问题:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() .detectAll() .penaltyLog() .build()); StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() .detectAll() .penaltyLog() .build()); } - 在崩溃前添加更多日志,追踪Java层的具体操作流程,定位触发Native崩溃的关键步骤
内容的提问来源于stack exchange,提问作者Iast
相关产品推荐
相关产品推荐

