2014-03-05 1 views
0

다음 정의가 잘못되었습니다.Proguard는 일부 인터페이스를 구현하는 모든 내부 클래스를 유지합니다.

-keep class com.foo.bar. ** 구현은 android.content.ServiceConnection { *;

com.foo.bar.SomeClass $ SomeInnerClass $ SomeInnerInnerClass 내가 }

을 유지할 필요가 ServiceConnection { // 방법을 구현 }

은 내가 onServiceConnected 또는 분리 방법을 계속해야합니다 Proguard는 항상 그들을 제거합니다.

지금까지 찾은 유일한 해결책은 전체 com.foo.bar 패키지를 유지하는 것입니다.

참고 : 이름이 변경 될 수 있기 때문에 com.foo.bar.SomeClass를 유지할 수 없습니다. 이미 보호 된 코드가 포함 된 JAR 파일이 제공됩니다. 따라서 SomeClass는 실제로 "dw"라고 불리며 SomeInnerClass는 실제로 "a"라고 불립니다. 그러나 나는 분명히 그것에 의지 할 수 없다.

감사합니다.

답변

1

구성은 정확하지만 ProGuard는 이미 ServiceConnection과 같은 런타임 인터페이스에 메서드를 구현하는 메서드를 자동으로 유지합니다. 명시 적으로 지정할 필요는 없습니다. bin/proguard/mapping.txt를 보면 클래스와 메소드의 이전/새 이름을 볼 수 있습니다. Android 도구 dexdump을 사용하여 classes.dex 파일을 검사하고 클래스가 있는지, 인터페이스를 구현하는지, 메소드가 있는지 다시 확인하십시오.

0

나를위한 특별한 상황이 있습니다. 단일 jar 파일을 보호하고 시스템 인터페이스 구현이 아닌 사용자 정의를 유지하고 메소드 내용을 포함한 다른 것들을 난독 화합니다. 나는 많은 것을 시도하고, 어느 정도 길을 찾는다.

-keepclassmembernames class aa.bb.Impl { 
    public <methods>; 
} 
관련 문제