gpt4 book ai didi

java - Android 数据绑定(bind)测试在模块 NoClassDefFoundError 中失败

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:00 26 4
gpt4 key购买 nike

我无法在使用 android 数据绑定(bind)库的模块中运行本地单元测试。

首先让我介绍一下项目结构是如何配置的。

project
| app
-MainLauncherActivity
| myLibrary
-CommonModuleActivity

我创建了一个新项目,然后添加了一个新模块“myLibrary”。

主要的“app”依赖于“myLibrary”模块。我在“myLibrary”中添加了一项支持数据绑定(bind)的 Activity 。我在单击按钮时从主要“应用程序” Activity 中调用了模块特定 Activity 。它正常工作,可以运行该应用程序。

但是,当我为模块 Activity 添加测试用例时出现以下错误。

安卓工作室:2.3

Gradle build tools version 2.3.0 -->
Error:java.lang.NoClassDefFoundError: android/databinding/DataBinderMapper


Gradle build tools version 2.2.3 -->
Error:java.lang.NoClassDefFoundError: android/databinding/ViewDataBinding

PROJECT IDE SCREENSHOT

项目根gradle文件:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.android.tools.build:gradle:2.2.3'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

下面是“app”build.gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.bindingtest"
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

dataBinding {
enabled true
}
}

dependencies {
compile 'com.android.support:appcompat-v7:25.1.0'
//compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4'
testCompile 'junit:junit:4.12'
compile project(':mylibrary')
}

在 myLibrary build.gradle 下:

apply plugin: 'com.android.library'

android {
compileSdkVersion 25
buildToolsVersion "25.0.2"

defaultConfig {
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
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:25.1.0'
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.10.19"
}

图书馆 Activity :

public class MyLibraryActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMyLibraryBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_my_library);
//set data to binding
}
}

相应的测试用例可以在所附的屏幕截图中找到。

有人可以告诉我我在这里做错什么来测试它吗?

应用运行良好,只有单元测试失败!!!

最佳答案

我知道现在回答这个问题为时已晚,但我想对可能面临这个问题的 friend 们说。

任何时候您习惯了数据绑定(bind)并在单元测试中遇到NoClassDefFoundError

首先在 build.gradle(Module) 中添加这一行

testOptions {
unitTests{
isIncludeAndroidResources=true
}
}

然后将这个库添加到 build.gradle(Module) 的依赖项中

kaptTest("androidx.databinding:databinding-compiler:7.0.4")

关于java - Android 数据绑定(bind)测试在模块 NoClassDefFoundError 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com