Как избежать конфликтов библиотек, когда кто-то использует мою библиотеку Android

Я разрабатываю библиотеку для Android, которая будет использоваться во многих приложениях. Библиотека зависит от некоторых других библиотек. Например, он использует Dagger 1.2, поэтому, если приложение, которое будет включать мою библиотеку, будет использовать Dagger 2.0, проект не будет собран из-за конфликтов. Что я могу сделать?

Я пробовал 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'
}

и это моя библиотека gradle

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'
}

person Federico Picci    schedule 07.04.2016    source источник
comment
Теперь у нас есть та же проблема в этот момент. Мы попробовали некоторые инструменты jarjar, Gradle FatJar, но не нашли решения. Теперь мы пробуем espresso solution, которая использует скрипт jarjar во время компиляции, но у нас пока нет подходящего решения.   -  person beni    schedule 07.04.2016
comment
Другим подходом является библиотека Picasso, которая не имеет зависимостей при импорте и использует библиотеку okhttp. Когда загружается в репозиторий maven, он меняет зависимость как необязательную. Но у нас нет никакого успеха   -  person beni    schedule 07.04.2016
comment
Спасибо @beni, если мы добьемся прогресса, я дам вам знать. Надеюсь, вы сделаете то же самое ;)   -  person Federico Picci    schedule 07.04.2016


Ответы (1)


Я работаю с @Beni над той же проблемой, и у нас есть рабочее решение этой проблемы. Плохая новость связана с плагином версии gradle. С помощью этого решения вы привязаны к версии gradle 1.3, потому что сценарий эспрессо-градации, который мы используем, ищет задачу, которая присутствует в версии 1.3 gradle, а не в следующих версиях.

Так что это не самый лучший подход, но он работает и решает нашу проблему. В любом случае, если кто-то может помочь не привязываться к какой-либо версии Gradle, было бы здорово.

Я даю вам ссылку на наше решение: https://github.com/GigigoGreenLabs/JarJarDagger2Example

У вас есть похожие на jarjar инструменты, которые вы можете использовать, взгляните на:

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

Плагин Gradle shadow или плагин maven shadow, если вы используете maven.

Надеюсь это поможет!

person Sergio Martínez    schedule 08.04.2016