美文网首页
多module打包成aar的形式

多module打包成aar的形式

作者: Veken_Fly | 来源:发表于2018-06-06 11:53 被阅读0次

最近公司有个新项目,把原来的一个应用移植到另一个应用上,通过aar的形式。aar嘛,这也没多大事,成功编译,不就会生成aar文件嘛,这有什么难的(理想很美好,现实很骨感),撸起袖子就开始干。
我们公司的项目是多组件,多module嵌套的形式,各种module之间相互依赖,如果是单独的一个module还好办,但是多module的情况下,你就得考虑各种冲突等等问题了。关于多module打包成aar的形式,网上各路大神说的方法都是用的android-fat-aar,这个我也专门研究过了,是可以将多module打包成一个aar,但是它有很多问题:

  • 相同名字的资源文件,会覆盖掉
  • android-fat-aar只能打包gradle2.2之前的版本(现在大部分都3.0以上了),并且不能打包可运行的module,只能打包Android library和java library
  • 库里引用了第三方的库,主工程重新要引用aar中的第三方库
  • 合并AndroidManifest的时候,会有各种冲突。
    总结:如果你的各种module之间相互嵌套,那就最好别用,会有很多各种各样的问题,一大堆(我就是遇到过,光解决问题,就花了好长时间,傲娇的我,果断拒绝了)
    后面我采用了另一种方式,单个module,单个aar的模式,然后把这些aar都拷贝到新项目libs下引用,这样是可行的(这个要先说,避免走坑,亲身实践)。
    还有一点要说明的是:Jar包的形式跟aar的形式还是有些不一样的,aar是把资源文件和class文件一起打包。但是aar只支持Android Library,原来的项目是一个应用,所以你得把原来的项目改成一个Android Library。
    首先,在该应用的gradle下面,修改如下:


    image.png

    然后,去掉applicationId相关的,毕竟你是一个Android Library,哪来的applicationId呢?把gradle里面,跟应用相关的都可以去掉,比如你原来的项目用到了热修复Tinker(我们项目就用到了),也得注释掉,因为你的Tinker需要用到applicationId。
    处理完了gradle,接着就是AndroidManifest了,因为是作为module依赖,你也得去掉AndroidManifest中application标签的属性,没错,全去掉,还有记得把Activity的launcher也去掉(这个大家都明白),其他的就不用动了。
    最后一步就是application了,因为一个应用只能引用一个application(当然你可以写多个,但是在AndroidManifest中只引用一个),所以原来application中的东西,你得把它移植到新项目的application中,这些准备工作做完,其他module(也包括原来的项目module)的工作就做完了,现在是新项目的工作了,开干!!!

    当前面那些准备工作做完以后,重新编译,这些library,就会在他们的build->outputs中生成一个.aar的文件,并且你可以选择是debug.aar,还是release.aar,都可以,最好是用release.aar。还可以在AS右边gradle选择编译什么类型的 生成不同的aar 当然,还可以使用命令,看你自己选择了。打包完了以后,就把这些所有的aar,放到新项目的libs目录下
    接下来就是在新项目的gradle中引用了
repositories {
    flatDir {
        dirs 'libs'
    }
}
dependencies {
//然后就是依赖你所用的aar
compile(name:'your aar name', ext:'aar')
}

你以为这样就算完了?其实并没有,其他module引用到的第三方的库,也要重新添加到新项目中依赖,不然会报找不到的错误的,还有就是前面说的,把原来项目application里面的东西,copy到新项目中(一定要,切记)。
好了,走过了那么多弯,这算是我自己亲身实践总结下来的,比较靠谱的做法,特别是针对多module,相互嵌套依赖的形式,欢迎大家批评指正。

相关文章

  • 多module打包成aar的形式

    最近公司有个新项目,把原来的一个应用移植到另一个应用上,通过aar的形式。aar嘛,这也没多大事,成功编译,不就会...

  • Flutter 混合开发(Android)项目搭建

    前言 Flutter 作为跨平台,支持通过module的形式集成在现有的项目中,也可以通过打包成aar 在现有项目...

  • Android 多Moudle 合并打包aar

    需求 ​笔者公司最新有这样一个需求,将一个module打包成aar供其他公司的人使用,但这个module 依赖多个...

  • AndroidStudio 将module打包成Jar,aar

    真相:其实build项目完成后默认已经打好了两种包了; jar包的路径路径为 : 项目module路径/build...

  • 项目使用AAR打包遇到的坑

    关于项目为什么要打包成AAR这里就不详细说明,这里只说说打包AAR遇到的坑 整个项目打包成AAR需要把项目变成mo...

  • APP抽离AI Module及AAR导入的gradle配置

    场景①:Module化下的AAR导入的gradle配置,找不到AAR包 方案①: 1、在对应的Module下配置:...

  • aar文件找不到

    aar文件存在module:dss 主module中加入: dss的module中加入

  • Android Tips(6)

    1. 在引用的module中使用aar 导入test.aar包需要在引用module的build.gradle中加...

  • 保活分析

    MAX 保活分析可以引入module,和使用打包好的AAR形式。使用方法: 注意:如果targetSdk为31 需...

  • Flutter Module 打包aar

    Flutter Module 打包aar Flutter 版本1.17.1 Google 方式打包aar flut...

网友评论

      本文标题:多module打包成aar的形式

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