2012-12-13 2 views
2

전체적으로 안드로이드로 난처 해하면서 처음 생생하지만 나는 마지막 날에 Proguard를 사용해보기 시작했습니다. 어쨌든, 나는 이른바 프로 가드 지옥에 갇혀있다.안드로이드 ProGuard 문제로 난독 화 Android

내 앱의 구조는 3 가지 프로젝트가 있습니다. 라이브러리 1 개와 응용 프로그램 2 개. 두 응용 프로그램 프로젝트는 응용 프로그램의 모든 논리 및 라이브러리를 포함하는 라이브러리 프로젝트를 기반으로합니다. 거의 아무것도 응용 프로그램 프로젝트에 배치되지 않습니다.

그러나 Proguard가 활성화 된 응용 프로그램 중 하나를 내보내려고하면 Jackson JSON Parsing 라이브러리에 오류가 발생합니다. 난 다른 것들을 많이 시도하고 심지어는 오류를 무시하려고했지만 그것은 단지 구문 분석 부분을 실패하게했다. 따라서 오류를 무시하는 것은 올바른 일이 아닙니다.

이 내 난독-project.txt 파일

-assumenosideeffects class android.util.Log { 
    public static *** d(...); 
    public static *** v(...); 
} 
-keep public class com.google.android.vending.licensing.ILicensingService 
-keep class org.codehaus.** { *; } 

이다 그리고이 내가 얻을 오류입니다.

Warning: org.codehaus.jackson.map.ext.JodaSerializers$LocalDateTimeSerializer: 
    can't find referenced class org.joda.time.LocalDateTime 
     You should check if you need to specify additional program jars. 
Warning: there were 99 unresolved references to classes or interfaces. 
     You may need to specify additional library jars (using '-libraryjars'). 

답변

2

가 joda 시간 수업을 -keep 옵션을 추가하십시오 : 또한

-keep public class org.joda.time.** {public private protected *;} 
-dontwarn org.joda.time.** 
+0

위대한 친구, 그 경고의 95 %처럼 해결하지만 그들 중 4 개가 더 있습니다, 그들은 모두 이것처럼 보입니다. 경고 : org.codehaus.jackson.map.ext.DOMSerializer : 참조 된 클래스 org.w3c.dom.bootstrap.DOMImplementationRegistry를 찾을 수 없습니다. – parek

+2

org.w3c. ** 및 기타 외부 라이브러리에 -keep 및 -dontwarn을 추가하십시오. . 내 프로젝트에서 나는 -libraryjars와 -injars를 포함한 다른 옵션을 사용하려고 시도했지만, 운이 없었으므로 모든 패키지를 외부 라이브러리에서 지켜야했다. 또한 당신이 앱을 내보내는 것을 관리한다면, 불분명 한 DTO 클래스, 리플렉션에 의해 호출 된 메소드 등으로 인해 런타임에 여전히 크래시 될 수 있음을 알고 있어야합니다. – Leszek

0

자체 난독 화하기 위해 할 수있는 한 가지는 당신이 1.X, 잭슨 2.X를 사용하지 않을 있는지 확인하는 것입니다 - - 동적 (선택적) 종속성이 적습니다. 이것은 PG에 의한 잡음을 줄입니다.

0

"참조 된 클래스를 찾을 수 없습니다"란 javac의 클래스 경로와 매우 유사하게 -libraryjars으로 지정해야하는 클래스를 포함하는 JAR 파일을 의미합니다.

관련 문제