Android studio,带有传递依赖的加载jar库

时间:2015-06-11 08:39:49

标签: java android gradle

在我的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加载嵌套的库?还有其他想法吗?

2 个答案:

答案 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的数据。