如何将apklib转换为aar

8
作为Gradle不支持apklib依赖项,如何从apklib依赖项迁移到aar依赖项?是否可以手动或自动将apklib依赖项转换为aar依赖项?如果是,如何操作?如果不行,为什么呢?
在这个问题中,我假设没有原始的apklib项目,而只有该文件本身。
2个回答

12

apklib不包含目标文件,只包含源代码文件,因此它只能通过重新编译来包含在任何项目中。根据一些文档,你可以在以下链接中阅读到:

Android 依赖:apklib vs AAR 文件https://plus.google.com/+ChristopherBroadfoot/posts/7uyipf8DTau

apklib 格式是作为共享 Android 代码和资源的一种方式而发明的。它本质上是一个被压缩的 Android 库项目,而这已经是用于共享代码和资源的现状。

你可以在 Chris Broadfoot 的帖子中看到生成 apklib 的任务只是将 AndroidManifest.xml 文件和 srcres 目录打包成 zip 文件:

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. 愉快地编码吧!


0

你不能将apklib转换为aar。你必须手动更新依赖项,指向一个aar文件。aar已经编译并包含lint和proguard规则,这些规则apklib不能自动确定。

你可以在这里阅读更多关于它们之间的区别:

Android dependencies : apklib vs aar files


谢谢。到目前为止,我知道没有现成的解决方案来完成这个任务,但我仍在寻找任何关于如何从apklib迁移到aar的想法,而不需要手动重新编译每个库(考虑到它们尚未部署为aar)。 - Dmitry Zaytsev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接