Android:minification混淆动态访问的类

时间:2016-07-06 19:54:54

标签: android apk minify android-proguard

我正在使用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是的 我没有错误,所以它必须是代码混淆。

我试图添加我的proguard规则文件语句,例如

-keep class android.hardware.** { *; }
-keep class com.samsung.android.sdk.** { *; }

但这似乎不起作用。 任何的想法?谢谢!

1 个答案:

答案 0 :(得分:1)

缺少的类确实只能在实际设备上使用。 为了让ProGuard处理您的应用程序,您必须包含以下配置:

-dontwarn com.samsung.android.sdk.motion.**
-dontnote com.samsung.android.sdk.motion.**

这将忽略来自三星sdk的警告和注释。