回答:
機能しない方法を指定しません。構成により、すべてのパブリッククラスの名前が指定したパッケージに保持されます。
-keep public class com.myapp.customcomponents.*
次の構成では、指定したパッケージとそのサブパッケージ内のすべてのパブリッククラスの名前が保持されます。
-keep public class com.myapp.customcomponents.**
次の構成では、すべてのパブリック/保護されたクラス/フィールド/メソッドの名前が、指定されたパッケージとそのサブパッケージに保持されます。
-keep public class com.myapp.customcomponents.** {
public protected *;
}
ProGuard構成の下部に次の行を追加します。
-keep class com.facebook.** { *; }
それに応じてパッケージ名を置き換えます。ここで、パッケージcom.facebook
はProGuardから除外されます。
{ *; }
意味ですか?
-keep class com.myapp.customcomponents.** { *; }
処理からパスを除外する方法として、多くの人が推奨しているようです。こちらをご覧ください:
このソリューションの問題は、コードが壊れる可能性がある難読化のレベルがまだ発生していることです。マッピングの印刷でマッピングを確認できます。
java.lang.String toString() -> toString
int getMemoizedSerializedSize() -> getMemoizedSerializedSize
void setMemoizedSerializedSize(int) -> setMemoizedSerializedSize
int getSerializedSize() -> getSerializedSize
boolean equals(java.lang.Object) -> equals
int hashCode() -> hashCode
私が選択したソリューションは、2ステップのプロセスです。まず、injars
フィルターを使用して、処理するパッケージパスを選択します。他のパッケージパスをライブラリとして追加することができます。
-injars artifacts/in.jar(org/toprocess/**.class)
-outjars out/processed.jar
-libraryjars artifacts/in.jar(org/skipped/**.class)
-libraryjars artifacts/in.jar(org/moreskipped/**.class)
次に、処理されたjarを元のjarとマージしますが、スキップされたパスのみをマージします。
-injars out/processed.jar
-injars artifacts/in.jar(org/skipped/**.class)
-injars artifacts/in.jar(org/moreskipped/**.class)
-outjars out/merged.jar
-dontshrink
-dontoptimize
-dontobfuscate
結果は、処理されたパッケージパスとスキップされたパスの組み合わせであるマージされたjarです。誰かが特定のパスの処理を完全にスキップする方法を提供できる場合(私が見つけていない)、この演習は無効です。
Android Studio 4.0を使用して私のために働いたのは:
-keepclassmembers class com.myapp.customcomponents.* {
<fields>;
<init>();
<methods>;
}
他の回答で二重アスタリスク(**)が機能しませんでした。また、R8で上記の構成を試しましたが、正常に動作します。