1

Ich entwickle eine Bibliothek für Android, die in vielen Anwendungen verwendet wird. Die Bibliothek hängt von einigen anderen Bibliotheken ab. Zum Beispiel wird Dagger 1.2 verwendet. Wenn eine App, die meine Bibliothek enthält, Dagger 2.0 verwendet, wird das Projekt aufgrund von Konflikten nicht erstellt. Was kann ich tun?So vermeiden Sie Bibliothekskonflikte, wenn jemand meine Android-Bibliothek verwendet

Ich versuchte Jarjar, mit diesem Arbeitsbereich 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 
} 

dies der gradle

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

und das ist mein Bibliothek 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

Jetzt haben wir das gleiche Problem in diesem Moment. Wir haben einige Jarjar-Tools, Gradle's FatJar, ausprobiert und erreichen dies nicht mit einer Lösung. Jetzt versuchen wir die Bibliothek [espresso solution] (https://android.googlesource.com/platform/frameworks/testing/+android-support-test/espresso/core/build.gradle), die ein Jarjar-Skript verwendet in Kompilierzeit, aber wir haben noch keine richtige Lösung. – beni

+0

Andere Annäherung ist Picasso-Bibliothek, die keine Abhängigkeiten hat, wenn es importiert wird und es okhttp-Bibliothek verwendet. Wann wird in das Maven-Repository hochgeladen, ändert sich die Abhängigkeit als optional. Aber wir haben keinen Erfolg – beni

+0

Dank @beni, wenn wir etwas Fortschritt erzielen, werde ich Sie wissen lassen. Ich hoffe du machst das selbe;) – Picci

Antwort

0

I‘ Ich arbeite mit @Beni in das gleiche Problem und wir bekommen eine funktionierende Lösung für dieses Problem. Die schlechten Nachrichten beziehen sich auf das Gradle-Version-Plugin. Mit dieser Lösung sind Sie an die 1.3-Version gebunden, da das von uns verwendete Espresso-Gra- dle-Skript eine Aufgabe sucht, die in Version 1.3 und nicht in den folgenden Versionen vorhanden ist.

Das ist also nicht der beste Ansatz, aber es funktioniert und löst unser Problem. Wie auch immer, wenn jemand helfen kann, nicht an irgendeine Standardversion gebunden zu sein, wäre es großartig.

gebe ich Ihnen einen Link mit unserer Lösung: https://github.com/GigigoGreenLabs/JarJarDagger2Example

Sie haben ähnliche Werkzeuge Jarjar, dass Sie verwenden können, haben einen Blick auf:

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

Gradle Schatten Plugin oder Maven Schatten Plugin wenn du Maven benutzt.

Hoffe, das hilft!

Verwandte Themen