2013-11-27 2 views
2

Я работаю над Android-приложением, которое интегрирует OpenTok java sdk Tokbox. Все работало хорошо, прежде чем я использовал proguard (мне нужно использовать proguard, потому что я превысил лимит dex).NoClassDefFoundError для базового класса Java с помощью Proguard

Во время выполнения, я столкнулся с этой ошибкой:

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) 

Я нашел недостающий класс внутри ...Java/jre7/lib/rt.jar поэтому я попытался включить его в моем proguard.cfg с помощью:

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

но ошибка сохраняется. Я также могу подтвердить, что DatatypeConverter не находится в seeds.txt и не в obfuscated.jar.

Я также попытался загрузки jaxb-api-2.2 и включить его в сборку, но Ant жалуется

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

Так что мой вопрос, как вы говорите ProGuard держать класс, расположенный в rt.jar?

Вот мой proguard.cfg:

################################################################################################# 
# 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

Я включил внешние и LIBS я просто добавил это мой Proguard конфигурационный файл

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

или Twitter4j.jar

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

Кроме того, для вашей информации, Я вообще положил .jar f Ильз в Lib папки проекта

, а затем определить их в ProGuard конфигурационный файл таким образом

#-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

Смежные вопросы