Создание библиотеки Android AAR, включая Javadoc и исходники
Моя команда разрабатывает библиотеку Android для использования в некоторых примерах приложений, также разработанных нами. Библиотека создается в виде файла AAR. Вот его 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'
}
Вот часть зависимостей в build.gradle приложения
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile ('com.mycompany.myapp:0.6.5-SNAPSHOT@aar') {
transitive = true
downloadJavadoc = true
downloadSources = true
}
}
Я могу использовать все классы lib, но я не вижу ни Javadocs, ни источников. Как я могу упаковать свой AAR, чтобы он включал источники и Javadocs?
3 ответа
Похоже, это не может быть сделано на данный момент. Однако добавление этих заданий в deploy.gradle
, -javadoc.jar и -sources.jar созданы.
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
}
После этого источники и javadoc необходимо импортировать вручную. Согласно этой теме и этой открытой проблеме они не могут быть автоматически импортированы.
Это не решение, а важное замечание, независимо от того, какое решение вы придумаете. Если вы публикуете свою библиотеку в Maven, вы должны убедиться, что имя файла aar, javadocs и источников имеет одно и то же имя, иначе Android Studio не сможет получить javadocs и позволить разработчикам навести указатель мыши на класс / функцию. / property, чтобы получить помощь. Например, если ваша библиотека называется MyLib и она включает номер версии в имени файла, например:
MyLib-1.0.0.aar
Документы javadoc и исходные файлы должны быть названы:
MyLib-1.0.0-javadoc.jar
MyLib-1.0.0-sources.jar
Это может показаться очевидным, но по умолчанию Android создает библиотеки, включающие такие названия вариантов, как:
MyLib-1.0.0-release.aar
Если слово «выпуск» также не появляется в именах файлов для документации javadoc и источников, Gradle не сможет их получить. Стандартное соглашение об именах при загрузке в Maven - это удаление имени варианта перед загрузкой.
Мне удалось создать банку с исходным кодом для библиотеки в Котлине , используя приведенный ниже
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.kotlin.sourceFiles
}
task androidJavadocsJar(type: Jar) {
archiveClassifier.set("javadoc")
//baseName = artifact_id
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
archiveClassifier.set("sources")
//baseName = artifact_id
from android.sourceSets.main.kotlin.sourceFiles
}
artifacts {
// archives packageReleaseJar
archives androidSourcesJar
archives androidJavadocsJar
}
Я сослался на библиотеку U-crop. классификатор, похоже, также устарел. с помощью java.sourcefiles созданы пустые каталоги src.
Этот код добавляется перед android{} в app > build.gradle