美文网首页ASAndroid开发经验谈Android开发
二次打包(封装)AAR实用指南

二次打包(封装)AAR实用指南

作者: brucevanfdm | 来源:发表于2017-11-14 08:40 被阅读913次

    前言

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

    原理

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

    Android Library形式导入AAR解压包

    1. 解压AAR文件:


      aar解压图.png

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

    2. 新建一个Module


      Android Library.png

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

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


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


      src_main.png
    5. 在app—build.gradle文件下将该module compile进去


      引入module project.png

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

    总结

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

    相关文章

      网友评论

      • 风之丨旅人:还有一种更简单的方法:解压包打开aar-》删除libs里冲突的jar包-》clean-》run apk:joy:
      • 流船:博主多更新一下sdk这方面的文章,我也是刚遇到这样的需求。想学习一下hh:smile:
        brucevanfdm:有些东西太琐碎了,继续关注吧,有意思的东西一定会分享出来的。
      • 0385a6a3d2ff:aar包包含R.txt,如果碰到R文件合并错误的怎么处理呢?
        brucevanfdm:@H丶Eleven 可以试试替换SDK中的第三方依赖为Jar包,或者将生成的SDK上传到远程仓库
        马里奥爱做饭:请问应用的第三方库改如何打包到SDK中
        Lenny_liu:R文件冲突的话,感觉会是类名冲突或者id标签冲突,这应该是一个命名规则的问题吧:)

      本文标题:二次打包(封装)AAR实用指南

      本文链接:https://www.haomeiwen.com/subject/lswtvxtx.html