【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日志并进行多维度分析。
目录
相关文章
|
1月前
|
存储 XML 开发工具
探索安卓应用开发:从基础到进阶
在这篇文章中,我们将一起踏上安卓应用开发的旅程。不论你是编程新手还是希望提升技能的开发者,这里都有你需要的东西。我们会从最基础的概念开始,逐步深入到更复杂的主题。文章将涵盖开发环境设置、用户界面设计、数据处理以及性能优化等方面。通过理论与实践的结合,你将能够构建出既美观又高效的安卓应用。让我们一起开启这段技术之旅吧!
|
1月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
21天前
|
搜索推荐 Android开发 开发者
安卓应用开发中的自定义控件实践
在安卓应用开发的广阔天地中,自定义控件如同璀璨的星辰,点亮了用户界面设计的夜空。它们不仅丰富了交互体验,更赋予了应用独特的个性。本文将带你领略自定义控件的魅力,从基础概念到实际应用,一步步揭示其背后的原理与技术细节。我们将通过一个简单的例子——打造一个具有独特动画效果的按钮,来展现自定义控件的强大功能和灵活性。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往更高阶UI设计的大门。
|
1月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
51 8
|
1月前
|
缓存 监控 前端开发
探索Android应用开发之旅:从新手到专家
【10月更文挑战第42天】本文将带你踏上Android应用开发的旅程,无论你是初学者还是有经验的开发者。我们将一起探索如何从零开始创建你的第一个Android应用,并逐步深入到更高级的主题,如自定义视图、网络编程和性能优化。通过实际示例和清晰的解释,你将学会如何构建高效、吸引人的Android应用。让我们一起开启这段激动人心的旅程吧!
|
1月前
|
开发框架 前端开发 Android开发
探索安卓和iOS应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
1月前
|
搜索推荐 前端开发 Android开发
安卓应用开发中的自定义视图实现
【10月更文挑战第30天】在安卓开发的海洋中,自定义视图是那抹不可或缺的亮色,它为应用界面的个性化和交互体验的提升提供了无限可能。本文将深入探讨如何在安卓平台创建自定义视图,并展示如何通过代码实现这一过程。我们将从基础出发,逐步引导你理解自定义视图的核心概念,然后通过一个实际的代码示例,详细讲解如何将理论应用于实践,最终实现一个美观且具有良好用户体验的自定义控件。无论你是想提高自己的开发技能,还是仅仅出于对安卓开发的兴趣,这篇文章都将为你提供价值。
|
1月前
|
传感器 XML IDE
探索安卓应用开发:从基础到进阶
【10月更文挑战第23天】在数字化时代的浪潮中,移动应用已成为人们日常生活的延伸。本文以安卓平台为例,深入浅出地介绍了如何从零开始构建一个安卓应用,涵盖了开发环境搭建、基本组件使用、界面设计原则以及进阶技巧等关键步骤。通过实例演示和代码片段,引导读者逐步掌握安卓应用开发的核心技能,旨在激发更多开发者对安卓平台的探索热情,并为初学者提供一条清晰的学习路径。
|
1月前
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的差异性
探索iOS与安卓应用开发的差异性
49 2
|
2月前
|
存储 Java Android开发
Android|记一个导致 logback 无法输出日志的问题
在给一个 Android 项目添加 logback 日志框架时,遇到一个导致无法正常输出日志的问题,这里记录一下。
41 2