Android: 缩小混淆动态访问 类
Android: minification obfuscating dynamically accessed classes
我正在使用 Samsung's Motion library 为三星手机制作计步器。当我在 gradle 配置文件中创建一个没有缩小的 APK 时,系统可以正常工作。但是,当我尝试在发布到商店之前应用缩小时,
buildTypes {
release {
minifyEnabled true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable false
jniDebuggable false
}
我收到错误消息,声称某些库(例如 android.hardware.motion
)不存在。
我检查过并且:
- android.hardware.motion 不是 android.hardware
中的标准库(可能只存在于三星手机中?)
- 这些 类 是动态访问(可能是因为非标准?),例如
Class.forName("android.hardware.scontext.SContextManager");
如果我删除该行
minifyEnabled 真
没报错,肯定是代码混淆了。
我已经尝试将
之类的语句添加到我的混淆器规则文件中
-keep class android.hardware.** { *; }
-keep class com.samsung.android.sdk.** { *; }
但这似乎不起作用。
任何的想法?谢谢!
缺少的类确实只能在实际设备上使用。
为了让 ProGuard 处理您的应用程序,您必须包含以下配置:
-dontwarn com.samsung.android.sdk.motion.**
-dontnote com.samsung.android.sdk.motion.**
这将忽略来自 samsung sdk 的警告和注释。
我正在使用 Samsung's Motion library 为三星手机制作计步器。当我在 gradle 配置文件中创建一个没有缩小的 APK 时,系统可以正常工作。但是,当我尝试在发布到商店之前应用缩小时,
buildTypes {
release {
minifyEnabled true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
debuggable false
jniDebuggable false
}
我收到错误消息,声称某些库(例如 android.hardware.motion
)不存在。
我检查过并且:
- android.hardware.motion 不是 android.hardware 中的标准库(可能只存在于三星手机中?)
- 这些 类 是动态访问(可能是因为非标准?),例如
Class.forName("android.hardware.scontext.SContextManager");
如果我删除该行 minifyEnabled 真 没报错,肯定是代码混淆了。
我已经尝试将
之类的语句添加到我的混淆器规则文件中-keep class android.hardware.** { *; }
-keep class com.samsung.android.sdk.** { *; }
但这似乎不起作用。 任何的想法?谢谢!
缺少的类确实只能在实际设备上使用。 为了让 ProGuard 处理您的应用程序,您必须包含以下配置:
-dontwarn com.samsung.android.sdk.motion.**
-dontnote com.samsung.android.sdk.motion.**
这将忽略来自 samsung sdk 的警告和注释。