AS(AndroidStudio)在导入一个外部的本地module时,AS会复制一份module到当前项目目录下。在多个项目都引用同一个module时,并且该module正处于开发维护阶段需要频繁改动时,就要去每个项目中修改module的代码,同步起来会非常麻烦。

有这样几种方法可以解决这个问题:

一、将引用的module打成jar或aar,每个项目直接引用这个jar或aar。但如果引用该module的项目很多,这种方式就不太好了。

二、采用maven 仓库的方式。将所有的module都上传到maven仓库,然后在各个项目中进行引用。但如果该library需要频繁开发和修改,种方式也不太好。

三、将module作为一个项目工程使用。新建一个工程并将所有的library都放入此工程中,在其他引用该module的工程中引入该新建的工程。这和eclipse引用Library的结构很像,而且可以放入多个module。

操作步骤:

1.新建一个项目命名为BaseLibrary,并新建一个module(类型为Android Library)命名为base。

Android Studio多项目引用同一个module

2.新建一个项目命名为Test(与MyLibrary工程在同一目录下),并在根目录下的settings.gradle文件添加

include ':BaseLibrary'

project(':BaseLibrary').projectDir = new File('../BaseLibrary')

include ':BaseLibrary:base'

如图:

Android Studio多项目引用同一个module

3.配置完后Sync Now下,然后Test项目中就会新增BaseLibrary项目。

Android Studio多项目引用同一个module

4.在Test中要使用library的module中的build.gradle文件中添加引用:

implementation project(':BaseLibrary:base')

现在就可以使用BaseLibrary项目了。修改BaseLibrary项目,其他引用的项目也会自动同步。

 

后记:

1.Test项目虽然引用了BaseLibrary:base,但是却不能使用其所包含的第三方jar。

解决方法:

        修改BaseLibrary:base中的第三方jar依赖方式:

        将implementation改为api

        将testImplementation改为testApi

        将androidTestImplementation改为androidTestApi

如图:

Android Studio多项目引用同一个module

2.当BaseLibrary项目中又增加了一个module命名为t_module,这个t_module引用了base之后,Test项目引用了t_module报错:

Android Studio多项目引用同一个module

解决方法:

修改BaseLibrary:t_module的build.gradle

        implementation project(':base')

        改为

        implementation project(project.path.replace(project.name,'') +':base')

Android Studio多项目引用同一个module

重新Sync Now即可。

demo链接

相关文章: