1

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

Я попытался Jarjar, с этой рабочей Gradle

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 
} 

это приложение Gradle

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.** [email protected]' 
    ] 
    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' 
} 
+1

Теперь у нас та же проблема в этот момент. Мы попробовали некоторые инструменты jarjar, FadJar Gradle, и не достигаем решения. Теперь мы пытаемся использовать библиотеку [espresso solution] (https://android.googlesource.com/platform/frameworks/testing/+/android-support-test/espresso/core/build.gradle), в которой используется скрипт jarjar во время компиляции, но пока у нас нет правильного решения. – beni

+0

Другой подход - библиотека Пикассо, которая имеет нулевые зависимости при импорте и использует библиотеку okhttp. Когда загружается в репозиторий maven, он изменяет зависимость как необязательную. Но мы не добились успеха – beni

+0

Спасибо @beni, если мы достигнем определенного прогресса, я дам вам знать. Надеюсь, вы сделаете то же самое;) – Picci

ответ

0

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

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

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

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

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

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

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

Смежные вопросы