2013-11-27 3 views
2

나는 Tokbox의 OpenTok java sdk를 통합하는 Android 앱을 개발 중입니다. 내가 proguard를 사용하기 전에 모두 잘 작동하고있었습니다 (나는 dex 한도를 초과했기 때문에 proguard를 사용해야합니다).NoClassDefFoundError (Proguard를 사용하는 자바 코어 클래스 용)

-libraryjars "C:/Program Files/Java/jre7/lib/rt.jar" 
-keep class javax.xml.bind.DatatypeConverter { *; } 

하지만 오류가 지속 : 그래서 사용하여 내 proguard.cfg에 포함하려고 내가 ...Java/jre7/lib/rt.jar 내부에 누락 된 클래스를 발견

Could not find method javax.xml.bind.DatatypeConverter.parseBase64Binary, referenced from method com.opentok.api.OpenTokSDK.generate_token 
VFY: unable to resolve static method 39502: Ljavax/xml/bind/DatatypeConverter;.parseBase64Binary (Ljava/lang/String;)[B 
VFY: replacing opcode 0x71 at 0x003a 
threadid=47: thread exiting with uncaught exception (group=0x4184c2a0) 
java.lang.NoClassDefFoundError: javax.xml.bind.DatatypeConverter 
    at com.opentok.api.OpenTokSDK.generate_token(OpenTokSDK.java:58) 

:

런타임 동안, 나는이 오류가 발생했습니다. DatatypeConverterseeds.txt도 아니고 obfuscated.jar도 아닌지 확인할 수 있습니다.

는 또한 jaxb-api-2.2를 다운로드 및 빌드에 포함 시도했지만 약

[dx] Ill-advised or mistaken usage of a core class (java.* or javax.*) 
[dx] when not building a core library. 

그래서 제 질문은, 어떻게 rt.jar에있는 클래스를 유지하기 위해 난독 말할까요됩니다 Ant 불평? 여기

은 내 proguard.cfg : 나는 외부 libs가 포함했고 난 그냥 내 난독 설정 파일

-keep class com.opentok.** { *; } 
-dontwarn com.opentok.** 

나에 대한 Twitter4j.jar

-keep class twitter4j.** { *; } 
-dontwarn twitter4j.** 

이 추가

################################################################################################# 
# Standard Configuration for Android App 
# See http://proguard.sourceforge.net/index.html#manual/examples.html 

# -libraryjars "C:/Program Files/Java/jre7/lib/rt.jar" 

# -optimizationpasses 2 
-dontoptimize 
-dontobfuscate 
-dontpreverify 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
-verbose 
-printseeds seeds.txt 
-printusage unused.txt 
-printmapping mapping.txt 
# -allowaccessmodification 
# -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable 
-keepattributes *Annotation* 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable,Signature 
-keepdirectories 
-repackageclasses '' 

-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 * extends android.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

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

-keepclassmembers class * implements java.io.Serializable 
{ 
    private static final java.io.ObjectStreamField[] serialPersistentFields; 
    private void writeObject(java.io.ObjectOutputStream); 
    private void readObject(java.io.ObjectInputStream); 
    java.lang.Object writeReplace(); 
    java.lang.Object readResolve(); 
} 

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

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

# adding this in to preserve line numbers so that the stack traces 
# can be remapped 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 


################################################################################################# 
# For RoboSpice 
# See https://groups.google.com/forum/?fromgroups=#!topic/robospice/xGLRbGkLwQU 
#Request classes purged by Proguard as they are "empty", others are kept 
-keep class com.limbocitizen.android.playground.model.** 

#RoboSpice requests and Results must be kept as they are used by reflection via Jackson 
-keepclassmembers class com.limbocitizen.android.playground.request.** { 
    public void set*(***); 
    public *** get*(); 
    public *** is*(); 
} 


### XML SERIALIZER SETTINGS 

-keepclassmembers,allowobfuscation class * { 
    @org.simpleframework.xml.* <fields>; 
    @org.simpleframework.xml.* <init>(...); 
} 


### Json SERIALIZER SETTINGS 
-keepclassmembers,allowobfuscation class * { 
    @org.codehaus.jackson.annotate.* <fields>; 
    @org.codehaus.jackson.annotate.* <init>(...); 
} 

-keepclasseswithmembers class * { 
    native <methods>; 
} 

################################################################################################# 
# For Actionbarsherlock 
# See http://actionbarsherlock.com/faq.html 

-keep class android.support.v4.app.** { *; } 
-keep interface android.support.v4.app.** { *; } 
-keep class com.actionbarsherlock.** { *; } 
-keep interface com.actionbarsherlock.** { *; } 

-keepattributes *Annotation* 


################################################################################################# 
# My Code 

-dontwarn **CompatHoneycomb 
-dontwarn **CompatCreatorHoneycombMR2 
-dontwarn android.support.** 
-dontwarn biz.source_code.base64Coder.** 
-dontwarn chesspresso.** 
-dontwarn org.bouncycastle.** 
-dontwarn com.bst.** 
-dontwarn com.bugsense.** 
-dontwarn com.facebook.** 
-dontwarn com.flurry.** 
-dontwarn com.google.android.** 
-dontwarn com.google.android.youtube.player.** 
-dontwarn com.google.common.** 
-dontwarn com.google.gson.** 
-dontwarn com.nostra13.** 
-dontwarn com.octo.android.robospice.persistence.** 
-dontwarn com.opentok.** 
-dontwarn com.parse.** 
-dontwarn com.pubnub.api.** 
-dontwarn com.samsung.** 
-dontwarn com.sun.istack.internal.** 
-dontwarn com.sun.xml.internal.** 
-dontwarn com.testflightapp.** 
-dontwarn com.tokbox.** 
-dontwarn java.awt.** 
-dontwarn java.nio.** 
-dontwarn java.beans.** 
-dontwarn java.util.** 
-dontwarn javax.security.** 
-dontwarn javax.xml.** 
-dontwarn main.java.tokbox.org.** 
-dontwarn org.apache.** 
-dontwarn org.apache.commons.pool.** 
-dontwarn org.ccil.cowan.tagsoup.** 
-dontwarn org.codehaus.jackson.** 
-dontwarn org.msgpack.** 
-dontwarn org.shaded.apache.** 
-dontwarn org.slf4j.** 
-dontwarn org.springframework.** 
-dontwarn org.w3c.dom.** 
-dontwarn org.xml.sax.** 
-dontwarn tokbox.org.** 

-dontnote **ILicensingService 

-keep class * extends com.samsung.** { *; } 
-keep class android.support.v4.content.Loader { *; } 
-keep class android.support.v4.content.Loader$OnLoadCompleteListener { *; } 
-keep class com.createsend.util.jersey.JsonProvider { *; } 
-keep class com.google.android.gms.maps.GoogleMapOptions { *; } 
-keep class com.google.android.gms.maps.model.CameraPosition { *; } 
-keep class com.opentok.** { *; } 
-keep class com.tokbox.** { *; } 
-keep class com.parse.** { *; } 
-keep class com.samsung.** { *; } 
-keep class javax.xml.** { *; } 
-keep class javax.xml.bind.DatatypeConverter { *; } 
-keep class main.java.tokbox.org.** { *; } 
-keep class org.codehaus.jackson.** { *; } 
-keep class org.osgi.framework.** { *; } 
-keep class tokbox.org.** { *; } 

답변

0

또한, 귀하의 정보를 위해서는 일반적으로 .jar f 프로젝트의 lib 폴더에 세틸

다음은 난독 설정 파일에서이 방법

#-injars bin/classes 

#-injars libs 

#-outjars bin/classes-processed.jar 



-libraryjars <java.home>/jre/lib/rt.jar 

-libraryjars <java.home>/lib/tools.jar 

-libraryjars /libs/twitter4j-core-3.0.3.jar 
+0

안녕 RDC 그들을 정의, 나는 이미 "-keep 클래스 com.opentok했다 ** {. *; } "및"-libraryjars /jre/lib/rt.jar "(내 proguard.cfg에서 볼 수 있습니다.) 또한 각 .jar 파일 (rt.jar 제외)을 프로젝트의 lib 폴더에 넣습니다. – aysonje

관련 문제