【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存(二)

二. 崩溃日志保存到远程服务器




实现途径 :


-- 1. 自己开发服务器端 : 在上面的保存文件的基础上, 在开发一个服务器端, 使用网络编程接口将打印到文件的内容上传到服务器端;


-- 2. 使用第三方服务 : 使用 Testin 的崩溃大师, 地址 http://crash.testin.cn/app?scnavbar ;




1. 集成崩溃大师步骤




(1) 创建应用 获取 key 值



创建应用步骤 :


-- 1. 创建界面 : http://crash.testin.cn/apm/task/create ;


-- 2. 填写一个应用信息 :

image.png



-- 3. 获取 key : 点击"提交并获取 Appkey" 按钮, 获取到了 AppKey "0da6263ca1f5b84a2dd405b07227f483";


image.png





(2) 设置类型


第二步设置类型, 选择默认的应用即可 :


image.png





(3) 下载 jar 包


jar 包简介 : 集成崩溃大师, 只需要集成一个 jar 包即可, 点击如下按钮即可下载 该 jar 包;


-- jar 包内容 : 下载后解压, jar 包名称是 testinagent.jar ;


image.png




(4) 导入 SDK


导入 SDK : 在应用下 创建一个 libs 目录, 将jar 包拷贝进去即可;

image.png








(5) 配置 AndroidManifest.xml 文件


在配置文件中添加如下用户权限即可 :



 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.GET_TASKS" />



(6) 初始化设置


在代码中注册 :



//初始化 Testin 崩溃大师
  TestinAgent.init(getApplicationContext(), "0da6263ca1f5b84a2dd405b07227f483", "octopus");








2. 测试示例





(1) 日志信息


测试成功会打印如下信息 :



04-27 20:11:40.890: E/TestinAgent(16432): ****************************************
04-27 20:11:40.890: E/TestinAgent(16432): A Java crash caught by TestinAgent, pkg=cn.org.octpus.crash 
04-27 20:11:40.890: E/TestinAgent(16432): ----------------------------------------
04-27 20:11:40.890: E/TestinAgent(16432): reason: java.lang.IllegalStateException: Could not execute method of the activity 
04-27 20:11:40.890: E/TestinAgent(16432): ----------------------------------------
04-27 20:11:40.890: E/TestinAgent(16432): stacktrace: 
04-27 20:11:40.890: E/TestinAgent(16432):  at android.view.View$1.onClick(View.java:3804)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.view.View.performClick(View.java:4439)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.widget.Button.performClick(Button.java:142)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.view.View$PerformClick.run(View.java:18395)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.os.Handler.handleCallback(Handler.java:725)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.os.Looper.loop(Looper.java:176)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.app.ActivityThread.main(ActivityThread.java:5319)
04-27 20:11:40.890: E/TestinAgent(16432):  at java.lang.reflect.Method.invokeNative(Native Method)
04-27 20:11:40.890: E/TestinAgent(16432):  at java.lang.reflect.Method.invoke(Method.java:511)
04-27 20:11:40.890: E/TestinAgent(16432):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
04-27 20:11:40.890: E/TestinAgent(16432):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
04-27 20:11:40.890: E/TestinAgent(16432):  at dalvik.system.NativeStart.main(Native Method)
04-27 20:11:40.890: E/TestinAgent(16432): Caused by: java.lang.reflect.InvocationTargetException
04-27 20:11:40.890: E/TestinAgent(16432):  at java.lang.reflect.Method.invokeNative(Native Method)
04-27 20:11:40.890: E/TestinAgent(16432):  at java.lang.reflect.Method.invoke(Method.java:511)
04-27 20:11:40.890: E/TestinAgent(16432):  at android.view.View$1.onClick(View.java:3799)
04-27 20:11:40.890: E/TestinAgent(16432):  ... 12 more
04-27 20:11:40.890: E/TestinAgent(16432): Caused by: java.lang.ArithmeticException: divide by zero
04-27 20:11:40.890: E/TestinAgent(16432):  at cn.org.octpus.crash.MainActivity.onClick(MainActivity.java:20)
04-27 20:11:40.890: E/TestinAgent(16432):  ... 15 more
04-27 20:11:40.890: E/TestinAgent(16432): ----------------------------------------
04-27 20:11:40.890: E/TestinAgent(16432): deviceinfo: 
04-27 20:11:40.890: E/TestinAgent(16432):  Device: samsung/SM-G3812
04-27 20:11:40.890: E/TestinAgent(16432):  OS: 4.2.2
04-27 20:11:40.890: E/TestinAgent(16432):  AppVersion: 1.0
04-27 20:11:40.890: E/TestinAgent(16432):  PackageName: cn.org.octpus.crash
04-27 20:11:40.890: E/TestinAgent(16432):  Activity: MainActivity
04-27 20:11:40.890: E/TestinAgent(16432):  Total Disk Space: 2328 MB ; Free Disk Space: 1688 MB 
04-27 20:11:40.890: E/TestinAgent(16432):  Total SD Space: 2308 MB ; Free SD Space: 1668 MB 
04-27 20:11:40.890: E/TestinAgent(16432):  CPU Usage: 17.742 % 
04-27 20:11:40.890: E/TestinAgent(16432):  Memory Usage: 12 MB
04-27 20:11:40.890: E/TestinAgent(16432):  Userinfo:  
04-27 20:11:40.890: E/TestinAgent(16432): ****************************************




(2) 后台信息


后台崩溃数据 :


-- 控制台信息 : 进入崩溃大师的控制台, 就会看到刚看到的 CrashInfoDemo 应用, 此时我们估计产生的异常已经打印出来了;




-- 点击进入该应用的详情 :


image.png


-- 详细的崩溃信息查看 :



image.png




相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
6天前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
1月前
|
Android开发 Swift iOS开发
iOS和安卓作为主流操作系统,开发者需了解两者差异以提高效率并确保优质用户体验。
【10月更文挑战第1天】随着移动互联网的发展,智能手机成为生活必需品,iOS和安卓作为主流操作系统,各有庞大的用户群。开发者需了解两者差异以提高效率并确保优质用户体验。iOS使用Swift或Objective-C开发,强调简洁直观的设计;安卓则采用Java或Kotlin,注重层次与动画。Swift和Kotlin均有现代编程特性。此外,iOS设备更易优化,而安卓需考虑更多兼容性问题。iOS应用仅能通过App Store发布,审核严格;安卓除Google Play外还可通过第三方市场发布,审核较宽松。开发者应根据需求选择合适平台,提供最佳应用体验。
58 3
|
1月前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
1月前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
80 0
|
15天前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
15天前
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的差异性
探索iOS与安卓应用开发的差异性
36 2
|
22天前
|
传感器 XML IDE
探索安卓应用开发:从基础到进阶
【10月更文挑战第23天】在数字化时代的浪潮中,移动应用已成为人们日常生活的延伸。本文以安卓平台为例,深入浅出地介绍了如何从零开始构建一个安卓应用,涵盖了开发环境搭建、基本组件使用、界面设计原则以及进阶技巧等关键步骤。通过实例演示和代码片段,引导读者逐步掌握安卓应用开发的核心技能,旨在激发更多开发者对安卓平台的探索热情,并为初学者提供一条清晰的学习路径。
|
24天前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
24 2
|
24天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
92 1
|
10天前
|
前端开发 Android开发 UED
安卓应用开发中的自定义控件实践
【10月更文挑战第35天】在移动应用开发中,自定义控件是提升用户体验、增强界面表现力的重要手段。本文将通过一个安卓自定义控件的创建过程,展示如何从零开始构建一个具有交互功能的自定义视图。我们将探索关键概念和步骤,包括继承View类、处理测量与布局、绘制以及事件处理。最终,我们将实现一个简单的圆形进度条,并分析其性能优化。