Android如何查看第三方SDK的日志

  最近由于工作,需要调研下别的行业的第三方SDK,所以做下简单的记录。

  当从官网下载到相应的SDK以后,其实就是一些jar和资源文件,作为开发人员肯定是先运行下demo,看下效果,当对大致的集成流程都熟悉以后,那么就可以尝试去查看第三方的日志了,当然这里说到的日志并不是简单的SDK中对外开放给开发者看到的日志,而是开发这个SDK的工程师在开发的过程中所用于调试用的日志,这些日志才是关键性的东西。作为开发者,我们知道在开发的时候肯定是有一套自己的日志输出便于调试的,当然往往为了这种日志的管理,一般都会在日志类中声明一个boolean类型的静态常量,在每次输出日志的时候都会判断下这个常量,如果允许输出,则输出日志,反之,不输出日志,所以只要在发布正式版本的时候将这个变量置为false,那么所有调试用的日志就都不会再输出了。

  所以针对以上的这种情况,我的第一思路是,既然是判断这个Boolean类型的静态常量,那么是否可以去改变它的值呢,有童鞋会说,怎么可能,这是静态常量,常量都是不可变的,其实我想说的是没有尝试过又怎么知道不可能呢?通过查阅相关资料,我了解到,通过java的反射可以改变静态常量的值,但是针对基本类型的常量此方法行不通,刚刚好这里的的boolean就是一个基本类型的数据,当然一般我们在声明这类变量时都会声明称基本类型,所以这条思路到此就断了。结论是这个静态常量无法改变,但并不是所有的静态常量都不可变。

  那么有别的方法吗?既然无法改变这个日志类中的变量,我是否可以去尝试改变这个日志类呢?基于这样的想法,第二条思路就是通过替换SDK的jar包中的class类来达到目的,不要觉得有多难,其实方法很简单,如果有心得童鞋就会发现,其实jar包就是一个压缩包,这个压缩包里面都是class类文件而已,你甚至可以直接用360或者好压之类的压缩工具将一个jar包打开,能够看到对应包名下面的class文件,那么如何替换这些类文件呢?

  首先为了方便理解,打个比方,我现在有一个jar包,包名为com.csdn.logdemo,该包下有个utils包,其下有个日志管理类CSDNLogger,这个CSDNLogger就是做了日志管理的类,我们无法看到开发者这调试时的关键性日志,我们要替换这个类,那么在eclipse中新建一个工程,包名与jar包中的这个CSDNLogger所在的包名一样,即com.csdn.logdemo.utils,创建完工程以后新建一个类也叫CSDNLogger,接下来利用jd-jui将com.csdn.logdemo这个jar打开,定位到CSDNLogger这个类,将里面所有的代码拷贝到eclipse工程中的CSDNLogger类中,在这样的基础上,重写里面的打印日志的方法,但是记住千万不能删除里面的方法,可以添加方法,修改方法内部的实现,但不能删除,因为你不知道这个jar里面是否有别的类会调用这些被你删除的方法,如果有,那程序就跪了。。。当我们把这个类都重写完以后,ctrl+S保存下,然后定位到这个eclipse工程在计算机中的根目录,打开bin,打开classes文件夹,根据你的包名,一路打开,直到看到一个CSDNLogger.class的文件,拷贝下,然后打开刚刚的jar包(无需解压),同样定位到jar中的这个类,然后直接替换掉,将新的jar包放到你的工程中,运行下你的工程,你会发现很多对你有用的信息!

  利用这种方式和抓包工具,能够有效的帮助我们了解第三方SDK,当然如果SDK的开发者在发布新版本的时候把所有打印日志的代码都删了,那就没办法了,最后复习下java中的基本数据:

数据类型大小范围默认值
byte(字节型)8-2^7~2^7-10
short(短整型)16-2^15~2^15-10
int(整型)32-2^31~(2^31)-10
long(长整型)64-2^63~(2^63)-10
float(单精度)322^(-149)~2^(128)-10.0f
double(双精度)642^(-1074)~2^(1024)-10.0d
char(字符型)16'\u0000~\uFFFF''\u0000'
boolean(布尔型)1true/falsefalse

当在Android项目中引入第三方SDK时出现 `java.lang.VerifyError: Verifier rejected class` 错误,通常是由于类的验证失败导致的。 这个错误可能是由以下原因引起的: 1. 兼容性问题:第三方SDK可能与你的Android项目存在兼容性问题。确保你使用的是与你的Android版本兼容的最新版本的SDK,并确保依赖的所有库和插件版本兼容。 2. 混淆配置问题:如果你在项目中使用了代码混淆工具(如ProGuard),请检查混淆配置是否正确。有时混淆会导致类文件被错误地优化或删除,从而引发验证错误。尝试排除第三方SDK的类文件或调整混淆配置,以解决此问题。 3. 依赖冲突:可能存在依赖冲突,即不同的库引用了相同的类或资源文件。这可能导致类验证失败。可以尝试通过更新或排除依赖项来解决依赖冲突问题。 4. 类文件损坏:第三方SDK的类文件可能损坏或不完整,导致验证失败。尝试重新下载或更新SDK,并确保所有的类文件都是完整的。 5. Android版本问题:某些第三方SDK可能不兼容你的Android版本。尝试更新你的Android SDK版本,并确保与第三方SDK的要求相符。 在解决该问题时,你可以尝试清理项目并重新构建,以及在错误日志中查找更多详细信息,以便更好地定位问题所在。如果问题仍然存在,可以尝试在开发者社区(如Stack Overflow等)搜索类似的问题,并查看其他开发者是否遇到了相似的问题并找到了解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值