安卓网络请求监控与数据上报
作者:访客发布时间:2023-10-19分类:程序开发学习浏览:130
监控-网络
基于服务加载器、监控Okhttp 网络请求,实现拦截、解析、转发、存储、上报等功能.采用组件化开发方式,各业务组件均可单独拆分使用,同时提供导出对外调用组件,外部调用无需关心内部实现,组件之间集成完全解耦
GitHub地址>;githorb.com/manaYang/M…
集成组件介绍
组件-石材
- 提供基础依赖管理构建.gradle.kts(可修改依赖版本)
- 提供数据存储区/GSON/RetrofitProvider对外调用管理类(可替换)
- 提供网络拦截器全局拦截器(OKHTTP拦截器)(如需替换,需全局处理接口注解)
- 提供应用程序生命周期分发管理,基于@AutoService注解生成并解耦( (如需替换,需全局处理接口注解)
组件-http-导出
该组件为对外集成组件,可直接依赖
- HttpDataResult.kt 提供对外获取拦截器拦截器解析实体模型
- HttpInterceptorListener.kt 提供对外转发实体型号数据接口,可供上层业务获取网络请求数据并自定义处理,参考应用程序组件模块[HttpInterceptor.kt]
组件-http
该组件是Http-Export内部业务实现组件,处理网络请求白名单、解析、转发等业务操作,不可直接依赖,建议上层Business业务集成
- HttpInterceptor.kt 拦截原始OK http网络请求,并组装实体模型HttpResult.kt
- HttpResultParser.kt 解析原始请求Header、Body、Form Body并组合[HttpDataResult]模型
- DispatchProvider.kt 通过异步协程与服务加载器转发http处理完成的数据模型
构件-房间-导出
该组件为对外集成组件,可直接依赖
- HttpDataEntity.kt 数据库表映射关联实体模型,供外部组合数据并存储数据源,参考应用程序组件HttpInterceptor.kt
- HttpDataManage.kt 数据库对外操作接口,提供增删改查及自定义查询sql功能
- QueryFilter.kt 自定义查询过滤条件,参考应用程序组件维护活动.kt
组件-房间
该组件是房间-导出内部业务实现组件,提供房间数据库、表、Dao实现
- HttpDataBaseLifecycle.kt 生命周期内初始化房间相关组件,获取Dao操作实例
- HttpDataDaoProvider.kt 实体模型与表表映射关系关联
- HttpDataManage.kt 数据库增删改查具体实现,关联房间导出组件中[HttpDataManage.kt]
组件-报表-导出
该组件为对外集成组件,可直接依赖
- WorkReport.kt 对外开放业务查询过滤实体、业务上报平台区分,关联工作管理器-输入Data参数
组件-报告
该组件是报告-导出内部业务实现组件,提供工作管理器后台上报功能
- 叮当声 钉钉工作空间及鉴权服务与数据上报(仅作参考),具体实现可换为实际上报业务平台
- 减记 格式化上报报文(仅作参考),具体按实际业务要求处理
- 工作 处理数据上报及冗余数据处理(仅作参考),具体按实际业务要求处理
组件-应用程序
上层业务集成组件壳,包含所有出口及内部实现组件,组装额外公共参数(用户信息、设备信息、应用信息)
kapt("com.google.auto.service:auto-service:1.1.1")
api("com.google.auto.service:auto-service-annotations:1.1.1")
implementation(project(":stone"))
implementation(project(":http"))
implementation(project(":http-export"))
implementation(project(":room"))
implementation(project(":room-export"))
implementation(project(":report"))
implementation(project(":report-export"))
具体调用方法在[MainActivity.kt]与[HttpInterceptor.kt],应用内BaseApplication应替换为项目实际使用类
使用说明
项目中为了演示效果采用钉钉上报,因此需要申请企业应用应用密钥/秘书密钥/代理ID/进行鉴权以,通过以上密钥信息获取用户ID完成消息推送通知, 实际应用中推荐上报到日志中台或相关日志平台,作为全链路监控的一环
钉钉开放平台>;Open.dingtalk.com/
Gradle.properties 需配置以下内容,关联影响鉴权方法位置:DingRepository.kt
# Ding key config
dingAppKey=
dingSecretKey=
dingAgentId=
dingUsersId=
实际调用代码示例
DingProvider.kt
suspend fun reportWorkSpace(title: String, content: String, success: (Boolean) -> Unit) {
...
...
...
}
可自定义DataServerProvider.kt,处理实际数据上报平台
suspend fun reportDataServer(title: String, content: String, success: (Boolean) -> Unit) {
//do something
}
suspend fun reportDataOther(title: String, content: String, success: (Boolean) -> Unit) {
//do something
}
演示效果截图屏幕截图
ServiceLoader
基于@AutoService注解生成的Metadata可在各自组件Build目录查看,例如:
- Report/build/intermediates/java_res/debug/out/META_INF/services/*
- Report/build/intermediates/runtime_library_classes_dir/debug/META_INF/services/*
- Report/build/tmp/kapt3/classes/debug/META_INF.services
使用方式可参考各业务组件中含有@AutoService类,例如:
自动服务官方文档地址&>githorb.com/google/Auto…
申报接口
/**
* Define lifecycle methods what you want to use
*/
interface ApplicationLifecycle {
/** Lifecycle onAttachBaseContext */
fun onAttachBaseContext(context: Context)
/** Lifecycle onCreate */
fun onCreate(application: Application)
/** marking priority,0 is highest priority,next is 1,2,3...100 ,you can custom it */
fun priority(): Int
}
批注类
/**
* Add google [@AutoService] annotation,to implementation it
*/
@AutoService(ApplicationLifecycle::class)
class ApplicationLifecycleProxy : ApplicationLifecycle {
override fun onAttachBaseContext(context: Context) {
//do somethings
}
override fun onCreate(application: Application) {
//do somethings
DataStoreProvider.initDataStore(application)
}
override fun priority(): Int {
//in base application context,do somethings highest priority,so you should return 0
return 0
}
}
ServiceLoader.load
/**
* With google auto-service,it will collect all @AutoService annotation class
*/
class ServiceLoaderProxy {
private val loader: ServiceLoader<ApplicationLifecycle> by lazy {
ServiceLoader.load(ApplicationLifecycle::class.java)
}
val lifecycleQueue by lazy { loader.sortedWith(compareBy { it.priority() }) }
}
引用三方库
- 谷歌jetpack&>developer.android.com/jetpack
- Kotlin coroutines>;githorb.com/kotlin/kotl…
- 翻新&;Oktp;githorb.com/Square/Retr…&;githeb.com/Square/okht…
- Gson&>githorb.com/google/gson
- 汽车服务>;githorb.com/google/Auto…
相关推荐
- 用于wordpress最好的的doojigger简单CDN扩展wordpress常用插件下载博客插件模块
- Network Post Duplicator 最好的WordPress常用插件下载 博客插件模块
- Network Template Parts 最好的WordPress常用插件下载 博客插件模块
- 有时候因为各种原因,我们需要将一个网站的WordPress用户导出,然后倒入到另一个网站?尤其是当需要合并多个站点,将所有用户转移到新站点时,这将会非常有用。在本教程中,将详细说明如何导入和导出WordPress用户及WooCommerce客户。
- 2018年年底微软正式上线测试网站数据分析服务-Clarity。那么,如果在WordPress,我们应该如何安装微软网站统计分析代码-Clarity?
- 如多站长并不知道WordPress网站其实有不少隐藏的用户数据,而这些数据可用于发展网站业务。 查找隐藏的用户数据可以帮助您更好地了解网站受众,跟进潜在客户,改善转化并提高销售量。市场营销人员会跟踪此
- Avelon Network 最好的WordPress常用插件下载 博客插件模块
- PurpleAds Ad Network 最好的WordPress常用插件下载 博客插件模块
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 8鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 9Android广播如何解决Sending non-protected broadcast问题
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版