实现步骤
1、全局设置Gradle,每一个业务Module需要的版本都定义在这里方便后期维护多个Module版本号
ext {
// Sdk and tools
minSdkVersion = 16
targetSdkVersion = 26
compileSdkVersion = 26
buildToolsVersion = ‘26.0.2’
supportLibraryVersion = ‘26.1.0’
// App dependencies
aRouter = ‘1.2.2’
leakcanaryVersion = ‘1.3’
glideVersion = ‘3.7.0’
}
####每个业务Module编译依赖版本
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
2、模式切换
组件化后的每一个业务的module都可以是一个单独的APP(isModuleRun=false)
, release 包的时候各个业务module作为lib依赖,这里完全由一个变量控制,在根项目 gradle.properties
里面的 isModuleRun=true
。
isModuleRun状态不同,加载application和AndroidManifest都不一样,以此来区分是独立的APK还是lib,
实现方式如下
在build.grade
里面配置
if (isModuleRun.toBoolean()) {
apply plugin: ‘com.android.application’
} else {
apply plugin: ‘com.android.library’
}
##单Module运行需要配置
sourceSets {
main {
if (isModuleRun.toBoolean()) {
manifest.srcFile ‘src/main/debug/AndroidManifest.xml’
} else {
manifest.srcFile ‘src/main/AndroidManifest.xml’
java {
//全部Module一起编译的时候剔除debug目录
exclude ‘/debug/’
}
}
}
}
3、资源冲突
业务Module和BaseModule资源文件名称重复会产生冲突,解决方案在
每个 module 都有 app_name,为了不让资源名重名,在每个组件的 build.gradle 中增加 resourcePrefix “xxx_
强行检查资源名称前缀。
固定每个组件的资源前缀。但是 resourcePrefix 这个值只能限定 xml 里面的资源,并不能限定图片资源。
个人认为约定大于配置,团队内协定好规范,可以避免冲突。
4、组件通讯
组件通讯框架在github上有star最多的有ARouter和ActivityArouter,前者是个人项目,后者是阿里巴巴开源,权衡之下选择阿里的ARouter,
各业务Module之前不需要任何依赖可以通过路由跳转,完美解决业务之间耦合
使用方式如下。
if (BuildConfig.DEBUG) { // 这两行必须写在init之前,否则这些配置在init过程中将无效
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}
ARouter.init(this); // 尽可能早,推荐在Application中初始化
compile “com.alibaba:arouter-api:$rootProject.aRouter”
每个业务Module都需要添加注解
annotationProcessor ‘com.alibaba:arouter-compiler:1.1.3’
跳转方法
在目标Activity上添加path
@Route(path = ARouterManager.BModuleActivity)
public class BModuleActivity extends BaseActivity {
@Autowired
public String name;
@Autowired(name = “age”)
int age;
TextView txt;
@Override
protected int getLayoutId() {
return R.layout.b_module_layout;
}
@Override
protected void initView() {
txt = findViewById(R.id.txt);
//String name = getIntent().getStringExtra(“name”); 也可以这样接受参数
ARouter.getInstance().inject(this);
txt.setText(“name:” + name + “,age:” + age);
#开始跳转
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 2. 跳转并携带参数
ARouter.getInstance().build(ARouterManager.BModuleActivity)
.withString(“name”, “888”)
.withInt(“age”, 11)
.navigation();
}
});
/**
- 路由管理类
*/
public final class ARouterManager {
public static final String AFragment = “/amodule/AFragment”;
public static final String BFragment = “/bmodule/BFragment”;
public static final String CFragment = “/cmodule/CFragment”;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
如何做好面试突击,规划学习方向?
面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。
学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。
同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。
[外链图片转存中…(img-NGWHm5Y0-1711920587086)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。