1

Je développe une bibliothèque pour android qui sera utilisée dans de nombreuses applications. La bibliothèque dépend de certaines autres bibliothèques. Par exemple, il utilise Dagger 1.2, donc si une application qui inclura ma bibliothèque utilisera Dagger 2.0, le projet ne se construira pas en raison de conflits. Que puis-je faire?Comment éviter les conflits de bibliothèque lorsque quelqu'un utilise ma bibliothèque android

J'ai essayé Jarjar, avec cet espace de travail 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 
} 

c'est l'application 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' 
} 

et c'est ma bibliothèque 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

Maintenant, nous avons le même problème en ce moment. Nous avons essayé quelques outils de jarjar, FatJar de Gradle, et ne réalisons pas avec une solution. Maintenant, nous essayons la bibliothèque [solution espresso] (https://android.googlesource.com/platform/frameworks/testing/+/android-support-test/espresso/core/build.gradle) qui utilise un script jarjar à la compilation, mais nous n'avons pas encore la bonne solution. – beni

+0

L'autre approche est la bibliothèque de Picasso qui a zéro dépendances quand elle est importée et utilise la bibliothèque d'okhttp. Quand est téléchargé dans le dépôt maven, il change la dépendance en option. Mais, nous n'avons aucun succès – beni

+0

Merci @beni, si nous réalisons des progrès, je vous le ferai savoir. J'espère que tu feras la même chose;) – Picci

Répondre

0

Je Je travaille avec @Beni dans le même problème et nous obtenons une solution de travail à ce problème. Les mauvaises nouvelles sont liées au plugin version gradle. Avec cette solution, vous êtes lié à la version 1.3 parce que le script espresso gradle que nous utilisons est à la recherche d'une tâche présente dans la version 1.3 et non dans les versions suivantes.

Donc ce n'est pas la meilleure approche, mais cela fonctionne et résout notre problème. De toute façon, si quelqu'un peut aider à ne pas être lié à une version Gradle ce serait génial.

Je vous donne un lien avec notre solution: https://github.com/GigigoGreenLabs/JarJarDagger2Example

Vous avez des outils similaires à Jarjar que vous pouvez utiliser, consulter:

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

plugin ombre Gradle ou plug-in ombre Maven si vous utilisez maven.

Espérons que cela aide!