Day1 calces自动组件化+ARouter路由框架

一.calces组件化

1.calces组件化介绍

  1. 官网
    https://github.com/Tangpj/calces-gradle-plugin
  2. 什么是组件化
    就是将一个App分成多个模块,每个模块都是一个组件(Module),开发过程中我们可以让这些组件相互依赖,或者单独调试部分组件等,但是最终发布的时候就是将这些组件合并成统一的Apk。
  3. 为什么要组件化
    随着产品的迭代,业务越来越复杂,随之带来的是项目结构复杂度极度增加,此时就会有如下几个问题:

1、业务变化太快,单一的工程业务模块耦合度太高,牵一发动全身
2、对工程作任何修改都需要编译整个工程
3、功能测试和系统测试每次都需要进行
4、团队协作开发存在很多冲突,不得不花费时间和精力进行沟通,影响效率
5、不能灵活的对业务模块进行配置和组装.

2.如何实现calces自动组件化:

在这里插入图片描述

(1)项目gradle:

注意:必须放在buildscript和allprojects的中间位置,不然报错

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.2'
        
    }
}
/*****************************************/
plugins{
    id "calces.appconfig" version "3.3.0-alpha01"
}

appConfig {
    debugEnable false  /*是否能调试*/
    apps {
        app {
            applicationName ".App" /**可选*/
            mainActivity ".MainActivity"
            modules ':pay',
                    ':sao',
                    ':lib_core'
        }
    }

    modules {
        pay {
            applicationId "com.bawei.pay"
            mainActivity ".MainActivity"
            isRunAlone true
            name ":pay"
        }

        sao {
            applicationId "com.bawei.sao"
            mainActivity ".MainActivity"
            isRunAlone true
            name ":sao"
        }
        lib_core {
            applicationId "com.bawei.lib_core"
            mainActivity ".MainActivity"
            isRunAlone true
            name ":lib_core"
        }
    }
}
/*****************************************/

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

(2)app主moudle的gradle:

apply plugin: 'calces.modules'

在这里插入图片描述

(3)其他moudle的gradle:

apply plugin: 'calces.modules'

在这里插入图片描述

(4)app moudle配置App:

在这里插入图片描述

二.ARouter路由框架

1.ARouter介绍

  1. 官网:https://github.com/alibaba/ARouter/blob/master/README_CN.md
  2. 作用:阿里巴巴自研路由框架,主要解决组件间、模块间的 界面跳转 问题
  3. 应用:

(1)从外部URL映射到内部页面,以及参数传递与解析
(2)跨模块页面跳转,模块间解耦
(3)拦截跳转过程,处理登陆、埋点等逻辑
(4)跨模块API调用,通过控制反转来做组件解耦

2.配置

(1)每个gradle配置:

在这里插入图片描述

  • defaultConfig 里:
    javaCompileOptions {
    annotationProcessorOptions {
    arguments = [AROUTER_MODULE_NAME: project.getName()]
    }
    }
  • 依赖:
    implementation (‘com.alibaba:arouter-api:1.5.2’) //ARouter依赖 //版本要改成最新版本
    annotationProcessor ‘com.alibaba:arouter-compiler:1.5.2’ //ARouter依赖

(2)application中初始化sdk

public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("ytx", "onCreate: ");
        ARouter.openDebug();
        ARouter.openLog();
        ARouter.init(this);
    }
}

3.路由跳转

(1)组件间跳转:app—>pay

app:

//app页面跳转到pay页面
    public void pay(View view) {
        ARouter.getInstance()
                .build("/pay/MainActivity")
                .navigation();
    }

pay:
1.注意布局文件名不能相同
2.注意路径一般和moudle名/activity名

@Route(path = "/pay/MainActivity")
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay);
       
        }
    }
}

(2)组件间跳转传值:app—>pay

app:

//app页面跳转到pay页面
    public void pay(View view) {
        ARouter.getInstance()
                .build("/pay/MainActivity")
                .withString("name","yaotianxue")
                .navigation();
    }

pay:

@Route(path = "/pay/MainActivity")
public class MainActivity extends AppCompatActivity {
	@Autowired
    String name;//注意不能是私有的 名字要一致
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay);
        ARouter.getInstance().inject(this);//传值的时候必须注册
         Toast.makeText(this, ""+name, Toast.LENGTH_SHORT).show();
        
        }
    }
}

(3)组件间跳转传对象

app:

//app页面跳转到pay页面
    public void pay(View view) {
        ARouter.getInstance()
                .build("/pay/MainActivity")
                 .withObject("good",new Good("手机",45.6f))
                .navigation();
    }

pay:

@Route(path = "/pay/MainActivity")
public class MainActivity extends AppCompatActivity {
	 @Autowired
    Good good;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pay);
        ARouter.getInstance().inject(this);//传值的时候必须注册
        Toast.makeText(this, ""+good, Toast.LENGTH_SHORT).show();
        
        }
    }
}
  • 传对象的时候注意创建JsonBean文件:
@Route(path = "/app/json")
public class JsonBean implements SerializationService {
    @Override
    public <T> T json2Object(String input, Class<T> clazz) {
        return new Gson().fromJson(input,clazz);
    }

    @Override
    public String object2Json(Object instance) {
        return new Gson().toJson(instance);
    }

    @Override
    public <T> T parseObject(String input, Type clazz) {
        return new Gson().fromJson(input,clazz);
    }

    @Override
    public void init(Context context) {

    }
}

(2)用路由动态添加fragment

  • 创建fragment
@Route(path = "/pay/fragment/BlankFragment")
public class BlankFragment extends Fragment {
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank, container, false);
    }
}

  • 使用路由查找
 public void btn3(View view) {
        Fragment fragment = (Fragment) ARouter.getInstance().build("/pay/fragment/BlankFragment").navigation();
       getSupportFragmentManager().beginTransaction().add(R.id.ll,fragment).commit();

三.calces和arouter结合使用的注意事项

  • 各个moudle之间的布局文件不能重名
  • 自动组件化会自动生成一个清单文件,创建activity的时候需要再原来的清单中手动添加fragment
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值