답변:
작동하지 않는 방식을 지정하지 않습니다. 구성은 지정된 패키지의 모든 공용 클래스 이름을 유지합니다.
-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)
둘째, 처리 된 병을 원래 병과 병합하지만 건너 뛴 경로 만 병합합니다.
-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로 위의 구성을 시도했지만 제대로 작동합니다.