一、背景:有时候我们做了两个项目,各自有各自的功能,各自依赖了一些开源的库,如网络或者数据库的开源库,现在项目a要用到项目b的功能,总不能直接重新敲一遍项目b的代码吧,在androidstudio中,我们可以直接将另一个项目导入作为module,然后将此module add 为lib,下面看看操作:
(1) 添加module
(2) 选择你要的项目导入进来
(3) 导入进来以后,可能项目原先有以app命名的module,改成其他名字,不要和现有项目的module重名就好了
(4)加载后,选择File->Project Structure 开始添加依赖,选择module dependency,再选择刚导入进来的module作为依赖。
二、
接下来就是一大堆bug科普时间:
(1)'Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs'
这个是主module与依赖module的androidManifest.xml合并时有些相同属性:android:name、android:icon等引起的冲突
解决:此时看报错的具体信息(点击黄色框按钮可以看到黄框具体红色报错信息)
可以看到是我的主项目module:app和依赖项目module:myapplication两个androidManifest.xml出现相同属性不同赋值的冲突。
修改的话是在主项目module的androidManifest.xml文件中添加如下
<manifest 节点添加:xmlns:tools="http://schemas.android.com/tools"
<application 节点添加:tools:replace="android:icon,android:theme,android:allowBackup,android:name"
(此处看你冲突的是哪些属性,就加哪些属性)
(2)修改依赖module的build.gradle文件(因为不是作为一个app,所以要将applicationId删掉)
(3)运行主项目app是会发现有两个图标,原因是依赖项目module的默认主启动Activity造成的,所以只需修改依赖项目module的androidManifest.xml,将<intent-filter>节点删除
(4)"No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse"可能会出现类似这种找不到某种资源的错误。
注意到上面是api24版本下找不到该资源,这个主要是你的compileSdkVersion和targetSdkVersion的设置问题,检查一下,发现我设的是23,此时我们将其改成24,编译运行解决问题。如果你的sdk没有下载某个api版本,可以先联网下载,此处下载不用担心被和谐。
还有一个需要注意的问题是,主项目module和依赖项目module的build.gadle文件中,
comileSdkVersion、buildToolsVersion、minSdkVerion、targetSdkVersion这些版本号两个build.gradle文件最好设置成一样的,因为是在同一项目、同一环境下运行了,所以设置成一样的。