2011-03-25 5 views
1

내 안드로이드 앱에서 jacorb.jar 및 CORBA 인터페이스를 사용하지 않으므로 넘어졌습니다. 내가 Proguard와를 사용하여 코드를 당황하게하려고 할 때 나는이 같은 경고를 많이 얻을 :CORBA로 Android 앱을 난독 화합니다.

[proguard] Warning: there were 1223 unresolved references to classes or interfaces. 
[proguard]   You may need to specify additional library jars (using '-libraryjars'), 
[proguard]   or perhaps the '-dontskipnonpubliclibraryclasses' option. 
[proguard] Warning: there were 33 unresolved references to program class member 
s. 
[proguard]   Your input classes appear to be inconsistent. 
[proguard]   You may need to recompile them and try again. 
[proguard]   Alternatively, you may have to specify the options 
[proguard]   '-dontskipnonpubliclibraryclasses' and/or 
[proguard]   '-dontskipnonpubliclibraryclassmembers'. 

내 proguard.cfg :

-injars  bin/classes 
-outjars  bin/classes-processed.jar 
-libraryjars C:/android-sdk-windows/platforms/android-7/android.jar 
-libraryjars libs 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-dontnote 

-keep class com.android.vending.billing.** 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

어떻게

[proguard] Warning: org.jacorb.orb.standardInterceptors.SASComponentInterceptor: can't find referenced 
class org.ietf.jgss.Oid 

을 그리고 결과 이러한 경고를 수정하고 apk 파일을 작성 하시겠습니까?

답변

2

cfr. ProGuard manual > Troubleshooting > Warning: can't find superclass or interface.

Jacorb는 Android 런타임의 일부가 아닌 JGSS에 의존하는 것처럼 보입니다. 이론 상으로는 JGSS를 라이브러리 패키지로 지정해야합니다. 그러나 JGSS없이 앱이 이미 잘 실행되었으므로 코드의이 부분이 사용되지 않는다고 가정하는 것이 좋습니다. 그런 다음 경고를 전환 할 수 있습니다

-dontwarn org.ietf.jgss.** 

ProGuard에서 더 이상이없는 클래스에 대해 불평하지 않고 코드를 처리 진행합니다. 콘솔 출력의 요약은 아마 비슷한 클래스가 많이 있음을 시사합니다.

+0

내 앱에서 실제로 사용하지 않는 모든 클래스에 -dontwarn 옵션을 추가했습니다. 그러나 또 다른 종류의 경고가 여전히 존재합니다 : '[proguard] 경고 : org.jacorb.imr.util.AddServerWindow : org.jacorb.imr.util.AddServerWindow 클래스의 참조 된 메소드 'void pack()'을 찾을 수 없습니다. ' 이 클래스는 libs/jacorb.jar에 보관됩니다. '-keepclasseswithmembers class org.jacorb. ** ' 을 사용하지만 효과가 없습니다. – Ola

+0

Cfr. ProGuard 설명서> 문제 해결> 경고 : 참조 된 필드/메소드를 찾을 수 없습니다. (ProGuard의 이전 버전에서) dontskipnonpubliclibraryclasses와 dontskipnonpubliclibraryclass 멤버를 시도 했습니까? –

+0

이 옵션을 별도로 사용하거나 함께 사용하려고했습니다 (질문에 대해 썼습니다). 방금 ('-ignorewarnings' -dontshrink' -dontoptimize' 옵션으로) 이러한 경고를 무시하면 앱 서비스를 시작할 수 없습니다. – Ola

관련 문제