How to create an android library in aar and add it to the repository
Android studio - Gradle
How to create aar
Maven central repository
Tutorial on publish aar
Steps
To publish an aar to maven central you need:- Register an account and create a new ticket (https://issues.sonatype.org)
- Download (if you use OS X) GPGTools (http://www.gpgtools.org/)
- Modify project gradle files
- Create signing key
- Build, sign and publish your files to the Staging repository
- Check the result
Modify project gradle files
In order to publish your aar using gradle, you have to add/modify some gradle files and create some property file. All the information and files here are copied from here and here, and I will not explain them, because they are already well explained in these blogs. The first file, you have to add to the project root, is maven_push.gradle, that I write it here for simplicity:apply plugin: 'maven'
apply plugin: 'signing'
def sonatypeRepositoryUrl
if (isReleaseBuild()) {
println 'RELEASE BUILD
sonatypeRepositoryUrl = hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
: "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
} else {
println 'SNAPSHOT BUILD'
sonatypeRepositoryUrl = hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
: "https://oss.sonatype.org/content/repositories/snapshots/"
}
def getRepositoryUsername() {
return hasProperty('nexusUsername') ? nexusUsername : ""
}
def getRepositoryPassword() {
return hasProperty('nexusPassword') ? nexusPassword : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
pom.artifactId = POM_ARTIFACT_ID
repository(url: sonatypeRepositoryUrl) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
pom.project {
name POM_NAME
packaging POM_PACKAGING
description POM_DESCRIPTION
url POM_URL
scm {
url POM_SCM_URL
connection POM_SCM_CONNECTION
developerConnection POM_SCM_DEV_CONNECTION
}
licenses {
license {
name POM_LICENCE_NAME
url POM_LICENCE_URL
distribution POM_LICENCE_DIST
}
}
developers {
developer {
id POM_DEVELOPER_ID
name POM_DEVELOPER_NAME
}
}
}
}
}
}
signing {
required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
}
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.allJava
classpath += project.files(android.plugin.getRuntimeJarList().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
//basename = artifact_id
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
//basename = artifact_id
from android.sourceSets.main.allSource
}
artifacts {
//archives packageReleaseJar
archives androidSourcesJar
archives androidJavadocsJar
}
}
and then you have to add/modify
gradle.properties
:VERSION_NAME=1.2
VERSION_CODE=1
GROUP=com.survivingwithandroid
POM_DESCRIPTION=Android Weather Lib
POM_URL=https://github.com/survivingwithandroid/WeatherLib
POM_SCM_URL=https://github.com/survivingwithandroid/WeatherLib
POM_SCM_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.git
POM_SCM_DEV_CONNECTION=scm:git@github.com:survivingwithandroid/weatherlib.git
POM_LICENCE_NAME=The Apache Software License, Version 2.0
POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
POM_LICENCE_DIST=repo
POM_DEVELOPER_ID=survivingwithandroid
POM_DEVELOPER_NAME=Francesco Azzola
Notice that at line 3 the group must be equal to the value used when you registered your project. Almost done! The last two steps are adding another
gradle.properties
file for each module you want to publish and modify build.gradle
for the same module:POM_NAME=Android Weather Library
POM_ARTIFACT_ID=weatherlib
POM_PACKAGING=aar
and add at the end of
build.gradle
this line:apply from: '../maven_push.gradle'
Create signing key
This is an important step, because your files must be signed before publish them to maven. In OS X you should download PGP Tools that simplify your life. The information here are derived from this link 'How to generate PGP Signatures With Manven'. The first step is creating your signing key running from command line:gpg --gen-keys
the figure below shows all the steps necessary to create the key:
at the end you have your key to use to sign your artifacts. Now you can list the generated keys using:
gpg –list-keys
and the result is shown below:

Now you have to publish your key so that other developers, that download your artifacts, can verify the signature:

notice that the key id must be the same showed in the keys list.
Build, sign and publish your file to the Staging repository
Now you have the key and you can build and sign your artifacts. Before doing it you should add some information so the Android studio can find the right key to use. Following this blog post, we can add a properties file, calledgradle.properties
with this content:signing.keyId=xxxxxxx
signing.password=your_password
signing.secretKeyRingFile=file_location
nexusUsername=YourSonatypeJiraUsername
nexusPassword=YourSonatypeJiraPassword
In OS X, this file should be added under /Users/your_login. Notice that to fill the
secretKeyRingFile
value you can use: gpg –list-secret-keys

Now we can run the gradle task using the gradle console in Android studio:
%GRADLE_HOME%/bin/gradle uploadArchives
At the end, if every things worked correctly we get:

Check the result
The last step is checking the final result to verify we published our files. Let’s open our browser and go to:https://oss.sonatype.org/content/repositories/snapshots/
and start looking for your project following your package structure (i.e com/survivingwithandroid/weatherlib) and check if the files are there:
Now you can check the repository creating a new project in Android studio and add the dependency to the new aar you just published. Once you created your project you should modify build.gradle at the root project in this way:
allprojects {
repositories {
mavenCentral()
maven {
url 'https://oss.sonatype.org/content/groups/public'
}
}
then in the build.gradle (at the module level) you add the new dependency:
compile 'com.survivingwithandroid:weatherlib:1.2-SNAPSHOT'
…if every things is correct the new project will compile.
Reference:
[1] http://gmariotti.blogspot.co.uk/2013/09/publish-aar-file-to-maven-central-with.html?utm_source=Android+Weekly&utm_campaign=dfb0bc628f-Android_Weekly_71&utm_medium=email&utm_term=0_4eb677ad19-dfb0bc628f-337257141
[2] http://chris.banes.me/2013/08/27/pushing-aars-to-maven-central/
[3] https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide
[4] https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
0 comments:
Post a Comment