2016-07-29 5 views
0

우리 프로젝트에서 Kofax를 사용하고 있으며 많은 Reflection과 Robogiuice를 사용합니다. 우리는 Dexguard를 사용하여 코드를 난독 화합니다. 우리가 가진 문제 중 하나는 개인 생성자가 제거 된 것입니다. 이미 내 코드에이 있습니다 :프로 가드 비공개 생성자 유지

-keepclassmembers class * { 
    private <init>(...); 
} 

그러나 내 수업의 생성자 중 일부는 여전히 제거됩니다.

1) Could not find a suitable constructor in >com.kofax.mobile.sdk.capture.MainModule$ReflectionMakeSize. Classes must have >either one (and only one) constructor annotated with @Inject or a zero-argument >constructor that is not private. at >com.kofax.mobile.sdk.capture.MainModule$ReflectionMakeSize.class(Unknown >Source) at >com.kofax.mobile.sdk.capture.MainModule.configure(:145)

누구든지이 문제를 해결할 수 있습니다.

EDIT.

나는 단지 private static class의 생성자 만 제거되었고 다른 클래스의 생성자는 여전히 삭제되었음을 알았습니다.

누구나 아는 이유는 무엇입니까? 솔루션의

답변

0

하나는 예를 들어 같은 생성자
전에 @Keep 주석을 추가 할 수 있습니다 :

@Keep 
private Adapter(FragmentActivity mActivity, List<RowModel> list) { 
    super(mActivity, list); 
} 
+0

감사합니다. 그러나 코드가 제거 된 것은 라이브러리 내부이므로'@ keep' 주석을 추가 할 수 없습니다. – Kent

+0

@Keep은 메소드를 유지하는 것이 아니라 전체 클래스를 유지합니다. –

+0

[문서] (https://developer.android.com/reference/android/support/annotation/Keep.html)에서는 메소드에도 '@ Keep'을 적용 할 수 있습니다. 물론 클래스에서 하나의 메서드를 유지하면 전체 클래스에 대한 참조를 유지해야합니다. –

0

오류 메시지가해야이 @Inject 또는 주석이되는 생성자 중 하나가 말한다 인수가없는 비공개 생성자.

그래서 그런 규칙을 추가합니다 :

-keepclassmembers class * { 
    !private <init>(); 
    @com.google.inject.Inject <init>(...); 
    @javax.inject.Inject <init>(...); 
} 

내가 모두 추가의 com.google.inject를 주입 주석뿐만 아니라 Kofax에에서라고 한 javax.inject에서 하나 확실하지 않았다한다. 불필요한 것을 제거 할 수 있습니다.

+0

감사합니다 T. Neidhart. 하지만이 오류가 발생했습니다 : '> [org/apache/log4j/chainsaw/LoadXMLAction] (알려진 1 개의 수퍼 클래스가있는)과 [java/lang/NoClassDefFoundError]의 공통 수퍼 클래스를 찾을 수 없습니다. (알려진 5 개의 수퍼 클래스로)' – Kent

+0

이 오류는 위에서 설명한 구성과 관련이 없습니다. log4j 클래스의 문제점은 알려져 있으며 스윙을 사용할 수 없기 때문에 Android에서 발생합니다. 여기 에릭의 답변을 참조하십시오. http://stackoverflow.com/questions/16667022/proguard-cant-find-any-super-classes –

+0

감사합니다. 그것은 또 다른 설정이었다. 그러나 제안 된 설정은 작동하지 않습니다. 매핑 및 사용되지 않는 클래스를 확인했습니다. 매우 이상한 점은 출력지도에서 생성자가 있다는 것을 알 수 있습니다. 그러나 APK를 디 컴파일하면 거기에 없었습니다. '''com.kofax.mobile.sdk.capture.MainModule $ ReflectionMakeSize - > com.kofax.mobile.sdk.capture.MainModule $ ReflectionMakeSize : 215 : void () -> 221 : 228 : android.hardware.Camera $ 크기 makeSize (android.graphics.Point) -> makeSize ''' – Kent

관련 문제