2016-07-06 10 views
0

私はSamsung's Motion libraryを使用して、Samsungの携帯用歩数計を作成しています。私が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
  • にこれらのクラスがある(多分非標準のため?)動的にアクセスし、例えば私は本当の をminifyEnabledライン を削除する場合Class.forName("android.hardware.scontext.SContextManager");

は、私はエラーを得ていないので、コードの難読化でなければなりません。

私はProGuardの規則に、このような

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

としてファイル文を追加しようとしましたが、これは動作するようには思えません。 ありがとう!

+0

proguardを無効にし、リリース.apkをチェックしようとしましたか? –

+0

は私が挿入された: '-dontoptimize -dontshrink -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontpreverify -verbose'しかし、あなたはあなただけproguardFiles''で始まる行を削除する必要があります(それが推奨されます)のGradleを使用している場合には、 – FabioC

+0

を助けていません( 'android.buildTypes.release'セクション)。 –

答えて

1

実際には、欠落しているクラスは実際のデバイスでのみ使用できます。

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

これは警告とサムスンのSDKから発信ノートを無視します: は、ProGuardのプロセスアプリケーションを聞かせするには、次の設定を含める必要があります。

+0

それはそれ自体が不十分ですが正しいです。しかし、あなたが私を正しい軌道に乗せるので、私はそれを正しくマークしました。正しい解決策は次のとおりです。 '-dontwarn com.samsung.android。** -dontnote com.samsung.android。** -keep class com.samsung。** {*; } -keep class android.hardware。** {*; } ' – FabioC

+0

私は言及したすべての規則が必要であることをほとんど疑うことはありません。特に '-keep class android.hardware。** {*;このパッケージはデバイスにインストールされているため、ProGuardでは考慮されていないため、意味がありません。私はサムスンのSDKからサンプルプロジェクトをテストし、私のルールはそれをうまく構築するのに十分であった。 –

+0

あなたは正しいです。を除いて、サムスンはアンドロイドに追加します。ハードウェアパッケージであり、その結果、新しい部分が難読化されたということでした。小さなサブセットは私にとってはうまくいかなかった – FabioC

関連する問題