2015-09-29 15 views
11

Ich habe vor kurzem zu Android Studio von Eclipse gewechselt, und es ist in den meisten Fällen besser.Android Studio lokale Bibliothek veröffentlichen

Aber jetzt bin ich kurz davor, Bibliotheken zu erstellen, die später wiederverwendet werden können. Ich kenne Module, möchte sie aber nicht verwenden, da sie in jedem Projekt ein Duplikat zu kopieren scheint (ich hätte lieber einen Verweis auf eine Lib wie in Eclipse).

Also habe ich meine Aufmerksamkeit auf eine Maven/Gradle-Lösung gerichtet. Idealerweise würde ich gerne in der Lage sein, meine Lib in ein lokales Repo- und/oder Maven-Repo zu exportieren, und dann über dieses Verzeichnis referenzieren. Ich habe schon eine ganze Weile gesucht, und jede Antwort ist anders, und keine von ihnen hat für mich funktioniert. This ist die nächste, die ich gefunden habe, wonach ich suche, aber es gibt einen Fehler bei der Javadoc-Erstellung.

Diese Websites (link und link) erfordern ein Bintray- oder Sonatype-Konto, um die Bibliotheken global zu veröffentlichen. Die Veröffentlichung der Bibliothek ist ein Endziel für mich, also möchte ich diese Option, wenn möglich, offen lassen, aber für den Moment möchte ich nur, dass meine Bibliotheken privat sind.

Es wäre ziemlich toll, wenn es ein Plugin gäbe, dass ich einfach einen Maven-Repo zum Exportieren angeben könnte, aber ich habe nichts gefunden, was vielversprechend aussieht.

Also meine Frage ist: Gibt es eine empfohlene "einfache" Möglichkeit, eine Bibliothek in Android Studio zu exportieren, die ich dann über Gradle referenzieren kann?

Bonus-Marken: Könnte ich Bibliotheken mit proguard einmal veröffentlicht verbergen? Derzeit minifyEnabled=true auf meine Lib-Ergebnisse in der .aar Datei wird nicht beim Erstellen erstellt.

+0

Sie haben "Ausführung für Task fehlgeschlagen: app: compileReleaseJavaWithJavac '. > tools.jar konnte nicht gefunden werden"? – Shine

Antwort

11

Sie können das maven-publish Plugin verwenden, um Ihre Artefakte in jedem Repository zu veröffentlichen, auf das Sie Zugriff haben. I am using it combined with Amazon S3. Das Repository kann Ihr lokales Maven Repo (das .m2-Verzeichnis), das lokale Artifactory, Archiva oder irgendein anderer maven-Repository-Server oder eine gehostete Lösung sein. S3 funktioniert gut und ich bin sicher, dass dort Artifactories usw. gehostet werden.

Wenn Sie ein externes Repository verwenden, fügen Sie es dem Abschnitt "Repositories" hinzu, aber wenn Sie nur das Plug-in verwenden, sollten Sie die Möglichkeit haben, es lokal zu veröffentlichen. Die Task wird als publishToMavenLocal bezeichnet. Sie müssen Ihre Publikation definieren. Veröffentlichung ist einfach eine Reihe von Artefakten, die von Ihrem Build erstellt wurden, in Ihrem Fall wird es wahrscheinlich ein Jar sein, aber es kann alles sein. Kurzes Beispiel wie verwende ich es mit S3.

apply plugin: 'maven' 
apply plugin: 'java' 
apply plugin: 'maven-publish' 

repositories { 
    maven { 
     name "s3Repo" 
     url "your S3 URL" 
     credentials(AwsCredentials) { 
      accessKey awsAccessKey 
      secretKey awsSecretKey 
     } 
    } 
    maven { 
     ... any other repo here 
    } 
} 

publishing { 
    publications { 
     maven(MavenPublication) { 
      artifactId 'artifact that you want' 
      from components.java 
      artifact distZip { 
       ... example artifact created from zip distribution 
      } 
     } 
    } 
    repositories { 
     add "s3Repo" 
    } 
} 

Die Publishing -> Repositories -> hinzuzufügen, ist der Ort, wo Sie alle repos angeben, wo Sie Ihre Archive hochladen möchten.

Wenn Sie Bibliothek von Ihrem lokalen Maven verwenden möchten, fügen Sie einfach:

repositories { 
... 
    mavenLocal() 
... 
} 

Und dann, als auf jede andere Abhängigkeit mit der Gruppen-ID, Artefakt-ID und die Version Ihrer lib verweisen.


Soweit ich weiß, sind verschleiert Bibliotheken die gleiche wie die nicht-verschleierten, nur mit geänderten Namen von Bezeichnern. Wenn eine verschleierte Bibliothek veröffentlicht werden soll, sollte das in Ordnung sein. Verdecken Sie nicht die API-Schnittstellen und Klassen (die Einstiegspunkte). Wenn Sie eine nicht verschleierte Bibliothek veröffentlichen, bin ich nicht sicher, ob sie im endgültigen Archiv verschleiert wird.

Verwandte Themen