您的位置:首页 > 移动开发 > Android开发

Android开发 利用AppJoint解决跨模块调用主工程类中的方法

2019-07-25 15:51 5236 查看

参考博客:https://juejin.im/post/5bcc95abe51d457ab729be8d
参考AppJoint 的 Github 主页:https://github.com/PrototypeZ/AppJoint

为了找这样的方法花了一两天的功夫,本来想找现成的直接用的,但是没有,最后就自己花心思研究了一下Github上的AppJoint,因为它里面用kotlin语言写了几个类,刚开始看到这个就跑了,因为感觉语言不对,看了也没用,最后实在没办法就认真看了一下,也写了个Demo测试了,转成我熟悉的Java类弄成功了,写此博客也是为了记录一下。

问题背景

在做项目的时候,公司有需求将其他模块的文字用语音读出来,但是语音模块集成在主工程里了,调用不到,我又不知道再怎么将语音模块拆分成单独的library模块,只好去找能调用主工程中方法的方法。
有如下模块:
app 模块是主工程模块, 而 module1 模块是 library 模块。如果 module1 模块想要调用 app 模块的功能,那么肯定需要存在一个接口,这个接口两个模块要都能访问到。所以这个接口存在的位置就只能是 app 模块和 module1 模块都依赖的公共模块。假设 router 为公共模块

配置AppJoint环境

  1. 在项目根目录的 build.gradle 文件中添加 AppJoint 插件依赖:
buildscript {
...
dependencies {
...
classpath 'io.github.prototypez:app-joint:1.6.1'
}
}
  1. router 模块添加 AppJoint 依赖,然后在 App 模块和 module1 模块中引入这个 router 模块:
dependencies {
...
api "io.github.prototypez:app-joint-core:1.6.1"
}

具体操作为第一步选中对应模块按快捷键 F4 如图:

第三步中选择 Module dependency 添加 router 模块后点 OK 。

  1. 在主 app 模块应用 AppJoint插件:
apply plugin: 'com.android.application'
apply plugin: 'app-joint'

问题解决

在公共模块 router 中创建一个接口:里面只写了一个方法(为了测试)

然后在 App 模块中写一个类去继承这个接口实现接口中的方法,这时候可以在方法中获取到其他类中的方法:

这是 MainActivity 中代码:

最后,我们可以在其他任何模块获得 AppService 接口的实例,调用里面的所有方法了:

AppService appService = AppJoint.service(AppService.class);

module1 模块中的调用:


就这样就是一个简单的演示了,更多的测试我也没继续研究,写得不好别喷 ~~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐