继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从零开始搭建Android组件化框架

Qyouu
关注TA
已关注
手记 449
粉丝 87
获赞 413
赖
    api rootProject.ext.dependencies["appcompat_v7"]
    api rootProject.ext.dependencies["constraint_layout"]
    api rootProject.ext.dependencies["cardview-v7"]
    api rootProject.ext.dependencies["design"]
    testApi rootProject.ext.dependencies["junit"]
    androidTestApi rootProject.ext.dependencies["runner"]
    androidTestApi rootProject.ext.dependencies["espresso_core"]
}
6 组件之间调用和通信

在组件化开发的时候,组件之间是没有依赖关系,我们不能在使用显示调用来跳转页面了,因为我们组件化的目的之一就是解决模块间的强依赖问题,假如现在要从A业务组件跳转到业务B组件,并且要携带参数跳转,这时候就需要引入“路由”的概念了.目前项目使用了阿里巴巴的Arouter路由,有兴趣的童鞋也可以去了解其他的"路由"框架,比如开源库的ActivityRouter, LiteRouter 路由框架 , AndRouter 路由框架 等.

阿里巴巴的Arouter我就不在这里介绍了,请点击了解使用方式: https://blog.csdn.net/zhaoyanjun6/article/details/76165252

7 组件化中的butterKnife的坑
  • 特别注意不要使用最新的8.8.1版本,而应该使用8.4.0 ,因为最新的版本好像不兼容组件化模式.按照8.4.0版本的方式依赖.
    第一步:
    在项目的buid.gradle中添加这两个依赖.

buildscript {
  dependencies {
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
   classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
  }
}

第二步:
在module的build.gredle 文件中的dependencies标签中添加

 annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0',
 implementation 'com.jakewharton:butterknife:8.4.0',

第三步:
在module的build.gredle 文件中添加

apply plugin: 'com.jakewharton.butterknife'

这三步就完成了butterKnife的接入了,如果你的Android studio 3.x 还没安装butterKnife的插件的,就先安装一下插件.

  • 组件化中的butterKnife的使用

1、用R2代替R findviewid

  @BindView(R2.id.view_pager)
    ViewPager mViewPager;
    @BindView(R2.id.bottom_navigation_view)
    BottomNavigationView mBottomNavigationView;
    @BindView(R2.id.nav_view)
    NavigationView mNavView;

每次都要syn一下,才会生效的.

2、在click方法中同样使用R2,但是找id的时候使用R。

@OnClick({R2.id.textView, R2.id.button1})    public void onViewClicked(View view) {        switch (view.getId()) {            case R.id.textView:                break;            case R.id.button1:                break;
        }
    }

3、特别注意library中switch-case的使用,在library中是不能使用switch- case 找id的,解决方法就是用if-else代替。

@OnClick({R2.id.textView, R2.id.button1, R2.id.button2})    public void onViewClicked(View view) {        int i = view.getId();        if (i == R.id.textView) {
        
        } else if (i == R.id.button1) {

        } else if (i == R.id.button2) {

        }

就这样通过几个简单的步骤基本就完成了组件化的配置了. 具体可以运行项目查看.

组件化项目的混淆方案

组件化项目的Java代码混淆方案采用在集成模式下集中在app壳工程中混淆,各个业务组件不配置混淆文件。集成开发模式下在app壳工程中build.gradle文件的release构建类型中开启混淆属性,其他buildTypes配置方案跟普通项目保持一致,Java混淆配置文件也放置在app壳工程中,各个业务组件的混淆配置规则都应该在app壳工程中的混淆配置文件中添加和修改。

之所以不采用在每个业务组件中开启混淆的方案,是因为 组件在集成模式下都被 Gradle 构建成了 release 类型的arr包,一旦业务组件的代码被混淆,而这时候代码中又出现了bug,将很难根据日志找出导致bug的原因;另外每个业务组件中都保留一份混淆配置文件非常不便于修改和管理,这也是不推荐在业务组件的 build.gradle 文件中配置 buildTypes (构建类型)的原因。

四,知识点汇总

1) Retrofit2 的封装

2) Greendao 的使用

...



该demo会持续优化更新,把知识点及工具类都汇总于该demo中,便于学习及日后查找.

最后贴出Android组件化Demo地址:https://github.com/tome34/frameDemoMo2

** 如果你觉得这篇文章对你有帮助或启发,请点下关注,谢谢 _ **


感谢以下文章提供的帮助:

1, https://www.jianshu.com/p/8b8a550246bd
2, https://www.jianshu.com/p/f671dd76868f
3, https://blog.csdn.net/guiying712/article/details/55213884
4, https://mp.weixin.qq.com/s/8PRbtmr2TNBH1MkqdFNiyg



作者:tome869535144
链接:https://www.jianshu.com/p/ba32488f9555


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP