前言

上次文章Android SDK开发与使用的那些事儿说到如何在aar里集成导入的aar,也就是二次封装aar的问题,一带而过,难免不过瘾。在封装这条路上也遇到了不少坑,现在将此方法详细记录下来。
说到二次打包aar这个需求应该算小众了,谷歌一圈下来也找不到答案,Android Studio到目前也还不支持这个操作,一开始遇到这个问题的时候可以说非常蛋疼了...

原理

aar作为一个“特殊后缀”的压缩包,在导入项目中编译的时候无非就是合并,而Android Studio项目有个module的说法,他们两者都可以看做是project的library,既然Android Studio不能自动处理这个合并,那我们何不尝试一下手动解决?

Android Library形式导入AAR解压包

  1. 解压AAR文件:

     
    Android 二次打包(封装)AAR实用指南-LMLPHP
    aar解压图.png

    可以看到,aar里包括了各种各样的资源文件(解压包大致一样,略有差异),但是有的是空文件夹,现在res,jni这些文件夹我们就熟悉了吧!如果你的aar解压出来仅有so库与jar包,那就不用往下看了,直接提取出来复制到项目对应目录下编译即可!

  2. 新建一个Module

     
    Android 二次打包(封装)AAR实用指南-LMLPHP
    Android Library.png

    一路next下去,包名任选(反正也是要抛弃的...)

  3. 复制classes.jar包到新建的module(示例library名为:mylibrary)的libs目录下,如图

     
    Android 二次打包(封装)AAR实用指南-LMLPHP
    复制classes.jar文件到libs目录下.png
  4. 展开mylibrary下的src文件夹,首先删掉文件夹内的所有东西,接着将aar解压文件夹中的assets、res、AndroidManifest.xml等文件(夹)复制进去,复制jni文件夹下的相关文件到新建的jniLibs文件夹。总之,套路就是按正常的项目结构对应来放置资源。当然,以上几个复制步骤是aar中包含该资源的情况下才需要。

     
    Android 二次打包(封装)AAR实用指南-LMLPHP
    src_main.png
  5. 在app—build.gradle文件下将该module compile进去

     
    Android 二次打包(封装)AAR实用指南-LMLPHP
    引入module project.png

    至此,aar导入完毕,可以直接使用原arr中的方法,加入自己的业务逻辑再次打包成aar的需求也就迎刃而解了

总结

以module形式手动导入aar的方式,曲线解决了目前Android Studio不支持在aar基础上二次封装成aar这个需求。总结起来就是大胆假设小心求证,了解一些项目合并/打包的原理是很有帮助的,在这探索过程中也得到了好友的指点,在这感谢。最后希望这篇文章分享出来能有所帮助吧!

05-06 04:51