Android组件化开发

mac2022-06-30  25

公司项目越来越大,编译速度也是越来越慢,顺带公司配置的电脑还不咋地,所以,每次与运行调试,你们懂的,就想着,怎么去弄弄这个东西,最后翻到了组件化这种方式,简单了解一下,可以解决我当前的困境,特在此开一贴,记录自己的学习历程

首先,我们来看看普通的项目和组件化项目的区别

本帖参考了code小生的这篇文章,侵删:

https://mp.weixin.qq.com/s/PEIOXtrkK5qvxn1WggiKkg

 

为了确保老哥能看下去,文章末尾有项目的git地址哦!

 

普通项目:

通常情况下,都会有一个colibrary,里面放着项目中常用的工具类,自定义UI,这个是可以一个项目一个项目传承下去的(很遗憾,我公司的项目并没有),还有一个Application,也就是我们书写业务代码的地方,这样怎么说呢,不管你分层的再好,总会出现这样一个问题,举个栗子:由于业务需要,我们引入了一个第三方Api,放到了build.grade 文件中,需要经常修改调试,好了,现在我们写好了代码,想调试一下,点吧,你会发现,编译的很慢,我想或许我们可以把这一部分单独独立出来,每次对这部分做了修改,单独编译这一部分,这样讲大大节省我们的时间。

组件化项目:

那组件化项目是什么样的呢,我们先来看一下结构

 

 

我们讲拥有这样的一个目录结构commonlib,app (主业务代码),还有我们需要单独独立出来的test model

 

先来看一下配置吧,思路是这样的,

1,当我们需要将test model 作为library编译进来的时候,我们将其引入进来,当我们不需要编译的时候,就不引入,因此我们需要一个Boolean类型的值,来作为这一个开关,我们把这个开关写在项目的  gradle.properties文件中,像这样:

 

2,我们在app的build.grade中这样配置,需要修改的地方有两个,这里

还有这里:

3,在我们的test model中,需要修改的地方有三个,像这样,首先,当我们需要引入test model的时候,将model的apply 设置为library,不需要的时候,设置为application,同时,为其设定一个 applicationId

这样,我们的配置,也就大功告成了。那么在不同的model之间,怎么进行通信呢?我们选择 

ARouter(https://github.com/alibaba/ARouter)

 这个框架,引入方式:

implementation 'com.alibaba:arouter-api:1.3.1' annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'

 在app中的build.grade 和每一个model中都需要引入

我们在Application中,对其进行初始化:

public class App extends Application { private boolean debug=true; @Override public void onCreate() { super.onCreate(); initARouter(); } private void initARouter() { if (debug) { // 这两行必须写在init之前,否则这些配置在init过程中将无效 ARouter.openLog(); // 打印日志 ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险) } ARouter.init(this); // 尽可能早,推荐在Application中初始化 } }

  

在app中进行数据发送和跳转:在build中输入要跳转的路径

public class MainActivity extends AppCompatActivity { private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = findViewById(R.id.gogogo); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ARouter.getInstance(). build("/test_library/test") .withString("key1", "这是从app module 传来的参数") .navigation(); } }); } }

在test model中进行数据接收:

@Route(path = "/test_library/test") public class TestActivity extends AppCompatActivity { @Autowired public String key1; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); ARouter.getInstance().inject(this); button = findViewById(R.id.chat_btn); button.setText(key1 + ""); } }

  在test model中,对接受信息的TestActivity 使用 @Route 进行注解,

@Route(path = "/test_library/test")

  我们在TestActivity 中接收信息,我们使用注解 

@Autowired public String key1;

  来接收数据,此注解会自动帮我们将传递过来的数据,解析到key1中

这样,一个最基础的组件化项目就搭建完成了,不得不提的是,笔者在此方面也是新手,在使用 ARouter 的时候并不那么熟练,接下来,笔者也将深入学习 ARouter 框架,有不对的地方,还望指正。

git地址

https://github.com/2271115220/Component

  

 

转载于:https://www.cnblogs.com/zhdsky/p/10163680.html

最新回复(0)