2014-01-10 15 views
9

Ich habe Android-Apps A und B. Ich möchte doppelten Code aus jedem in eine gemeinsame Bibliothek extrahieren L. Wie kann ich dies mit Gradle tun? Ich habe ein paar Permutationen dieser Frage gesehen, aber es gab nur wenige Antworten.Teilen einer Android-Bibliothek zwischen mehreren Android-Apps mit Gradle

Die nächstgelegene/best bereits gestellte Frage ist diese:

Multiple Android apps depending on android library with gradle

Die erste Antwort schlägt vor, ein übergeordnetes Projekt, das beide Apps und das Bibliotheksmodul umfasst. Diese Kopplung ist unerwünscht, teilweise weil A, B und L in ihrem eigenen Git - Repository sind, aber auch, weil es ein Elternprojekt beinhalten und Dateien erstellen würde, die schwierig in die Quellcodeverwaltung zu bringen wären (oder das manuelle Kopieren von die anderen Projekte). Da Android Studio standardmäßig einen Eltern-Build für Einzel-Modul-Projekte bevorzugt ... Nun, es sind einfach eine Menge Eltern für das, was eine einfache Familie sein sollte. Es scheint wirklich eine unnötige Kopplung zwischen Projekten zu sein, die ansonsten völlig unabhängig sind.

Die zweite Antwort beinhaltet die Freigabe eines AAR zu einem Repo und Verweis auf die Remote-Bibliothek in jedem Projekt. Ich würde mit diesem Ansatz gut zurecht kommen, da wir ein lokales Nexus-Repository haben, aber es scheint keine einfache Möglichkeit zu geben, dies zu tun, ohne Dateien manuell zu versionieren/benennen und hochzuladen (dies ist nicht nachhaltig). Ich versuche, das Sonatype Gradle-Release-Plugin zu verwenden, aber es scheint für JARs (nicht AARs) zu sein.

Es scheint nur eine Menge beweglicher Teile für die grundlegende Form der Code-Sharing zwischen Android-Apps. Hat jemand eine bessere Lösung?

+0

Wenn ich den zweiten Weg gehen, scheint dies relevant: http://www.vandalsoftware.com/post/52468430435/publishing-an-android-library-aar-to-a- maven – Tremelune

Antwort

1

konnte ich viel von der Sonatype Auth Sachen entfernen, da wir unsere eigene Nexus-Repo haben, dass es nicht verwenden . Meine gradle.build Datei (die Moduldatei, nicht die Wurzel) am Ende wie folgt aussehen:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.7.1' 
    } 
} 
apply plugin: 'android-library' 
apply plugin: 'maven' 

version = 0.3 
group = "com.whatevs.android.commons" 

uploadArchives { 
    repositories.mavenDeployer { 

     repository(url: 'http://nexus.whatevs.net:8081/nexus/content/repositories/internal-release') { 
     } 

     pom.project { 
      packaging 'aar' 

      scm { 
       url 'scm:git:ssh://[email protected]:7999/Mobile/android-commons.git' 
       connection 'scm:git:ssh://[email protected]:7999/Mobile/android-commons.git' 
       developerConnection 'scm:git:ssh://[email protected]:7999/Mobile/android-commons.git' 
      } 
     } 
    } 
} 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 19 
    } 
    release { 
     runProguard false 
     proguardFile 'proguard-rules.txt' 
     proguardFile getDefaultProguardFile('proguard-android.txt') 
    } 
} 

dependencies { 
} 
+0

Das einzige Problem ist, dass der Archivupload unter com.whatevs.android.commons/Common/version ist und ich nicht wirklich das "Common" drin haben will . Nicht sicher, wie man das tötet. – Tremelune

1

Nach offiziellen Dokument von Android (https://developer.android.com/studio/projects/android-library.html): Mit dem Modul importieren, das Bibliotheksmodul in Ihr Projekt kopiert wird, Sie können also den Bibliothekscode bearbeiten. Wenn Sie eine einzelne Version des Bibliothekscodes verwalten möchten, ist dies wahrscheinlich nicht das, was Sie möchten. Stattdessen sollten Sie die kompilierte AAR-Datei wie oben beschrieben importieren.

Es gibt eine weitere Option, git Submodul. Sie können Ihre App auf eine SHA Ihrer Bibliothek verweisen lassen. Es gibt also nur eine Kopie für die Bibliothek. Jede App verwendet nur einen SHA. Sie sollten der Filialleitung der Bibliothek etwas mehr Aufmerksamkeit schenken. Prüfen Sie dies für Detail: https://github.com/blog/2104-working-with-submodules

Verwandte Themen