Android 如何将apklib转换为aar

Android 如何将apklib转换为aar,android,android-gradle-plugin,Android,Android Gradle Plugin,由于Gradle不支持apklib依赖项,如何从apklib依赖项迁移到aar依赖项?是否可以手动或自动将apklib依赖项转换为aar?如果是-如何,如果否-为什么不 在这个问题中,我假设我没有apklib的原始项目,而是文件本身。您无法将apklib转换为aar。您必须手动更新依赖项以指向aar文件。aar是编译的,包含apklib不一定能自动确定的lint和proguard规则 您可以在此处阅读更多关于差异的内容: apklib不包含对象文件,只包含源文件,因此它可以包含在任何项目中的唯一

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


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

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

您可以在此处阅读更多关于差异的内容:


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

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格式的,所以类似于
    解压library.apklib
    的东西应该可以工作

  • 看看什么东西没打包。您应该看到一个包含
    AndroidManifest.xml
    src
    res
    文件夹的目录

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

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

  • 在这一点上,您可以开始运行了。如果确实需要
    .aar
    文件,请检查新模块是否设置为库模块或应用程序模块。在它的
    build.gradle
    中,如果你有
    apply插件:“com.android.library”
    ,那么它就是一个库模块,gradle将生成一个
    .aar
    作为构建的一部分:成功构建后,它将位于
    build/outputs/aar
    目录中

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

  • 快乐编码


  • 谢谢。到目前为止,我知道没有现成的解决方案可以做到这一点,但我仍在寻找如何从
    apklib
    迁移到
    aar
    ,而无需手动重新编译每个库(考虑到它们尚未部署为
    aar
    )。