如何将 apklib 转换为 aar

How to convert apklib to aar

由于 Gradle 不支持 apklib 依赖关系,如何从 apklib 依赖关系迁移到 aar 依赖关系?是否可以手动或自动将 apklib 依赖项转换为 aar?如果是 - 如何,如果不是 - 为什么不?

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

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

您可以在此处详细了解差异:

Android dependencies : apklib vs aar files

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

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

The apklib format was invented as a way to share Android code+resources. It’s essentially a zipped up Android library project, which was already the status quo for code+resource sharing.

您可以在 Chris Broadfoot 的 post 中看到生成 apklib 的任务只是压缩 AndroidManifest.xml 文件以及 srcres 目录:

task apklib(type: Zip) {
    appendix = extension = 'apklib'

    from 'AndroidManifest.xml'
    into('res') {
        from 'res'
    }
    into('src') {
        from 'src'
    }
}

请注意,他的 post 是关于从 Gradle 创建一个 apklib,这是一件有点奇怪的事情,但它提供了一个关于这些事情是如何发生的非常清楚的想法结构化。

好消息是,这是 "standard" Android Eclipse 是主要 IDE 时的项目结构,并且 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. 编码愉快!