aar 与“普通模块”的优势

Posted

技术标签:

【中文标题】aar 与“普通模块”的优势【英文标题】:aar vs "plain module" advantages 【发布时间】:2016-11-13 19:12:09 【问题描述】:

如果我有一个链接了许多库项目的项目,我可以通过将每个项目打包到 AAR 中并将其包含在主项目中来提高构建性能吗?或者这不会有任何区别,因为当编译器需要组装 apk 时,它无论如何都需要将所有东西打包在一起?

感谢任何能给我澄清两种方法之间性能差异的人

【问题讨论】:

【参考方案1】:

我认为通过将现有 .jar 文件包装到 .aar 文件中并使用它而不是原始 .jar 文件来节省任何构建时间。

this SO post notes, .aar 文件基本上只是 zip 文件,其中可能包含一个 jar 文件和一些 android 资源。

此外,由于 .aar 文件未预编译为 Dalvik 字节码,因此您的 apk 文件的构建过程仍必须至少执行一次该步骤。因此,您也不会仅通过将 .jar 文件包装到 .aar 文件中来节省 dexing 时间。

如果您构建一个典型的 Android Studio 项目(在 gradle 构建文件中指定了一些 Android 库依赖项),您可以在 app/build/intermediates/exploded-aar 下看到这些文件已解压缩的目录。即使您使用的是 .aar 文件,该工作仍必须由您的构建机器完成。

最后,正如您所指出的,.apk 打包工作仍必须在构建结束时完成。

【讨论】:

【参考方案2】:

我相信图书馆项目(您正在使用)是最好的选择,原因有二:

    库项目提供对库代码库的直接访问,可与主应用程序代码一起编译和打包 如果项目中引用了多个 .aar 文件,则在创建 apk 期间,解包、合并资源和清单文件将增加构建时间。

【讨论】:

+1 表示“在创建 apk 期间,解包、合并资源和清单文件将增加构建时间”谢谢@abhay

以上是关于aar 与“普通模块”的优势的主要内容,如果未能解决你的问题,请参考以下文章

物化视图与表格:有啥优势?

HBase优势、劣势、应用场景

Spark和MapReduce相比,有哪些优势?

数据可视化的作用与优势

动态BGP与静态BGP相比的优势都有哪些

产品项目复盘【方法论+案例】