您的位置:首页 > 移动开发 > Android开发

[Android]多module合成单一module技巧

2016-07-27 20:26 609 查看
为何需要做会出现这样的需求呢?

我们当时开发的架构就是用多个module作为功能模块加载,所以就会单个项目出现多module的状态。

抽出sdk生成aar的时候,只能由一个module生成一个aar。

查看网上很多资料,最终在StackOverflow里查到只能多个module合并成单一module才能处理生成aar,不然就只能修改android编译的源码了。

但是我们工程业务是在持续开发中迭代的,我们没可能每次想更新一个sdk的时候都再做这种重复噶工作量。

那要如何处理这种多

没错,我们需要写一个脚本。

然后我们选择了写一个python的脚本。

说明一下我的工程架构

1.工程有一个主的工程client入口依赖于各个功能模块

2.工程功能module模块依赖于一个base的模块

3.base的module模块依赖于core和framework的模块。

如下图:



首先我们需要了解一下我们考虑的地方

1.如何生成一个总工程的AndroidMainfest呢?因为多个module,里面肯定有可能加载了很多四大组件的,那么都需要在各自的module注册的AndroidMainfest注册的。

2.假如java文件有依赖于R.文件,而java文件分别在不同的module里面,合并module,其原来R的索引就会不存在了

3.value里面的string color等文件会同名,如何处理呢?

4.build.gradle如何配置呢?

对于上面的问题解决的方案:

1.将本来工程编译成功后,在build\intermediates\mainifests\full里面有已经生成好的AndroidMainfest.xml。

这个文件有全部已经打包好四大组件。所以其实编译器是有能力将全部的module编译成单一module的,只是没有公开这样的设置

2.对于依赖的R.文件,工程最终还是要编译成client的app的,将全部的java文件有加入import R的依赖移除,再添加成client的R依赖

3.value里面的文件可以前部加入一个module的前缀(如string.xml,改为base_string.xml),aapt生成string里面的字符最好不要重复名称

4.build.gradle 需要手动整合全部module所要依赖的修改(例如分享模块,会需要依赖分享的库,图片模块需要加入图片库),然后才能实验编译

还需要总结一下我之后踩到的一些坑

1.因为python是现学现用的,可能很多技巧也还没接触到,例如shutil.copyfile,shutil.copytree,os.system("xcopy")是有很大的区别的,请先尝试一下这些方法的区别,我一般都是用cmd运行试验的。

2.Android中请确定资源的名称一定要是唯一的,例如drawable和layout,其他java文件等,请尽量名称不要重名。

3.因为每个module建立的时候都有一个的对应的app_name,可以将其删除,这样会避免冲突

4.移植的时候不需要将各个module里面的AndroidMainfest和build.gradle文件移到文件夹里面

5.移植的时候,请先移植client的module(原生成app的module),然后再移植base,core,framework等基础module,再去移植其他功能模块的module,然后再替换AndroidMainfest和build.gradle等文件

这些都是总结出来的一些经验,希望对各位有帮助吧,如果有疑问可以在之下留言。我收到会逐一回复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android