android多aar合并

版权声明:转载请邮件联系我([email protected]),以取得授权,谢谢! https://blog.csdn.net/yeshennet/article/details/85148084

前文说过,最近在做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资源冲突。

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

猜你喜欢

转载自blog.csdn.net/yeshennet/article/details/85148084
今日推荐