[解決済み] ProGuardによるクラスメンバー名の難読化の防止
2023-06-10 05:14:25
質問
私は自分のクラス
ClassMultiPoint
というサブクラスがあります。
public class ClassMultiPoints
{
public String message;
public List<ClassPoints> data;
public class ClassPoints
{
public String id;
public List<ClassPoint> points;
public class ClassPoint
{
public String speed;
public String bearing;
}
}
}
オブジェクトの値を取得する
oPoints
をパースして
GSON
:
oPoints = gson.fromJson( jsonString, ClassMultiPoints.class);
私は
oPoints.message
.
を使わずにアプリケーションを実行すると
proguard
で実行すると成功します。
私のアプリを
proguard
を付けて実行すると、アプリがクラッシュします。
問題があると思います。
proguard
属性の名前を変更する
'oPoints.message'
を短い
'a'
.
メソッドや属性の名前は一定にするようにしていますが
proguard
はその名前を変更します。
proguard.cfg:
-injars bin/classes
-injars libs
-outjars bin/classes-processed.jar
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-dontskipnonpubliclibraryclasses
-optimizationpasses 5
-printmapping map.txt
-flattenpackagehierarchy
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.MapActivity
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-libraryjars libs/commons-io-2.2.jar
-libraryjars libs/ftp4j-1.7.1.jar
-libraryjars libs/gson-2.2.2.jar
-keep public class org.apache.commons.io.**
-keep public class it.sauronsoftware.ftp4j.**
-keep public class com.google.gson.**
-keep public class com.mypackagename.ActivityMonitor$*
-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 * extends android.content.Context {
public void *(android.view.View);
public void *(android.view.MenuItem);
}
-keepclassmembers class * implements android.os.Parcelable {
static android.os.Parcelable$Creator CREATOR;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
私の1つの(静的)クラスのメソッドと属性の名前を保持するための正しい方法は何ですか?
どのように解決するのですか?
Waqasさん、ありがとうございます。
私の場合、解決策が見つかりました。
-optimizationpasses 5
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging*/
-allowaccessmodification
-repackageclasses ''
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.MapActivity
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-libraryjars libs/commons-io-2.2.jar
-libraryjars libs/gson-2.2.2.jar
-keep public class org.apache.commons.io.**
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}
##---------------Begin: proguard configuration for Gson ----------
-keepattributes *Annotation*,Signature
-keep class com.mypackage.ActivityMonitor.ClassMultiPoints.** { *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints { public protected *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints { public protected *; }
-keep public class com.mypackage.ActivityMonitor$ClassMultiPoints$ClassPoints$ClassPoint { public protected *; }
# To support Enum type of class members
-keepclassmembers enum * { *; }
##---------------End: proguard configuration for Gson ----------
また、私は
@SerializedName("message")
を使用しないので、シリアライズしなくても問題なく動作します。
関連
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
javaの非静的メソッドを静的に参照することができない
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
-bash: java: コマンドが見つからない 解決方法
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
Java Runtime Environmentを継続するためのメモリが不足しています。
-
Java の double データ型における 0.0 と -0.0 の問題
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
Javaジェネリックを1つの記事で
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
Java:未解決コンパイル問題の解決方法
-
java 365*1000*60*60*24 計算問題
-
テストが空であるかどうかを判断するためのオプションの処理
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ