app终于要组件化了

441 阅读3分钟
  1. 从组件化的一无所知,到单独负责一个模块实现组件化,自己成长又要开始,祝自己收获多多,一路出坑

case 1. 先建一个组件,发现自己的图标跟别人的不一样

image.png

右下角是圆点的代表的是组件,可单独编译运行

右下角是柱状图的代表是library库

参考# Android组件化架构 —— 基础(一) - 组件化与集成化

case 2. Compiler An exception is encountered, [These no module name, at ‘build.

解决: 在base module 和在 other module中都要添加

android {
	defaultConfig {
		javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
	}
}
dependencies {
	api 'com.alibaba:arouter-api:1.5.2'
    kapt 'com.alibaba:arouter-compiler:1.5.2'
}

参考: kotlin/java混合开发接入ARouter遇到的问题Compiler An exception is encountered

case 3. ARouter there's no route matched解决方法

项目app模块可以调整登陆组件模块,但是组件模块不能跳转app模块,toast提示ARouter there's no route matched

我是在app模块的一个kotlin文件上添加的Route注解,组件模块跳转不过去,那么我就测一下app模块自己跳自己的页面吗?发现也不行。我想是不是因为是kotlin页面所以不能正常跳转啊,所以我就找了一个java页面写了一个路由试一下,发现可以。然后我在登陆模块去跳app模块发现也可以。

原来是Java页面可以跳转,kotlin页面不能跳转,真是一个坑,下一步就想着怎么样才能跳转kotlin页面吧

case 4

如果app工程的组件是project依赖,app调用组件的代码是可以直接调用的,跟调用app功能中的逻辑是一样的,组件调用app工程的页面是需要Arouter的,组件间的跳转也是需要Arouter的。

case 5

组件化的时候 尽量把引用依赖放在自己的module内,
本层要用的:
implementation
上层要用的:
api

当然依赖的方式很多,最常见的就是这两种

case 6 Android接入微信SDK之一:发起微信授权登录

重要的事情首先说!

包名、应用签名、app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功。

包名:就是在腾讯上申请的包名

参考Android接入微信SDK之一:发起微信授权登录

微信官方文档链接

case 7 Arouter子模块调用主模块

1 子模块中定义一个与主模块通信的接口 ISkill继承自IProvide

public interface ISkill extends IProvider {
    public void eat();
}

2 主模块定义一个ISkill实现类ISkillImpl,注意加上注解!

@Route(path = "/app/ISkillImpl")
public class ISkillImpl implements ISkill {

    @Override
    public void eat() {
        Log.i("TAG", "大王叫我来巡山!");
    }

    @Override
    public void init(Context context) {

    }
}

3 子模块通过ARouter获取这个ISkillImpl的实例化对象

ISkill impl=ARouter.getInstance().build("/app/ISkillImpl").navigation();
  impl.eat();

参考:# 利用ARouter实现组件间通信,解决子模块调用主模块问题(示例代码)

case 8 新建module后面的位置显示跟别的不一样

解决:新建module后,android主工程下的.gradle和.idea删除后,重新编译即可