Dexguard保护后APK缺失libreactnativejni.so致崩溃求助
Dexguard保护APK后缺失libreactnativejni.so导致启动崩溃的解决方法
问题描述
未受保护的APK可正常启动,使用Dexguard保护后的APK启动时崩溃,报错信息为:
androidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "libreactnativejni.so" not found
检查发现普通APK中存在libreactnativejni.so,但受保护APK中缺失该文件。当前Dexguard配置如下:-keep class **.so -keepdirectories lib/** -keep class **.libreactnativejni { *; }
解决方案
- 现有配置存在逻辑错误:
-keep class **.so是针对Java类的保留规则,对Native库文件完全无效,Dexguard无法通过这条规则识别并保留.so文件。 - 添加Native库专属保留规则:使用
-keepresources指令指定保留目标.so文件,这是Dexguard中用于保留资源/原生文件的正确指令:# 保留所有架构下的libreactnativejni.so -keepresources lib/**/libreactnativejni.so # 或者如果只针对特定架构,可精准指定 # -keepresources lib/armeabi-v7a/libreactnativejni.so # -keepresources lib/arm64-v8a/libreactnativejni.so - 移除无效配置:
-keep class **.libreactnativejni { *; }试图保留不存在的Java类,完全无意义,直接删除即可。 - 额外检查:确认Gradle构建脚本中的
packagingOptions没有设置排除.so文件的规则,避免Dexguard处理前就丢失了Native库。
内容的提问来源于stack exchange,提问作者Suppose
相关产品推荐
相关产品推荐

