2013-11-03 3 views
5

코드에 난독화할 모델이 몇 가지 있습니다. 전체 모델 패키지를 무시할 수는 있지만 그 작업을 원하지 않습니다. 나는 약간의 proguard 개조를 시도하고 아무 소용이없는 모든 관련 포스트를 검사했다. ORMlite는 계속 java.lang.RuntimeException: Unable to create application ...App: java.lang.IllegalArgumentException: Foreign field class ....f.p does not have id field을 던집니다. 특수 효과가 아직 거기에 있으며 dex2jarjd으로 확인되었으며 아직 있습니다.Proguard로 ORMLite 모델 클래스를 난독 화합니다.

내가이 난독 구성이 (그리고 훨씬 더 그 다른 부분을 모호하게) :

공격적인 물건 :

-keepattributes *Annotation* 
-keepattributes Signature 
-keepattributes EnclosingMethod 

ORMLITE 관련 :

-mergeinterfacesaggressively 
-allowaccessmodification 
-optimizationpasses 5 

-verbose 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 

다양한 프레임 워크에 필요한 정보를 보관 :

-keep class com.j256.** 
-keepclassmembers class com.j256.** { *; } 
-keep enum com.j256.** 
-keepclassmembers enum com.j256.** { *; } 
-keep interface com.j256.** 
-keepclassmembers interface com.j256.** { *; } 

내가 누락되었거나 이것이 가능하지 않습니까?

답변

5

ORMLite는 리플렉션을 사용하여 데이터를 저장하거나 유지하므로 엔티티 (예 : 데이터를 저장하거나 유지하는 데 사용하는 클래스)의 난독 화되지 않은 이름을 원합니다.

이 예외는 ORMLite가 해당 테이블에 대한 Entity 클래스를 찾고 해당 클래스와 비슷한 이름을 가진 멤버를 찾을 수 없기 때문에 발생합니다.

그냥 다음 코드를 사용하여 난독 화하기에서 엔티티 클래스를 무시 : com.xyz.components는 엔티티 클래스의 패키지가

-keep class com.xyz.components.** 
-keepclassmembers class com.xyz.components.** { *; } 

합니다.

도움이 되었기를 바랍니다.

+2

나는 그 일을 할 수 있음을 알고 있지만 나는 그럴 필요가 없다는 것을 안다. 왜냐하면 주석이 아직 남아 있기 때문에 왜 내가해야 하는지를 이해하지 못한다. – meredrica

관련 문제