如何将apklib转换为aar

时间:2015-01-13 14:32:41

标签: android android-gradle

由于Gradle不支持apklib依赖项,如何从apklib依赖项迁移到aar依赖项?可以手动或自动将apklib依赖项转换为aar吗?如果是的话 - 如果没有 - 为什么不呢?

在这个问题中,我假设我没有apklib的原始项目,而是文件本身。

2 个答案:

答案 0 :(得分:12)

apklib不包含目标文件,只包含源文件,因此它可以包含在任何项目中的唯一方法是重新编译它。根据一些文档,您可以阅读:

Android dependencies : apklib vs aar fileshttps://plus.google.com/+ChristopherBroadfoot/posts/7uyipf8DTau

  

apklib格式被发明为一种分享Android代码+资源的方式。它本质上是一个压缩的Android库项目,它已经成为代码+资源共享的现状。

你可以在Chris Broadfoot的帖子中看到,生成apklib的任务只会压缩AndroidManifest.xml文件以及srcres目录:

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知道如何导入这样的模块。请按照以下步骤操作:

  1. 将apklib解压缩到临时目录中。它采用zip格式,因此像unzip library.apklib这样的东西应该有效。

  2. 看看什么是解压缩的。您应该会看到包含AndroidManifest.xmlsrcres文件夹的目录。

  3. 在Android Studio的现有项目中,选择文件>导入模块并将其指向步骤2中的目录。

  4. Android Studio应该通过在新模块中将文件复制到项目中来管理导入,将它们安排在首选目录结构中,并为模块添加build.gradle文件。

  5. 此时你已经开始运行了。如果您确实需要.aar文件,请检查您的新模块是否设置为库模块或应用程序模块。在build.gradle中,如果您有apply plugin: 'com.android.library',那么它就是一个库模块,Gradle将生成一个.aar作为构建的一部分:它将在build/outputs/aar中成功构建后的目录。

  6. 如果您的模块作为应用模块导入而不是库(apply plugin: 'com.android.application'),则更改apply plugin语句,您可能还需要删除applicationId语句构建文件。现在它应该编译为库并生成.aar

  7. 快乐的编码!

答案 1 :(得分:0)

您无法将apklib转换为aar。您必须手动更新依赖项以指向aar文件。 aar被编译并包含lint和proguard规则,apklib无法自动确定。

您可以在这里阅读更多有关差异的内容:

Android dependencies : apklib vs aar files