2016-09-06 126 views
1

首先产生的,我会解释我的项目结构如何添加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中。我不想将这些罐子直接添加到客户端应用程序,所以我唯一的解决方案是找到一种方法将它们添加到aar文件中。

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

有没有办法将这些罐子添加到罐子上? aar在jenkins中生成并部署到artifactory中。

感谢,

回答

0

我could'nt发现这样做的直接的方式,但我将围绕解释,以防有人我的工作别人有同样的问题,也许这会为你工作。我不会将这个答案设置为正确答案,因为也许别人可以给我们一个更好的答案。

因为我不能直接添加jar文件,所以我创建了一个gradle tak,它复制了我想添加到classes目录下的jar文件中的所有文件,然后gradle将它们加入到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/") 
        } 
      } 

    } 
}