在 Android aar 中包含带有 Java 源代码的 jar 文件

Krø*_*lle 4 java android gradle android-gradle-plugin

我有一个 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')
}
Run Code Online (Sandbox Code Playgroud)

输出 jar 包含:

.
??? com
?   ??? my
?       ??? app
?           ??? jni
?               ??? File1.java
?               ??? File2.java
?               ??? File3.java
?               ??? File4.java
??? META-INF
    ??? MANIFEST.MF // Contains "Manifest-Version: 1.0" only.
Run Code Online (Sandbox Code Playgroud)

jar 存在于libs目录内的 aar 中,但现在它是空的。

dwe*_*ebo 6

我唯一能想到的就是在像这样构建后将您的源添加到 .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
}
Run Code Online (Sandbox Code Playgroud)

并运行

./gradlew myModule:addMySourcesToAar
Run Code Online (Sandbox Code Playgroud)

我没有像你那样向依赖项添加任何东西