Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create Android library AAR including javadoc and sources

My team is developing an Android library, to be used in some example applications, also developed by us. The library is created as an AAR file. Here is its build.gradle

apply plugin: 'com.android.library' apply from: 'deploy.gradle'  android {     compileSdkVersion 20     buildToolsVersion '20.0.0'     packagingOptions {         exclude 'LICENSE.txt'         exclude 'LICENSE'         exclude 'NOTICE'     }     defaultConfig {         // Excluded for brevity     }     buildTypes {         release {             runProguard false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     }     lintOptions {         abortOnError false         // if true, check all issues, including those that are off by default         checkAllWarnings true     } }  dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     compile 'com.android.support:support-v13:20.0.+'     compile 'com.google.android.gms:play-services:5.+'     compile 'com.squareup.retrofit:retrofit:1.6.1' } 

Here is the dependencies part of the app's build.gradle

dependencies {     compile fileTree(dir: 'libs', include: ['*.jar'])     compile ('com.mycompany.myapp:0.6.5-SNAPSHOT@aar') {         transitive = true         downloadJavadoc = true         downloadSources = true     } } 

I can use all the lib classes, but I can't see the Javadocs nor the sources. How can I package my AAR so it includes the sources and Javadocs?

like image 576
jmm Avatar asked Oct 23 '14 15:10

jmm


People also ask

What is the difference between AAR and jar?

The main difference is aar is splitted inside android to jar. If your app will be used only in user app only in android studio then aar is preferred. If you are planning for app to communicate with c/c++ compiled lib.so file jar is preferred.


2 Answers

This is not a solution but an important note regardless what solution you come up with. If you publish your library to Maven, you must make sure the name of the aar, javadocs file and sources all have the same name, otherwise Android Studio will not be able to retrieve the javadocs and let developers move their mouse over a class/function/property to get help. For example, if your library is called MyLib and and it includes a version number in the file name such as:

MyLib-1.0.0.aar

The javadocs and source files must be named:

MyLib-1.0.0-javadoc.jar MyLib-1.0.0-sources.jar 

This may seem obvious but by default Android builds libraries to include the variant name such as:

MyLib-1.0.0-release.aar

If the word "release" doesn't also appear in the filenames for the javadoc and sources, Gradle will fail to retrieve them. The standard naming convention when uploading to Maven is to strip off the variant name before uploading.

like image 36
Johann Avatar answered Oct 07 '22 06:10

Johann


Seems like it can't be done for now. However, adding these gradle tasks in the deploy.gradle, the -javadoc.jar and -sources.jar are created.

task androidJavadocs(type: Javadoc) {     source = android.sourceSets.main.java.srcDirs }  task androidJavadocsJar(type: Jar) {     classifier = 'javadoc'     baseName = artifact_id     from androidJavadocs.destinationDir }  task androidSourcesJar(type: Jar) {     classifier = 'sources'     baseName = artifact_id     from android.sourceSets.main.java.srcDirs }  artifacts { //    archives packageReleaseJar     archives androidSourcesJar     archives androidJavadocsJar } 

After that, the sources and javadoc need to be manually imported. According to this thread and this open issue they can't be automatically imported.

like image 140
jmm Avatar answered Oct 07 '22 04:10

jmm