Android组件化开发

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

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

本帖参考了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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值