나는 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)
:
런타임 동안, 나는이 오류가 발생했습니다. DatatypeConverter
이 seeds.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.** { *; }
안녕 RDC 그들을 정의, 나는 이미 "-keep 클래스 com.opentok했다 ** {. *; } "및"-libraryjars /jre/lib/rt.jar "(내 proguard.cfg에서 볼 수 있습니다.) 또한 각 .jar 파일 (rt.jar 제외)을 프로젝트의 lib 폴더에 넣습니다. –
aysonje