使用Android库(AAR)作为带Gradle的Java(Jar)项目的依赖项

时间:2017-01-31 10:00:23

标签: android unit-testing gradle rx-android

Java Jar build.gradle模块:

apply plugin: 'java'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'junit:junit:4.12'

    // rx
    compile "io.reactivex.rxjava2:rxjava:2.0.4"
    compile "io.reactivex.rxjava2:rxandroid:2.0.1"
}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

这个Jar应该是一个用作单元测试android项目的实用程序库的库:

apply plugin: 'com.android.application'

android {
    // ...
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // test
    testCompile 'junit:junit:4.12'
    testCompile project(':test-utils')

    // ... other non-test dependencies here (including rx)
}

这包括:

    testCompile project(':test-utils')

失败了:

  

错误:模块'my-android-app:test-utils:unspecified'取决于一个或   更多Android库但是一个罐子

这是因为RxAndroid是Android .aar库。

我的测试实用程序模块中需要RxAndroid,因为模块提供的一个东西是junit MethodRule,用于通过@Rule注释和@Test中的其他自定义注释来设置Rx调度程序方法

这是必需的,因为RxAndroid AndroidScheduler使用Android Handler / Looper类,它们是Android框架的一部分,在单元测试中不可用。可以使用RxAndroidPlugins替换Android计划程序。

这意味着我只需要RxAndroid AAR的JAR部分(rxandroid工件中的classes.jar)。

有没有办法告诉gradle我只需要AAR的Java部分作为依赖?

我不认为手动从AAR中提取classes.jar并将其作为依赖项包含在内的解决方案。这是一种解决方法。

这个Java测试库应该在我的项目中共享,我目前正在复制我的每个项目中的MethodRule类,这远非理想。

0 个答案:

没有答案