需求
有两个项目A、B。两个项目相互独立,功能业务逻辑均不同。现在需要实现将两个项目整合成一个,打包出一个apk文件,安装也是只安装一个App的过程,展示上也是只展示为主项目A的App,通过主项目A的某个按钮跳转,启动项目B,然后执行项目B的业务逻辑。直到B项目退出,又回到A项目。

方案

1.将B项目设置成Library类型的项目。B项目右键–Buidle Path–Android 勾选 Is Library。

%title插图%num
2.项目A中将B项目加入进来,也是A项目右键–Buidle Path–Android界面中。

%title插图%num
3.由于项目B设置成了Is Library后导入到A项目中,但是项目的配置文件却无法跟着导入进去,所以需要将B项目的AndroidManifest.xml的配置信息统一整合到A项目的AndroidManifest中。将B项目的权限要求、Server、Activity的申明都整合到A项目的配置文件中。对于在B中申明的形式如“android:name=”.NotificationService””需要改为带上B项目的包命“android:name=”com.drainemer.server.NotificationService””。

 

总结:配置到该程度即已经完成了。在实现过程中,会出现很多问题与冲突。需要一一解决后即可实现项目的整合。

 

错误一:项目报存在两个V4包或者V7包错误,这是两个整合的项目都有相同的V4或者V7包,删除一份即可。

错误二:B中有使用R.id,当A工程引用了B工程时会在A工程的gen目录中生成B的R文件,里面也包含了A的R文件中的内容,但是当B的id定义在layout文件中时需要注意layout的名称,如果A下有个main.xml的layout,B下也有个main.xml的layout,那么A编译时就会将B的main.xml中的所有id忽略,导致混淆报错提示找不到id。所有问题出在,被引用的项目和当前项目之间的资源冲突。假如当前项目存在与被引用项目相同的资源(除了layout外,还包括图片,styles等等)就会默认使用当前项目的资源,完全忽略被引用项目的资源。