簡體   English   中英

創建包含 javadoc 和源代碼的 Android 庫 AAR

[英]Create Android library AAR including javadoc and sources

我的團隊正在開發一個 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 類,但我看不到 Javadoc 和源代碼。 如何打包我的 AAR 以使其包含源代碼和 Javadoc?

好像現在無法做到。 但是,在deploy.gradle添加這些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 將無法檢索 javadoc 並讓開發人員將鼠標移到類/函數上/property 以獲得幫助。 例如,如果您的庫名為 MyLib 並且它在文件名中包含一個版本號,例如:

MyLib-1.0.0.aar

javadocs 和源文件必須命名為:

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

這似乎很明顯,但默認情況下,Android 構建庫以包含變體名稱,例如:

MyLib-1.0.0-release.aar

如果“發布”一詞也沒有出現在 javadoc 和源的文件名中,Gradle 將無法檢索它們。 上傳到 Maven 時的標准命名約定是在上傳之前剝離變體名稱。

我能夠使用以下內容在 Kotlin 中創建源 jar

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 目錄。

這段代碼是在 app > build.gradle 中的 android{} 之前添加的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM