簡體   English   中英

在 Android aar 中包含帶有 Java 源代碼的 jar 文件

[英]Include jar file with Java sources in Android aar

我有一個 gradle 任務來創建一個 jar 文件,其中包含要包含在 Android aar 庫包中的 Java源文件 這些文件將作為 JNI 的 Javadoc 到同樣捆綁在 aar 包中的 C++ 庫。

我無法弄清楚如何包含jar 文件而不是編譯其中的文件。 jar 文件中的 Java 文件似乎已編譯,這對我沒有幫助 - 我只想包含它們,以便使用該 aar 包的開發人員可以使用它們。

創建的 jar 文件包含所有源代碼,並且在其libs目錄中的輸出 aar 中,但它沒有內容。

如何將 Java 源代碼添加到我的 aar 中?

Jar 創建

Jar 是按如下方式創建的,並最終位於我的模塊的build/libs文件夾中。

task generateMySources(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives generateMySources
}

preBuild.dependsOn(":myModule:generateMySources")

dependencies {
    // The jar is included but it is empty inside the aar.
    compile files('build/libs/myModule-sources.jar')
}

輸出 jar 包含:

.
├── com
│   └── my
│       └── app
│           └── jni
│               ├── File1.java
│               ├── File2.java
│               ├── File3.java
│               └── File4.java
└── META-INF
    └── MANIFEST.MF // Contains "Manifest-Version: 1.0" only.

jar 存在於libs目錄內的 aar 中,但現在它是空的。

我唯一能想到的就是在像這樣構建后將您的源添加到 .aar 文件中

task generateMySources(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}
task addMySourcesToAar(type: Jar) {
    archiveName "myModuleWithSources.aar"
    destinationDir file("build")
    from zipTree("build/outputs/aar/myModule-release.aar")
    from fileTree("build").include("libs/myModule-sources.jar")
}
afterEvaluate { project ->
    project.tasks.preBuild.dependsOn generateMySources
    project.addMySourcesToAar.dependsOn build
}
artifacts {
    archives addMySourcesToAar.archivePath
}

並運行

./gradlew myModule:addMySourcesToAar

我沒有像你那樣向依賴項添加任何東西

對於使用 Gradle Kotlin DSL 的人來說:

tasks.register<Jar>(name = "sourceJar") {
    from(android.sourceSets["main"].java.srcDirs)
    classifier = "sources"
}

publishing {
    publications {
        create<MavenPublication>(name = "Maven") {
            run {
                groupId = "groupId"
                artifactId = "module-name"
                version = "1.0"
                artifact("$buildDir/outputs/aar/module-name-release.aar")
                artifact(tasks["sourceJar"])
            }
        }
    }
}

暫無
暫無

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

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