我有:
34.1classpath 'com.android.tools.build:gradle:3.0.1'当我只有一个模块并使用gradle工具2时,我使用了:
task makeJar(type: Copy) {
def releaseFolder = new File('build/intermediates/bundles/release/')
if (releaseFolder.exists()) {
from('build/intermediates/bundles/release/')
} else {
from('build/intermediates/bundles/default/')
}
into('build/outputs/jar/')
include('classes.jar')
rename ('classes.jar', 'MY-Android-SDK.jar')
}
Run Code Online (Sandbox Code Playgroud)
现在有3个模块:
MainModule (com.my)
/ \
(com.my.m1) Module1 Module2 (com.my.m2)
Run Code Online (Sandbox Code Playgroud)
我想MY-Android-SDK.jar从所有3个模块创建文件。
到目前为止,我将能够为每个模块创建3个jar文件,并以某种方式合并它们,但我认为这样做是不正确的。
有任何想法吗?
首先,如果您要创建 Android 库,请创建 AAR,而不是 JAR。AAR 文件遵循 android SDK 结构,可以包含清单文件,因此需要权限和 xml 资源等。
其次,如果您要从多个不同的模块创建框架(事实上这是一个相当合理的方法!),您应该创建不同的工件(AAR/JAR 文件)。这使得处理传递依赖、SDK 级别冲突变得更容易,只消耗您需要的内容(有时您不需要 SDK 的一半,在这种情况下,丢弃 gradle 文件中的一些条目比摆弄要容易得多proguard 删除所有未使用的类),提供替代实现或可插入系统(例如,您为 DFP 创建合同模块和双击模块。然后,通过控制反转,您可以使用 double 填充合同点击,下个月,他们要求你用亚马逊广告替换双击。你按照合同模块创建一个带有亚马逊广告的模块,并替换亚马逊注入的双击引用。)
不管怎样,请记住传递性。根据您引入依赖项的方式,可以通过使用 build.gradle 文件中的单个依赖项将所有内容添加到路径中。如果您使用“api”:
api 'com.myname:moduleX:xxx'
Run Code Online (Sandbox Code Playgroud)
在模块 com.myname:moduleY 中,moduleX 也将在路径中。首先使用Gradle maven 插件创建工件。这将允许您使用“安装”任务创建一个 Android AAR 文件,并将其部署到本地 Maven 存储库(gradle 中的 mavenLocal())。如果使用“api”包含所有子模块,它们将被添加到路径中。我不建议这样做,而是仅导入每个模块中必需的内容,并为每个模块创建单独的 AAR 文件并在您的应用程序中使用它们。
现在,如果由于某种原因,您需要创建一个 fat/Uber JAR,那么这个过程称为“着色”。所以,你需要一个 gradle 的阴影插件。幸运的是,有一些。只需选择最适合您的情况(或使用 Maven 和 Maven 阴影插件)。无论如何,作为具有开发库和框架经验的人,请尽可能保持模块的原子性和独立性。最后,如果您需要 gradle maven 插件的工作示例,请尝试这个,它很旧,但可以作为示例。祝你好运!
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |