Retrofit + SimpleXMLConverter 适用于 Lollipop 而不是 Kitkat
Retrofit + SimpleXMLConverter works on Lollipop and not on Kitkat
我有一个运行良好的应用程序。但是,当我开始使用 CompileSDKVersion 23 时(我从 22 升级了,因为工具栏没有显示在 Lollipop 中)。现在它可以在 Lollipop 设备上运行,但是当我在 Kitkat 上 运行 时崩溃。
错误:
java.lang.NoClassDefFoundError: retrofit.converter.SimpleXMLConverter
at com.app.appname.api.AppAPI.<init>(AppAPI.java:80)
at com.app.appname.api.AppAPI.getInstance(AppAPI.java:95)
at com.app.appname.broker.DataBroker.<init>(DataBroker.java:31)
at com.app.appname.broker.DataBroker.init(DataBroker.java:35)
at com.app.appname.AppApplication.onCreate(AppApplication.java:18)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
at android.app.ActivityThread.access00(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
我正在尝试初始化 Retrofit API:
mAdapter = new RestAdapter.Builder()
.setEndpoint(...)
.setConverter(new SimpleXMLConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
我的 Gradle 看起来像这样:
apply plugin: 'com.android.application'
repositories {
mavenCentral()
maven {
url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/"
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.app.appname"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "0.0.0.1"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:23.0.1'
compile 'com.android.support:support-annotations:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.5.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile('com.squareup.retrofit:converter-simplexml:1.9.0'){
exclude module: 'stax'
exclude module: 'stax-api'
exclude module: 'xpp3'
}
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.facebook.android:facebook-android-sdk:4.1.0'
compile 'com.google.zxing:core:2.2'
compile 'com.embarkmobile:zxing-android-minimal:1.2.1@aar'
}
我试过:
- 将 JCenter() 添加到存储库的
- 包括 GSon 库
- 将所有活动移动到一个包中并在清单中设置包名称
- 查找注释(我在 Preferences -> Build -> Compiler 下找不到)
- 部署到具有相同 API 级别 (4.2.2) 的不同设备
我使用的设置与您的设置几乎相同,包括:
改造 1.9.0
SimpleXMLConverter 1.9.0
compileSdkVersion 23
targetSdkVersion 23
buildToolsVersion 23.0.1
而且我的应用程序运行良好,一直到 API 级别 16(我的最低级别)。
我看到的可能导致问题的主要差异是:
1) 从 SimpleXMLConverter 中排除 stax、stax-api 和 xpp3。我记得当我开始使用它时也把那些排除在外,因为我遇到了一些问题,但我不再需要排除它们,也许尝试删除排除并看看?
2) 包括 Okhttp-url 连接。我知道 Retrofit 会自动使用它,如果它包含在内,可能会导致问题(只是猜测)。
3) 启用了 Multidex。我自己并没有搞砸这个,但我已经在 Whosebug 上阅读了它的问题,如果可能的话,尝试禁用它看看?启用 minify 而不是 运行 multidex 可能会更好,以删除一些不需要的功能。
我有一个运行良好的应用程序。但是,当我开始使用 CompileSDKVersion 23 时(我从 22 升级了,因为工具栏没有显示在 Lollipop 中)。现在它可以在 Lollipop 设备上运行,但是当我在 Kitkat 上 运行 时崩溃。
错误:
java.lang.NoClassDefFoundError: retrofit.converter.SimpleXMLConverter
at com.app.appname.api.AppAPI.<init>(AppAPI.java:80)
at com.app.appname.api.AppAPI.getInstance(AppAPI.java:95)
at com.app.appname.broker.DataBroker.<init>(DataBroker.java:31)
at com.app.appname.broker.DataBroker.init(DataBroker.java:35)
at com.app.appname.AppApplication.onCreate(AppApplication.java:18)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4417)
at android.app.ActivityThread.access00(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1260)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
我正在尝试初始化 Retrofit API:
mAdapter = new RestAdapter.Builder()
.setEndpoint(...)
.setConverter(new SimpleXMLConverter())
.setLogLevel(RestAdapter.LogLevel.FULL)
.build();
我的 Gradle 看起来像这样:
apply plugin: 'com.android.application'
repositories {
mavenCentral()
maven {
url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/"
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.app.appname"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "0.0.0.1"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:23.0.1'
compile 'com.android.support:support-annotations:23.0.1'
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.5.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile('com.squareup.retrofit:converter-simplexml:1.9.0'){
exclude module: 'stax'
exclude module: 'stax-api'
exclude module: 'xpp3'
}
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.facebook.android:facebook-android-sdk:4.1.0'
compile 'com.google.zxing:core:2.2'
compile 'com.embarkmobile:zxing-android-minimal:1.2.1@aar'
}
我试过:
- 将 JCenter() 添加到存储库的
- 包括 GSon 库
- 将所有活动移动到一个包中并在清单中设置包名称
- 查找注释(我在 Preferences -> Build -> Compiler 下找不到)
- 部署到具有相同 API 级别 (4.2.2) 的不同设备
我使用的设置与您的设置几乎相同,包括:
改造 1.9.0
SimpleXMLConverter 1.9.0
compileSdkVersion 23
targetSdkVersion 23
buildToolsVersion 23.0.1
而且我的应用程序运行良好,一直到 API 级别 16(我的最低级别)。
我看到的可能导致问题的主要差异是:
1) 从 SimpleXMLConverter 中排除 stax、stax-api 和 xpp3。我记得当我开始使用它时也把那些排除在外,因为我遇到了一些问题,但我不再需要排除它们,也许尝试删除排除并看看?
2) 包括 Okhttp-url 连接。我知道 Retrofit 会自动使用它,如果它包含在内,可能会导致问题(只是猜测)。
3) 启用了 Multidex。我自己并没有搞砸这个,但我已经在 Whosebug 上阅读了它的问题,如果可能的话,尝试禁用它看看?启用 minify 而不是 运行 multidex 可能会更好,以删除一些不需要的功能。