2015-12-23 3 views
6

Ich habe Fragen (Android Studio combine 2 .aar into one und andere) von verschiedenen Entwicklern geschrieben, aber ich habe keine definitive Antwort, die mir ermöglicht, eine AAR, die 1 oder mehrere AARs oder JARs (I kann mit JARs tun, da ich keine Ressourcen teilen muss, nur Klassen). Hier ist die app.gradle für mein Bibliotheksprojekt:Erstellen Sie eine AAR mit mehreren AARs/JARs

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.1.0" 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 21 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 
    compile 'com.google.code.gson:gson:2.1' 
    compile ('libs/eventbus.jar') 
    compile project(':core-release') 
    compile project(':midware-release') 
} 

Auch diese App ist ein Bibliotheksprojekt, das zwei andere Bibliotheksprojekte benötigt (‚Kern-release‘, ‚midware-release‘) und während ich war in der Lage Um eine AAR-Datei zu generieren, die ich in meiner Anwendung verwenden kann, konnte die Anwendung die Klassen der abhängigen Bibliotheksprojekte nicht finden. Daher musste ich die AARs der beiden Bibliotheksprojekte in meine Anwendung einfügen. Hier

ist das app.gradle Anwendungsprojekt (ohne die JAR-Dateien manuell hinzufügen), die nicht in der Lage ist, die abhängigen Projekte Klassen zu finden:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.app.sample" 
     minSdkVersion 19 
     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 'com.android.support:design:23.1.1' 
    compile files('libs/eventbus.jar') 
    compile project(':sdk3-debug') 
} 

Ich glaube nicht, das Bibliotheksprojekt der AAR-Datei in zieht die abhängigen Projekte (AAR oder JAR) und daher kann die Anwendung die Klassen nicht finden.

Ich las über transitive Abhängigkeit, aber ich konnte keine Beispielimplementierung finden, die mit meiner Situation helfen könnte.

Antwort

1

Dies sollte Ihr Problem beheben:

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 files('libs/eventbus.jar') 
    compile project(':sdk3-debug') { transitive = true } 
} 

Fügen Sie die transitive Flagge bei true.

+1

Ich versuchte, aber ich bin nicht in der Lage, vorbei zu kommen 'Keine solche Eigenschaft: transitive für Klasse: org.gradle.api.internal.project.DefaultProject_Decorated' Fehler. Auch der Wechsel zu Standard-Wrapper in Build Tools -> Gradle Einstellungen von lokalen Gradle Verteilung hat nicht geholfen –

+2

Können Sie es bitte versuchen: kompilieren (Projekt (': sdk3-debug')) {transitive = true} –

+0

Dieses neue Format gewährleistet Gradle ist jetzt glücklich. Mein Anwendungsprojekt kann jedoch die Klassen im Bibliotheksprojekt (Midware), die sich in der AAR-Datei befinden, nicht finden. Auf die Klassen, die sich direkt in der AAR-Datei befinden, kann zugegriffen werden. Wie ich erwähnt habe, hat meine AAR-Datei zwei abhängige Projekte (Core und Midware). –

1

Ich konnte das Problem lösen von Stan Kurdziel folgenden ‚s Vorschlag: stackoverflow.com/questions/30052058/multiple-aar-files und hier sind Schritte, die ich zu einer Lösung kommen nahm:

  • ich ein AAR geschaffen, die ich auf der lokale Maven-Repository veröffentlicht
  • Nun war diese AAR im Anwendungsprojekt zugänglich
  • Diese AAR hatte auch einen Verweis auf die Klassen in der Kern-und Midware-Bibliotheken. Ich folgte Stan Kurdziel Ansatz # 2:

manuell die Abhängigkeit von Library Project 2 zum Anwendungsprojekt hinzufügen - so dass Ihre Anwendung eine Abhängigkeit Linie für beiden Bibliotheken hat. Abhängig von Ihrer spezifischen Situation kann dies eine praktikable Lösung sein oder auch nicht.

Ich hoffe, dies hilft anderen, die ähnliche Probleme haben könnten.

1

Ich habe keine definitive Antwort gefunden, die es mir ermöglicht, einen AAR zu erstellen, der 1 oder mehrere AARs oder JARs enthält.

Ja, ich denke, weil dieses Thema nicht auf AAR oder JAR beschränkt ist, aber wie Maven Abhängigkeit verwalten.

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

während ich war in der Lage eine AAR-Datei zu generieren, die ich in meiner Anwendung verwenden kann, die Anwendung nicht in der Lage war die abhängigen Bibliotheksprojekte Klassen zu finden, so hatte ich die beiden Bibliotheksprojekte hinzufügen 'AARs in meine Bewerbung.

Es ist nicht Ihre AAR-Verantwortung, Ihre Abhängigkeiten einzubeziehen. Ihre POM-Datei sollte Informationen über Abhängigkeiten enthalten.

https://maven.apache.org/pom.html

Ich glaube nicht das AAR-Datei des Bibliotheksprojektes wird in den abhängigen Projekten (AAR oder JAR) ziehen und damit die Anwendung nicht in der Lage, die Klassen zu finden.

Korrekt, Sie müssen noch Bibliothekenabhängigkeiten in Ihre Anwendung aufnehmen.

Ich nehme an, Sie möchten, dass Ihre Bibliothek von Application verwendet werden kann, ohne Ihre Bibliotheksabhängigkeiten core-release und midware-release anzugeben. Ich habe eine vollständige Erklärung hier android studio generate aar with dependency aber hier ist das, was Sie tun müssen:

  1. Hochladen core-release und midware-release auf Ihre Maven Repository
  2. eine POM-Datei für Ihre Bibliothek erstellen, die Ihre Abhängigkeiten umfassen

    <project> 
        <modelVersion>4.0.0</modelVersion> 
        <parent>...</parent> 
        <artifactId>okhttp</artifactId> 
        <name>OkHttp</name> 
        <dependencies> 
         <dependency> 
         <groupId>com.example</groupId> 
         <artifactId>core-release</artifactId> 
         </dependency> 
         <dependency> 
         <groupId>com.example</groupId> 
         <artifactId>midware-release</artifactId> 
         </dependency> 
        </dependencies> 
        <build>...</build> 
    </project> 
    
  3. veröffentlichen Sie Ihre AAR mit der POM-Datei

    mvn deploy:deploy-file \ 
         -DgroupId=com.example \ 
         -DartifactId=your-library \ 
         -Dversion=1.0.1 \ 
         -Dpackaging=aar \ 
         -Dfile=your-library.aar \ 
         -DpomFile=path-to-your-pom.xml \ 
         -DgeneratePom=true \ 
         -DupdateReleaseInfo=true \ 
         -Durl="https://mavenUserName:[email protected]/repository/maven-releases/" 
    

Und dann kann Ihre Anwendung Ihre Bibliothek verwenden. Gradle lädt die transitiven Abhängigkeiten Ihrer Bibliothek automatisch herunter.

Verwandte Themen