11

Proguardを使用してアプリのコードを難読化したい。最適化は必要ありません。また、クラスやメソッドを取り除くためにProguardも必要ありません。私が欲しいのは難読化だけです。アプリはいくつかのライブラリプロジェクトを使用します。

私はそれを実現しようとして壁に頭をぶつけてきましたが、それは私が望むように機能していません。Proguardの縮小オプションをオフにしたと思っていたのに、実行時にアプリでNoSuchMethodExceptionsがスローされるのを確認しています。

Proguardを難読化し、コードを最適化しないための魔法の設定は何ですか?

アップデート。NoSuchMethodExceptionsの原因は、(最適化や縮小ではなく)難読化プロセスであることを試行錯誤で確認しました。

Proguard.cfg

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontshrink
-keep public class * extends Object
-keep class com.myapp.** { *; }
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.myapp.activity.Splash
-keep public class com.myapp.alarm.AlarmsViewer
-keep public class com.myapp.activity.About
-keep public class com.myapp.activity.Base
-keep public class com.myapp.activity.BaseWithMenu
-keep public class com.myapp.alarm.Alarm
-keep public class com.myapp.alarm.AlarmFragment
-keep public class com.myapp.alarm.AlarmPagerAdapter
-keep public class com.myapp.alarm.AlarmStore
-keep public class com.myapp.app.App
-keep public class com.myapp.preferences.Preferences
-keep public class com.myapp.preferences.PreferencesStore

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }

-keepattributes *Annotation*

-keep public interface com.android.vending.licensing.ILicensingService

-dontwarn android.support.**
4

2 に答える 2

7

私はしばらく前に同様の問題を抱えていて、力ずくで運を使ってそれを解決してくれました。私のproguard.cfgも同様ですが、次の行があります。

-dontshrink
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

これらの最適化オプションのアイデアをどこから得たのか思い出せませんが、それらは私にとってはうまくいくようです。

常にキャッチオールスイッチがあります

-dontoptimize

(入力クラスファイルを最適化しないように指定します。デフォルトでは、最適化が有効になっています。すべてのメソッドはバイトコードレベルで最適化されます。)

これがより適切かもしれません。

最後に、明示的に保持する必要のあるxmlファイル(クリックハンドラー)でのみ参照されるメソッドがあります。

-keepclassmembers class * extends android.app.Activity {
    public void myClickHandler(android.view.View );
}
于 2012-05-11T16:14:56.527 に答える
0
**#Retrofit**
-keep class retrofit.** { ; }

-keepattributes Signature

-keepattributes Exceptions

-keepclasseswithmembers class * {
@retrofit2.http. ;
}

-keepclasseswithmembers interface * {
@retrofit2.http.* ;
}

-dontwarn javax.annotation.Nullable

-dontwarn javax.annotation.ParametersAreNonnullByDefault

-dontobfuscate  - only in debug mode production mode dont use this

-dontoptimize

-dontshrink

Please use in this lines Dexguard-project.txt file. that's all. Enjoy your coding...
于 2021-01-16T15:49:02.323 に答える