我最近将Android Studio更新为2.3,并将gradle更新为2.3.0。自上次我的应用程序正常工作以来,我没有做任何其他更改,但现在每当执行这行代码时:
ViewDataBinding viewDataBinding = DataBindingUtil.setContentView(this,R.layout.main_activity);
我收到此错误:
java.lang.NoClassDefFoundError: android.databinding.DataBinderMapper
at android.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:31)
at com.app.MainActivity.onCreate(MainActivitiy.java:108)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
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:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
根据this SO回答,包含support-v4 r21的gradle依赖项是个问题。事实证明,我的依赖包括那个,但不是因为我添加了依赖,而是因为我添加了:
dataBinding {
enabled = true
}
因此,我发现这些依赖项已添加到我的项目中:
+--- com.android.databinding:library:1.3.1
| +--- com.android.support:support-v4:21.0.3 -> 24.0.0 (*)
| \--- com.android.databinding:baseLibrary:2.3.0-dev -> 2.3.0
+--- com.android.databinding:baseLibrary:2.3.0
\--- com.android.databinding:adapters:1.3.1
+--- com.android.databinding:library:1.3 -> 1.3.1 (*)
\--- com.android.databinding:baseLibrary:2.3.0-dev -> 2.3.0
正如您所见,com.android.databinding:library:1.3.1
包含support-v4:21.0.3
。
这是我的完整模块build.gradle文件:
apply plugin: 'com.android.application'
apply plugin: 'realm-android'
android {
compileSdkVersion 23
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.app"
minSdkVersion 16
targetSdkVersion 23
versionCode 12
versionName "0.2.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
dataBinding {
enabled = true
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.2.1'
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-v4:23.2.1'
compile 'com.android.support:recyclerview-v7:23.2.1'
compile 'com.android.volley:volley:1.0.0'
compile 'io.realm:android-adapters:1.3.0'
compile 'joda-time:joda-time:2.9.4'
compile 'com.android.volley:volley:1.0.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.google.android.gms:play-services-ads:9.8.0'
}
我知道如何解决这个问题吗?