Android Studio常见多团队模式
1、Lib文件加载本地aar文件:刚接触android的时候基本都是通过这种方式来集成第三方包的; 2、module加载Library,本地库; 3、maven等远程包,方便版本控制等;
以上三种方式都是常见的依赖第三方模式,但是在多部门多团队多版本协作的时候会显得有些凌乱; 比如某个业务模块因为一些原因,这期迭代准备不上了,代码要是在主工程中,则回滚代码将是噩梦,要么该业务模块通过aar包等方式接入,但是每次主工程运行都要重新加载aar,非常麻烦;
多repository协作开发
目的是单业务部门单仓库,以本地主工程倒入本地其他业务仓库的方式协作开发; 所有仓库在同一个级别文件夹: ----->主工程仓库 ----->A业务仓库 ----->B业务仓库 因为仓库都是单独维护的,所以可以随意切换主工程中的A B业务版本; 下面介绍如何将A业务导入主仓库; 1、A仓库正常设置Library模块: 2、主仓库的配置
- 在主工程根目录的settings.gradle文件中设置
// 引入外部工程入口: include ‘:testlibrary’ project(’:testlibrary’).projectDir = new File(rootDir.parent + ‘/TestDependency/testlibrary’)
2)在app module的build.gradle文件中设置dependencies
//引入外部工程 implementation project(path: ‘:testlibrary’)
3)主工程引入A工程中的print方法; 上面是子工程被引入主工程,但是子工程是作为业务方仓库来设计的,不仅仅需要被导入主工程,还需要能够依赖主工程的相关数据,下面设计子工程如何依赖主工程数据
3、子工程设置如下代码
provider
public interface IAccountProvider {
String getAccessToken();
String getUserId();
void goLogin(Activity activity, TestCallback callback);
}
设置config
public final class TestSdkConfig {
private static final TestSdkConfig sdkConfig = new TestSdkConfig();
private IAccountProvider accountProvider;
private TestSdkConfig() {
}
public static TestSdkConfig getInstance() {
return sdkConfig;
}
public void init(Context context) {
}
public void setAccountProvider(IAccountProvider accountProvider) {
this.accountProvider = accountProvider;
}
public IAccountProvider getAccountProvider() {
return accountProvider;
}
}
4、主工程添加
package com.wwl.xui.td;
import android.app.Activity;
import android.content.Intent;
import com.wwl.testlibrary.TestCallback;
import com.wwl.testlibrary.config.IAccountProvider;
import com.wwl.xui.ui.login.LoginActivity;
public class AccountProvider implements IAccountProvider {
@Override
public String getAccessToken() {
return "Access Token From Main Project";
}
@Override
public String getUserId() {
return "User Id From Main Project";
}
@Override
public void goLogin(Activity activity, TestCallback callback) {
callback.success("主工程执行callback:Success");
Intent intent = new Intent(activity, LoginActivity.class);
activity.startActivity(intent);
}
}
记得在Application中初始化:
package com.wwl.xui;
import android.app.Application;
import com.wwl.testlibrary.config.TestSdkConfig;
import com.wwl.xui.td.AccountProvider;
public class XUiApp extends Application {
@Override
public void onCreate() {
super.onCreate();
TestSdkConfig.getInstance().init(this);
TestSdkConfig.getInstance().setAccountProvider(new AccountProvider());
}
}
好了上面就是核心代码了; 只是将TestDependency工程开放了内容不多,有需要的可以自行查看,有问题欢迎留言讨论; 传送门
后面有时间了会陆续将这几年项目中遇到比较好的工程设计模式分享出来,内容包括小程序多业务部门开发、vue多语言多主题组件化开发、Flutter多国家地区多个应用共同开发(目前公司正在使用,不知道分享出来是否涉及侵权,所以只整理常见的,网上已经有的模式,另外只提供思路和文章中分享出来的demo代码片段,不提供repository); 好久没敲java果然今天手生了,以后会多加练习,后面找时间把这些年android的一些知识点和一些新内容分享给大家,加油;
天黑了,上传下demo代码,吃饭去了,另外昨天七夕,因疫情原因没办法回去陪老婆,这里像老婆道歉(虽然她看不到这篇博客),以后要多陪陪家人。
|