android多aar合并

前文说过,最近在做SDK的工作。遇到一个问题,我拆分了本地的项目,分离出两个android module出来,期望打包是只打出一个AAR包出来的。但是实际上,打出来的包却缺手缺脚。

这里的问题就是,有多个本地的aar项目应该怎么合并成一个aar?

这个问题许多人遇到过,查了一下,有一个fat-aar的概念。有许多开源的实现。如果你需要的话:

上面最成熟的应该是Mobbeel的插件,看起来也专业一点。

build.gradle

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "com.mobbeel.plugin:fat-aar:2.0.3"
  }
}


xxxlibrary/build.gradle

apply plugin: "com.mobbeel.plugin"
dependencies {
    api "com.mobbeel:my-lib:1.0.0"  // <- Embed external dependency from any repository
    api project(':My-lib-module')   // <- Embed internal dependency on workspace

    ...
}

aarPlugin {
    includeAllInnerDependencies true  // It's false for default
}

但是这个实现有BUG,AndroidMainfest的资源没有合并进去。困扰了一个上午,我以为是我自己的打开方式不对,也找了其他类似的gradle插件去试试,结果都一样。就是没按照我的期望去合并。

我期望的是什么效果呢?

  1. jvm(class)代码全部合并到classes.jar
  2. android AndroidMainfest能自动合并

回到问题本身,gradle打包是不是完全不能满足要求呢?

不是的。有个关键的方法 minifyEnabled

android{
	buildTypes{
		release {
			minifyEnabled true
		}
	}
}

输出的aar包时,jar是被自动合并进classses.jar。

最后我是这样解决的(用了python做了一点搬运工作)

  1. 编译模块A,解开模块A,获得其中的classes.jar
  2. 把classes.jar放到模块B中的libs中。复制模块A中的AndroidMainfest中内容到模块B
  3. 编译模块B,输出目标aar
  4. 删除模块B中的classes.jar,回退AndroidMainfest的修改

再问一个问题,直接把模块A的aar包放到模块B的libs中作为应用来编译是否可行?

可以的,打包出来的classes.jar包含了模块A的aar。android-studio能解开依赖,也可以工作。但是在eclipse中报错,报AndroidMainfest资源冲突。

这里就不放具体实现代码了。:)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值