1

我正在为 android 开发一个库,它将在许多应用程序中使用。该库依赖于其他一些库。例如,它使用 Dagger 1.2,因此如果包含我的库的应用程序将使用 Dagger 2.0,则项目将不会因为冲突而构建。我能做些什么?

我用这个工作区 gradle 尝试了 Jarjar

buildscript {
    repositories {
        jcenter()
        mavenLocal()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'net.vrallev.gradle:jarjar-gradle:1.1.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

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

这是应用程序等级

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.xxx.yyy.sdklauncherapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile project(':library')
    compile 'com.google.dagger:dagger:2.2'
}

这是我的图书馆毕业

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

apply plugin: 'net.vrallev.jarjar'

jarjar {
    jarJarFile 'jarjar-1.4.jar'
    rules = [
            'rule com.squareup.dagger.** ext.com.squareup.dagger.@1'
    ]
    srcExcludes = ['META-INF/**']

    outputName 'build_repackaged.jar'

    outputDir 'libs'

    ignoreJarJarResult false
}


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    jarjar 'com.squareup.dagger:dagger:1.2.2'
}
4

1 回答 1

0

我正在与@Beni 一起解决同样的问题,我们为这个问题找到了一些可行的解决方案。坏消息与 gradle 版本插件有关。使用此解决方案,您将绑定到 gradle 1.3 版本,因为我们使用的 espresso gradle 脚本正在寻找 1.3 gradle 版本中存在的任务,而不是在以下版本中。

所以这不是有史以来最好的方法,但它有效并解决了我们的问题。无论如何,如果有人可以帮助不绑定到任何 gradle 版本,那就太好了。

我给你一个我们的解决方案的链接:https ://github.com/GigigoGreenLabs/JarJarDagger2Example

您可以使用与 jarjar 类似的工具,请查看:

https://github.com/musketyr/gradle-fatjar-plugin

如果您使用的是 maven,则 Gradle shadow 插件或 maven shade 插件。

希望这可以帮助!

于 2016-04-08T08:16:32.990 回答