【发布时间】:2015-01-13 14:32:40
【问题描述】:
由于 Gradle 不支持 apklib 依赖项,如何从 apklib 依赖项迁移到 aar 依赖项?是否可以手动或自动将apklib 依赖项转换为aar?如果是 - 如何,如果不是 - 为什么不呢?
在这个问题中,我假设我没有 apklib 的原始项目,而是文件本身。
【问题讨论】:
标签: android android-gradle-plugin
由于 Gradle 不支持 apklib 依赖项,如何从 apklib 依赖项迁移到 aar 依赖项?是否可以手动或自动将apklib 依赖项转换为aar?如果是 - 如何,如果不是 - 为什么不呢?
在这个问题中,我假设我没有 apklib 的原始项目,而是文件本身。
【问题讨论】:
标签: android android-gradle-plugin
apklib 不包含目标文件,只包含源文件,因此它可以包含在 any 项目中的唯一方法是重新编译它。根据一些文档,您可以在以下位置阅读:
Android dependencies : apklib vs aar files 和 https://plus.google.com/+ChristopherBroadfoot/posts/7uyipf8DTau
apklib 格式是为了共享 Android 代码+资源而发明的。它本质上是一个压缩的 Android 库项目,这已经是代码+资源共享的现状。
您可以在 Chris Broadfoot 的帖子中看到,生成 apklib 的任务只是压缩了 AndroidManifest.xml 文件以及 src 和 res 目录:
task apklib(type: Zip) {
appendix = extension = 'apklib'
from 'AndroidManifest.xml'
into('res') {
from 'res'
}
into('src') {
from 'src'
}
}
请注意,他的帖子是关于从 Gradle 创建一个 apklib,这是一件有点奇怪的事情,但它提供了一个非常清晰的概念,说明其中一个是如何构建的。
好消息是,当 Eclipse 是主要 IDE 时,这是“标准”Android 项目结构,并且 Android Studio 知道如何导入看起来像这样的模块。所以请按照以下步骤操作:
将您的 apklib 解压到一个临时目录中。它是 zip 格式的,所以像 unzip library.apklib 这样的东西应该可以工作。
查看拆包的内容。您应该会看到一个包含AndroidManifest.xml、src 和res 文件夹的目录。
在 Android Studio 中,在现有项目中,选择“文件”>“导入模块”并将其指向第 2 步中的目录。
Android Studio 应该通过将文件复制到项目中的新模块中来管理导入,将它们安排在其首选目录结构中,并为模块添加build.gradle 文件。
此时您已启动并运行。如果您确实需要.aar 文件,请检查您的新模块是设置为库模块还是应用程序模块。在其build.gradle 中,如果您有apply plugin: 'com.android.library',那么它是一个库模块,Gradle 将生成一个.aar 作为构建的一部分:构建成功后它将位于build/outputs/aar 目录中。
.aar。
编码愉快!
【讨论】:
您无法将 apklib 转换为 aar。您必须手动更新依赖项以指向 aar 文件。 aar 已编译并包含 apklib 不一定能自动确定的 lint 和 proguard 规则。
您可以在这里阅读更多关于差异的信息:
【讨论】:
apklib 迁移到 aar 而无需手动重新编译每个库的任何想法(采取考虑到它们尚未部署为aar)。