分享是最好的学习,这个从高中时代就深入体会.但是后来因为自己的懒惰,没能坚持做下去,心里空落的很.
适逢这段时间做移动终端的运行监控,今天工作暂告一段落,把这几天对Android App运行监控思路总结总结.一是工作的总结,一是防止遗忘,因为人最容易遗忘,还有就是扔一块砖,希望能引出高手的玉.
工作背景
监控App对服务的请求执行情况,了解App可用性能以及运行性能,为定位运行问题提供数据\技术支持.
监控的业务拓扑如下:
监控思路
监控主体思路是多维分析。因为问题的产生往往是很多条件交织在一起,在一定的条件下发生。从多个纬度对进行分析,由整体到局部,整体纵观全局,局部察觉毫发,从而最终定位问题所在。多维分析图示如下:
监控的技术思路如下:
Android App对云端的请求主要分成两种,一种是原生App里通过网络协议,如常见的Http协议向云端请求,对云端返回响应进行处理,生成包含云端数据的页面展现;还有一种是通过WebView的方式,直接调用云端的Web内容。
通过Http网络协议请求,通过在请求关键点埋点的方式可以获取到请求信息。实现原理是在编译Java代码是通过instrument技术,找到调用http相关业务代码,在前后埋入点. 这样只能获取到请求整体时间,不能细化DNS解析时间\TCP连接时间\请求发送时间\等待响应时间\接收响应时间.但这样的好处是,可以做到非侵入式,对业务App没有太大的侵入,但是不足也是埋点不全.
Android上的Java毕竟不是JavaVM上的Java,一些Aop相关技术,如CGLib或者Javaassist均不能直接使用.Android虚拟机运行的字节码是Dalvik字节码.只有在运行时干预Dalvik字节码,才可以做到既非倾入式又埋点全. 思路听起来比较好,但对Android的Dalvik虚拟机不熟悉,需要进一研究.
还有一种方法可以获取请求各阶段过程,那就是修改HttpClient实现,App使用改版的Httpclient而不是Android自带的HttpClient.但这样话,对业务代码有一定的侵入.当然了,如果完全使用自己的Http Client实现或者对Apache Httpclient比较熟悉,可以通过Hook方式接入的话,也不是问题.
对WebView请求的URI监控,通过WebClient实现,不过只可以获取到URI的整体时间以及包含子请求的开始执行时间.
以上对Http请求\Web请求的监控均采用各自的方案,但是,如果对Android或者Linux底层比较熟悉化,直接开发网络检测工具,类似Tcpdump和Wireshark的工具,直接在TCP过滤请求数据,这样既非倾入式,又监控全面,同时还提供了整体的一站式解决,不管是Http请求还是通过Webview的请求,或者通过Intent激活其他Webbrowser的请求,均可以获取到详细数据.
后续工作
希望能对Android NDK开发以及Linux网络编程有更深入的了解,从而能做到在不侵入App的开发的条件下,能完成对App全流量的监控.
痴人痴想,努力成真.
相关推荐
7. **权限管理**:如使用Android运行时权限,学习如何优雅地处理用户权限请求。 8. **多语言支持**:源码可能包含多语言资源,展示了如何实现应用的国际化。 9. **混淆优化**:学习如何使用ProGuard或R8进行代码...
例如,蓝牙技术允许设备间的短距离无线通信,EDGE则提升了移动网络的数据传输速度,Wi-Fi则提供高速稳定的无线网络连接,这些技术为实现玩家之间的实时竞技和协作提供了可能。 本研究的焦点是基于Android平台的游戏...
策划需要通过多种途径获取需求,如用户调研、数据分析、竞品分析等,并将需求转化为设计方案。 - **交互设计**:交互设计师基于策划的需求,结合心理学和用户体验,创建交互文档,定义功能和界面逻辑。 - **视觉...
- **内存回收**:在Android中,内存管理由垃圾收集器(Garbage Collector, GC)自动执行,程序员无需手动释放内存。选项B正确,其他选项描述了不正确的内存管理行为。 2. **运行时异常**(Runtime Exception): ...
- **栈劫持**:通过修改应用程序运行时的行为,拦截并篡改数据传输过程,以获取敏感信息。这种方式需要一定的技术知识和编程能力。 - **SD卡存储**:部分应用可能会将敏感信息存储在SD卡上,可以通过读取SD卡内容来...
3. **诱饵回收机**:在收集到足够的行为数据后,诱饵回收机将协助分析这些行为,提取出关键特征,用于后续的决策分析。 4. **分析机**:最后,分析机会基于收集到的信息和预定义的恶意行为模式进行决策,判断是否...
本文将深入探讨APP产品开发的几个重要思考策略,帮助开发者和产品经理构建出更具竞争力和用户体验优良的移动应用。 1. **市场定位**:首先,明确APP的产品定位至关重要。这涉及到目标用户群体、功能需求以及与竞品...
- **日志收集**:收集应用运行时的异常信息,便于故障排查。 - **用户行为分析**:使用Google Analytics、Firebase等工具,了解用户行为,优化产品。 在"MobileshopForBook"项目中,你可以通过研究源代码来学习...
手淘采用这种框架,旨在实现Android和iOS平台上的高效、安全的原生组件交互。 二、日志审计的重要性 日志审计是安全运维的核心组成部分,它能记录应用的运行行为,帮助识别潜在的安全威胁和异常活动。在Native容器...
1.5 数据分析:收集并分析乘客流量、出行习惯等数据,为决策提供支持。 功能目标:构建一个集实时公交信息、智能调度、电子支付、安全监控和数据分析于一体的综合性智能公交管理系统。 2. 系统总体设计 2.1 系统...
此外,还需要编写一个MATLAB脚本来分析和展示收集的数据。 #### 二、作业要求与说明 ##### 2.1 文件I/O与数据采集 **主要目标**: - 学生需要创建一个应用程序,该应用能够显示学生姓名、课程信息,并允许用户...
1. 前端设计:采用React Native或Flutter等跨平台框架开发移动应用,确保在iOS和Android平台上运行流畅,提供良好的用户体验。 2. 后端设计:使用Node.js或Django等后端技术搭建服务器,处理用户请求,与数据库交互...
Java的网络编程能力来自于它的内置网络类库,使得开发者可以轻松地进行网络通信和数据交换。 Java还具有强大的可读性和易控性。Java代码的结构清晰,语法规则明确,使得其他开发者能够更容易地阅读和理解代码。同时...
- **感知与监控**:利用传感器收集环境数据(如温度、湿度、光照强度等),并通过计算机系统进行分析处理,实现对楼宇环境的智能化监控。 - **能源管理**:通过计算机技术实现对楼宇内各种能源使用的优化管理,比如...
8. **玩家行为分析**: 尽管不是直接的"深度学习"或"机器学习"应用,但可以想象,收集并分析玩家游戏行为数据,可能会使用到这些技术,以便优化游戏体验或进行个性化推荐。 综上所述,这个项目涵盖了游戏开发的基本...
6. **响应式设计**:AI设计需考虑跨平台兼容性,确保设计在不同操作系统(如iOS、Android)和设备上都能良好运行。设计师会运用自适应布局和媒体查询来实现这一目标。 7. **动画与过渡效果**:AI设计可以引入动态...
5. **数据存储**:游戏可能需要记录用户的分数或进度,这时可以使用SharedPreferences来实现轻量级的数据存储,或者SQLite数据库进行更复杂的数据管理。 6. **游戏逻辑**:猜牌游戏的核心算法是判断用户猜的花色和...
7. **安全与隐私**:笔记内容通常包含用户的个人思考,因此应用必须保护用户数据的安全,遵循数据加密、身份验证和权限管理的最佳实践。 8. **测试与调试**:在开发过程中,单元测试、集成测试和性能测试都是确保...
8. 注解:Java 2引入了注解(Annotation),提供了一种元数据机制,用于向编译器或运行时环境提供额外的信息。源代码中可能会看到如@Override、@Deprecated等常见注解的使用。 通过深入研究这些源代码,不仅可以...