如何将jar依赖项添加到生成的aar中

时间:2016-09-06 11:38:54

标签: android jenkins gradle jar aar

首先,我将解释我的项目结构

Test Application
|
| - Library Module
|   |
|   | - Core Library Module
|       | Module 1
|       |- Jar dependency 1
|       |
|       | Module 2
|       |- Jar dependency 2

我有一个测试应用程序_I用于测试用于生成aar文件的库模块,该文件被分发给其他应用程序。

库模块依赖于另一个模块,该模块包含我的库和其他库的一些核心功能。

问题是核心库有2个依赖项,2个jar文件。那些作为仅包含该jar的模块添加到项目中。

现在,当我为库模块生成aar文件时,那些jar文件没有添加到aar中。我不想将这些jar直接添加到客户端应用程序,所以我唯一的解决方案是找到一种方法将它们添加到aar文件中。

我已经尝试使用此https://github.com/adwiv/android-fat-aar添加它们,但没有运气,因为它用于将常规模块添加到aar而不仅仅是jar文件。

有没有办法将这些罐子添加到aar? aar是在詹金斯生成的,并被部署到神器中。

谢谢,

1 个答案:

答案 0 :(得分:0)

我无法找到直接的方法,但我会解释我的工作,以防其他人有同样的问题,也许这对你有用。我不会将这个答案设置为正确答案,因为也许其他人可以给我们一个更好的答案。

因为我无法直接添加jars文件,所以我创建了一个gradle tak,它将我希望添加到jar目录中的所有文件复制到classes目录中,然后将它们连接到class.jar文件中这是在.aar文件中。

这是gradle任务

tasks.whenTaskAdded { task ->
if (task.name == 'bundleRelease') {
    task.dependsOn embedJavaJarsCustom
}
}

task embedJavaJarsCustom << {

def finalPath = '/Users/jenkins/workspace/MyProject/MyLibrary/libs'
    // Collect list of all jar files
    FileTree jars = fileTree(dir: finalPath, include: ['*.jar'])

    println "Embedding jars : " + jars

    // Explode all jar files to classes so that they can be proguarded
    jars.visit {
        FileVisitDetails element ->
            println element.getName()
            if (element.getName().equals('my.jar')
                    || element.getName().equals('my2.jar') ) {
                    copy {

                        from(zipTree(element.file))
                        into("${getProject().getBuildDir()}/intermediates/classes/release/")
                    }
            }

    }
}