2016-07-06 66 views
0

我使用Samsung's Motion library爲三星手機創建計步器。當我在gradle配置文件中創建一個沒有縮小的APK時,系統就可以工作。然而,當我嘗試釋放到商店之前申請縮小,Android:迷你混淆動態訪問類

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.** { *; } 

但這似乎並沒有工作。 有什麼想法?謝謝!

+0

您是否嘗試禁用proguard並檢查發佈.apk? –

+0

我插入:'-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose'但如果您使用的gradle產出(即推薦),你只需要去掉開頭的行'proguardFiles'沒有幫助 – FabioC

+0

('android.buildTypes.release'部分)。 –

回答

1

缺少的類只能在實際設備上使用。 爲了讓ProGuard的過程中您的應用程序,你必須包括以下配置:

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

這將忽略這些警告,並從三星SDK始發的筆記。

+0

雖然本身不​​足,但這是正確的。但是我標記它是正確的,因爲你讓我走上了正確的軌道。正確的解決方案是: '-dontwarn com.samsung.android。** -dnotenote com.samsung.android。** -keep class com.samsung。** {*; } -keep class android.hardware。** {*; }' – FabioC

+0

我很難懷疑所有提到的規則是必要的。特別是'-keep class android.hardware。** {*;由於該軟件包已安裝在設備上,因此ProGuard不予考慮,因此''無意義。我測試了三星SDK的示例項目,並且我的規則足以成功構建它。 –

+0

你說得對。除了三星添加到android。硬件包,因此發生的是新部分被混淆了。任何較小的子集都不適合我 – FabioC