Android crash特殊位置定位
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!
通常情况下,在我们开发的过程中遇到的crash,可以到logcat中找原因;如果做定制App,对方用Monkey等测试时,要确定准确的位置却并非易事,举例说明:
01-02 01:03:46.485 W/System.err( 5575): java.lang.NullPointerException: java.lang.NullPointerException
01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.j.a(unknow)
01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.a.a(unknow)
01-02 01:03:46.485 W/System.err( 5575): at com.maomao.core.b.a.a(unknow)
01-02 01:03:46.485 W/System.err( 5575): at com.maomao.util.u.run(unknow)
01-02 01:03:46.485 W/System.err( 5575): at java.lang.Thread.run(Thread.java:838)这样的错误,我们怎么看呢,而且还会判断具体哪个位置会出错?
因为代码都被混淆过,命名没有固定规律,随机从”a-z“中取一个或者两个字母命名,这个时候就需要有相当水准!
首先从下往上看,因为调用关系是这样的。
util.u.run:Thead的run方法出错,那就找到util包下包含run方法的类,
core.b.a.a:上面的方法调用了core包下,a包内的a方法
core.b.a.a:又一个这样的方法,同理,上面的方法调用了本类当中的一个方法
core.b.j.a:上面的方法又调用了j中的a方法
这样我们就可以定位大概的位置,一般情况下加上try...catch语句,把异常抛出即可!
我们再来分析一个例子:主要来确定某此.后跟的是类,某些.后跟的是方法。
E/AndroidRuntime( 3870): java.lang.NullPointerException: java.lang.NullPointerException
E/AndroidRuntime( 3870): at com.maomao.core.b.j.ab(j.java)
E/AndroidRuntime( 3870): at com.maomao.b.j.a(j.java)
E/AndroidRuntime( 3870): at com.maomao.application.a.c(a.java)
E/AndroidRuntime( 3870): at com.maomao.application.a.b(a.java)
E/AndroidRuntime( 3870): at com.maomao.application.b.run(b.java)
E/AndroidRuntime( 3870): at java.lang.Thread.run(Thread.java:857)区别在于第一种是System.err,是虚拟机Dalivk抓住的bug,第二种是Android Runtime在运行期间抓住的bug
1、Thread.run:仍然从下往上看此调用关系,又是run方法出错
2、b.run:调用application类下b,b肯定是一个类不是一包,为什么呢?下面紧跟一run方法
3、a.c:上面的run方法又调用a,a就可能是一个包,也可能是一个类,最后调用的是b方法,当然这个地方的判断要看上面方法的调用,找到run方法已经可以判断这是个包或者是个类。
4、a.b:同理,可能调用是a类中的c方法后,也可能是调用a包中的c类后再调用a包中的b类
5、b.j.a:明显这就是b包下j类的a方法
6、b.j.ab:不要觉得此ab比上面a多一字母而不解,其他都是一样的,ab也是一方法,与a无差别
那很明确,最后就是b.j.ab方法出现出指针!
解决方案:要不初始化一下,要不直接try...catch不管这个错误。
查看apk相关信息,要进入aapt.exe所在目录,之前放在tools目录下,现在放在“sdk\build-tools\23.0.3”这样具体的目录下,了解更多:
aapt 命令可应用于查看apk包名、主activity、版本等很多信息
最后再讲一个反编译(可反编译微信支付宝百度地图等):
反编译主要是学习别人的思路,不可作恶!
一、更改apk文件的后缀名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip
二、用zip解压缩LianyunHelper3.0.11.zip文件
三、从解压缩的文件夹中取出classes.dex文件并放到d2j-dex2jar 所在目录
四、运行cmd命令,进入d2j-dex2jar 所在的目录,输入d2j-dex2jar classes.dex即可生成classes.dex.dex2jar.jar文件
五、用jd-gui工具打开classes.dex.dex2jar.jar文件,即可看到源码
六、将AndroidManifest.xml文件放到AXMLPrinter2.jar所在目录,运行cmd命令,进入 AXMLPrinter2.jar所在目录,输入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。
下载地址:工具
360加固请参考下面两篇:
Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正
Apk脱壳圣战之---脱掉“360加固”的壳
Android crash特殊位置定位的更多相关文章
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...
- android EditText光标位置(定位到最后)
方法:edittext.setSelection(int); et.setText(content);//设置EditText控件的内容et.setSelection(content.length() ...
- Android Crash 定位
本文介绍了如何在 Android 手机发生 Crash 时进行 Log 分析的方法, 它可以帮助测试人员快速定位 Android 手机 Crash 发生的原因,同时给研发人员提供有效修改 Bug 的 ...
- Android - 位置定位(Location)服务(Service)类的基本操作
位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...
- Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK
原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...
- Xcode如何快速定位crash的位置?
最近发现经常有人程序崩掉后不知道怎么定位crash的位置 如何快速定位crash的位置? 选择右箭头 选择Add Exception Breakpoint 这样如果你的app再crash就会自动定位到 ...
- [译]:Xamarin.Android平台功能——位置服务
返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...
- Linux内核crash/Oops异常定位分析方法
在内核开发的过程中,经常会碰到内核崩溃,比如空指针异常,内存访问越界.通常我们只能靠崩溃之后打印出的异常调用栈信息来定位crash的位置和原因.总结下分析的方法和步骤. 通常oops发生之后,会在串口 ...
- jQuery学习笔记(控件位置定位、尺寸大小的获取等)
想做一个幽灵按钮出来,效果大概如下图: 当点击按钮的时候,会有四根线条从四个方向飞入,经历从“无-有-无”的闪入过程. 那么我的设计想法是,先在HTML中定义一个按钮,然后在jQuery中设计按钮点击 ...
随机推荐
- IO流 总结三
编码:字符串变成字节数组. 解码:字节数组变成字符串 String --> byte[]; str.getBytes(); byte --> String: new String(byt ...
- (转)SqlServer将数据库中的表复制到另一个数据库
本文为转载地址为:http://jingyan.baidu.com/article/d5c4b52bc5c102da570dc547.html 复制表结构 在使用SqlServer的过程中,我们可能需 ...
- settimeout如何调用方法的时候,传递参数
常见写法: setTimeout("loaded()", 200); 延迟加载loaded方法 如果要给loaded方法传递参数 setTimeout(function () { ...
- poi 读取 excel(.xlsx) 2007及以上版本
1.注意的一点是sh.getLastRowNum(),比实际的行数少一行 涉及到的包:
- easyui 中重复加载两次url
之前一直在使用easyui中,忽视了官网上的小细节,类似于datagrid.combobox 等组件在使用的时候,它的数据加载方式分为两种: 官网中: ①在html中,比如: <table id ...
- PMP项目管理笔记 项目定义
项目的定义 项目是为创造独特的产品,服务或成果而进行临时性的工作. 项目是组织的经营需要与战略目标服务的. PMBOK 指南描述的项目管理知识,从本质上讲,是用来管理中等或以上规模,跨部门,跨专业的目 ...
- 目前几款基于html5的前端框架:如Bootstrap、Foundation、Semantic UI 、Amaze UI
Bootstrap是由Twitter在2011年8月推出的开源WEB前端框架,集合CSS 和HTML,使用了最新的浏览器技术,为快速WEB开发提供了一套前端工具包,包括布局.网格.表格.按钮.表单.导 ...
- Android Fragment完全解析,关于碎片你所需知道的一切 (转)。
我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述. 但是Activity也有它的局限性,同样的界面在手机 ...
- [Jquery]网页定位导航特效
描述:左右联动的导航,非常适合展示页面内容多,区块划分又很明显的,点击右边固定导航项时,左边的内容跟着切换.滑动滚动条的时候,右边的导航也随着左边的展示而进行高亮切换. 思路:比较滚动距离和楼层距离( ...
- POJ 2262 Goldbach's Conjecture 数学常识 难度:0
题目链接:http://poj.org/problem?id=2262 哥德巴赫猜想肯定是正确的 思路: 筛出n范围内的所有奇质数,对每组数据试过一遍即可, 为满足b-a取最大,a取最小 时空复杂度分 ...