首先,我将解释我的项目结构
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是在詹金斯生成的,并被部署到神器中。
谢谢,
答案 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/")
}
}
}
}