在我的app gradle文件中,我有
compile fileTree(dir: 'libs', include: ['*.jar'])
这允许我使用库jar文件中的类。但是如果jar本身包含一个带有jar的lib文件夹呢?像
com.mylib.network/
classes/
libs/
com.otherlib.model.jar
我能做到:
import com.mylib.network.*;
但不是
import com.otherlib.model.*;
是否可以使用gradle加载嵌套的库?还有其他想法吗?
答案 0 :(得分:1)
我不认为这与罐子(传递)有关。但你可以简单地解压你的jar来拉出另一个jar并将两个jar直接放入gradle使用的libs文件夹中
答案 1 :(得分:1)
通常,如果您正在运行gradle,则可以执行./gradlew jarRelease
,这将创建项目classes.jar和其他具有依赖项的文件夹(不在jar中)。由你来决定像com/squareup/okhttp
这样的依赖文件夹。
jarRelease gradle脚本就是这个:
android.libraryVariants.all { variant ->
def name = variant.buildType.name
if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
return; // Skip debug builds.
}
def task = project.tasks.create "jar${name.capitalize()}", Jar
task.dependsOn variant.javaCompile
task.from variant.javaCompile.destinationDir
task.from configurations.compile.findAll {
it.getName() != 'android.jar' && !it.getName().startsWith('junit') && !it.getName().startsWith('hamcrest')
}.collect {
it.isDirectory() ? it : zipTree(it)
}
artifacts.add('archives', task);
}
要存放文件夹:
# Jar .class dependencies
@cd outputs/aar/ && \
jar cf libs/com.jar com/
解开文件夹:
@cd outputs/jar/ && \
jar xf myjar.jar
注意:如果您正在使用ressources,您还可以使用makefile创建与eclipse兼容的库项目,并使用来自aar和jar的数据。