由于Gradle不支持apklib
依赖项,如何从apklib
依赖项迁移到aar
依赖项?可以手动或自动将apklib
依赖项转换为aar
吗?如果是的话 - 如果没有 - 为什么不呢?
在这个问题中,我假设我没有apklib
的原始项目,而是文件本身。
答案 0 :(得分:12)
apklib不包含目标文件,只包含源文件,因此它可以包含在任何项目中的唯一方法是重新编译它。根据一些文档,您可以阅读:
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
中成功构建后的目录。
如果您的模块作为应用模块导入而不是库(apply plugin: 'com.android.application'
),则更改apply plugin
语句,您可能还需要删除applicationId
语句构建文件。现在它应该编译为库并生成.aar
。
快乐的编码!
答案 1 :(得分:0)
您无法将apklib转换为aar。您必须手动更新依赖项以指向aar文件。 aar被编译并包含lint和proguard规则,apklib无法自动确定。
您可以在这里阅读更多有关差异的内容: