概述
最近公司需要将原来的app和现在的app合并(主要是为了用原来的功能),先说一下思路,分成一个主module和一个附module,其实就是一个app添加一个library,下面总结一下遇到的错。
将附module添加为library
1.首先在主module中通过File-->New-->Import Module引入附工程的module
2.打开附module的build.gradle修改apply plugin: 'com.android.application'为apply plugin: 'com.android.library'
这样就将你的附工程油app改为了library了,否则回报这个错
各种报错解决
1.如果你项目用到了Butterknife,或者onClick用到了switch(v.getId())的获取控件那么都会报错,因为附module的R.java里面的id都是变量(没用final修饰),而主module的R.java的id是常量(用final修饰),这是因为当附module添加到主moudle时两份R.java文件里面的id可能冲突,这时会修改附module的R.java文件,所以不能用final修饰。而注解和switch都只能用常量,switch还是乖乖改成if else吧。Butterknife提供了解决办法,在你工程的build.gradle中添加如下依赖,用8.8.1的版本我这里报错,可能有冲突
然后在附module中添加
这个插件是用来生成R2.java文件的,R2.java文件是copy的R.java文件的,但是多了final修饰(Butterknife最终findViewById时还是通过R.java文件找的)。
详情https://github.com/JakeWharton/butterknife
2.接下来你可能出现依赖冲突
,解决办法,将依赖统一管理起来,在工程的build.gradle做统一依赖配置
这样在各个module引用就没问题了
3.运行时又可能出现layout重名冲突,由于两个module都有同名的layout.xml文件,导致id错乱,只需要把附module的id对应的layout文件重命名就好了
到这就差不多了