导入模块的主要流程:
一.在主工程中,点击File -> New -> Import Module。导入的目录应该是模块工程目录
里面的app文件夹。
二.修改模块工程的build.gradle文件:
1.修改“com.android.application”为“com.android.library”;
2.删除“applicationId”这行。
三.修改主工程的依赖。
1.打开工程结构对话框,选择app Module,在右侧点击依赖标签;
2.找到加号并点击,从弹出菜单中选择“3 module dependencies”;
3.选择需要添加的模块。
导入工作基本完成。
以下是遇到的问题集:
一.manifest错误。由于模块不再是app,即作如下修改:
<application>
application没有任何的属性。
在模块manifests文件中,删除与主工程的manifest文件中相同的标签。例如:所需的权限,百度,友盟的key等等。
二.普通的jar包依赖冲突。可以使用exclude实现。eg:
compile(project(':qianwanli')) {
exclude group: 'com.squareup.okhttp'
}或者
compile(project(':qianwanli')) {
exclude module: 'okhttp'
}
三.特殊的jar包依赖冲突。例如:百度定位SDK,由于不知道group,module是什么,试了很多都没有成功。
error信息:com.baidu.location.a冲突。
最后成功的方法:把百度SDK,单独新建成一个同等的module,且导入工程。然后各自依赖compile project(':BaiduLocSDK')。BaiduLocSDK是我的模块名称。
这样,再也没有百度SDK的冲突。
四.针对相同的so库文件,直接保留主工程里面的so库文件,删除子模块里面相同的so文件。
五.运行错误:找不到id错误,或者inflate构建错误。由于编译后模块中的资源和主工程的资源是合并在一起的,为了避免重名问题,需要对模块中资源进行重命名。
- 确保模块之间的res资源文件的文件名不要有相同的,否则运行exception。例如:string,layotu布局文件。若有相同的,建议重命名子模块的文件名。