【问题标题】:How to generate .jar of android library with *class files?如何使用 *class 文件生成 .jar 的 android 库?
【发布时间】:2020-12-31 22:34:10
【问题描述】:
目前我的 gradle 任务如下所示:
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
...
}
task sourcesJar(type: Jar) {
getArchiveClassifier().set('sources')
from android.sourceSets.main.java.sourceFiles
}
artifacts {
archives sourcesJar
}
但是结果 jar artifact 有 *.java 和 *.kt 文件,但是如何生成带有 *.class 文件的 jar artifact?
【问题讨论】:
标签:
java
android
jar
javac
【解决方案1】:
根据您的屏幕截图,您正在打开xxx-sources.jar 文件。当然它里面只包含Java源文件。这是正确的结果,如下所示:
task sourcesJar(type: Jar) {
getArchiveClassifier().set('sources')
from android.sourceSets.main.java.sourceFiles
}
您的类文件通常被分隔在另一个 jar 文件中。您没有指定您执行的任务是什么。因此,假设您运行默认的 Android 构建任务,它将生成 aar 文件,它应该包含您的模块类文件。可以解压sapi-1.6.aar查看。
你也可以参考这个doc。
更新:
你没有说明为什么需要jar文件而不是aar文件,假设你想在其他项目中使用jar文件,那么你需要使用其他gradle插件来构建(不能使用androidgradle插件),它可以是java 或base gradle 插件。有人回答说,你可以在aar文件中找到jar文件,你可以查看this。
【解决方案2】:
在命令行中,您只需键入:
jar uf0 path_to_your_jar_file\yourJarFile.jar path_to_your_classes\*.class
当然,如果您不想添加该目录中的所有类,您可以使用类名而不是通配符 (*)。
jar --help
会给你更多的选择。