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

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

最佳答案

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

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



您可以在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知道如何导入如下所示的模块。因此,请按照下列步骤操作:
  • 将apklib解压缩到一个临时目录中。它采用zip格式,因此应该可以使用unzip library.apklib之类的东西。
  • 看看解包了什么。您应该看到一个包含AndroidManifest.xmlsrcres文件夹的目录。
  • 在Android Studio中的现有项目中,选择"file">“导入模块”,并将其指向步骤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
  • 编码愉快!
  • 09-30 15:38