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。
2.新建一个项目命名为Test(与MyLibrary工程在同一目录下),并在根目录下的settings.gradle文件添加
include ':BaseLibrary'
project(':BaseLibrary').projectDir = new File('../BaseLibrary')
include ':BaseLibrary:base'
如图:
3.配置完后Sync Now下,然后Test项目中就会新增BaseLibrary项目。
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
如图:
2.当BaseLibrary项目中又增加了一个module命名为t_module,这个t_module引用了base之后,Test项目引用了t_module报错:
解决方法:
修改BaseLibrary:t_module的build.gradle
implementation project(':base')
改为
implementation project(project.path.replace(project.name,'') +':base')
重新Sync Now即可。
demo链接