| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 广告变现模块化实现 -> 正文阅读 |
|
[移动开发]Android 广告变现模块化实现 |
Android 模块化完整方案实现1. 模块化实现(module+router)本套模块化方案实现来源于公司的业务需求,因为公司业务太多,代码越来越臃肿,越来越难维护,为了提升开发效率,减低代码的维护成本,所以采取了模块化开发方案。 2. 本套模块化方案实现特点
3. 项目代码主体架构设计!](https://img-blog.csdnimg.cn/884c8ea5cf344c5a86de217a563a97df.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqx5LqG6IS4,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
4. 代码实现4.1 module的apllication实现
4.1.1 首先gradle配置如下配置
这样,在开发时,是一个application,在发布时,是一个library。处于debug状态时,通过 ./gradlew :moduleuser:assemble(mac)命令即可编译打包。 4.1.2 首先gradle配置如下配置
ApplicationService放在moduleBase里面, 无论是主App的Application还是module的application,都要实现ApplicationService接口。 4.1.3 在moduleshop中创建ShopDebugApplication,ShopReleaseApplication和ShopApplication,如图所示:
为什么需要创建三个Application? 其实代码真正调用的是 ShopApplication,在ShopApplication里面,根据debug或者release状态,去调用ShopDebugApplication或者ShopReleaseApplication的方法,这样就能保证业务层代码对application方法调用完全一致。代码如下:
ShopDebugApplication是debug调试状态下的Application,ShopReleaseApplication是发布状态的Application。在loadModuleApplicationService方法中,可以初始化一些第三方SDK。 ShopDebugApplication的getApplication() 返回自身实例。ShopReleaseApplication的getApplication()则通过反射拿到主App的Applicattion。 4.1.4 因为Application需要在library和application之间切换,所以需要配置两套AndroidManifest.xmlgradle配置如下:
4.2 module之间跳转4.2.1 router实现通常来讲,module之间可以URL Scheme隐式intent实现跳转,不过这种方式扩展性太差,网上也有很多开源的router框架,比如ARouter,考虑到ARouter相对来说比较重,并且项目需要添加一些更加灵活的功能,比如路由引导模块,大容量数据传递之类的功能,所以就自己实现了一个router模块。 router实现原理主要是通过拿到需要启动Activity的信息,组装intent再跳转。这里有两种实现方式,编译时注解自动生成路由表和动态注册路由表实现。 动态态注册路由表实现 主要是通过注册activity路由表,启动时,通过路由表拿到待启动的activity的class,组装一个intent,实现跳转 A. 首先在Application或者启动的activity中注册
B. 简单的启动如下
编译时注解路由实现 首先自定义编译时注解:@RegisterRouter 1.得到@RegisterRouter注解,并解析注解并获取需要的module和path
路由引导模块实现 这是一个需求性很强烈的功能,主要是方便module之间的调用。比如说同事A定义了一个module A,里面又定义了很多Activity,每个Activty启动时传入的参数又不一样,同事B调用module A时的某个Activity时,在缺乏完整详细文档的情况下,完全无从下手,为了方便module之间的跳转调用,所以实现了一个路由引导模块,能够自动生成module A所有的对其它module公开的调用方法,使用举例如下: 在moduleshop的ReceiveParamActivity中定义了以下两个带有不同参数的启动方法,并声明注解 @RegisterLaunch
声明注解 @RegisterLaunch后,在Builder#main中,执行
在指定的路径下会自动生成以下RouterTable$$Moduleshop类,这个类中,有moduleshop所有的调用方法
module之间大容量数据传递 Activity之间传递数据通常是使用Bundle,但是Bundle传递数据时是有大小限制的。主要是通过注解@DataParam,通过解析注解将大容量对象保存到一个静态map集合中,然后通过反射把大容量对象传入其它module module之间通讯 在同一进程间通信,EventBus无意非常流行,因为嫌弃EventBus太重,所以就实现了一个简单的moduleEventbus,其实现原理完全照搬EventBus,其使用方法和EventBus也完全一致,分为 定义事件类型,订阅,发布事件,订阅事件处理,解除订阅几个步骤 4.3 资源名冲突通过设置resourcePrefix即可解决
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:12:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |