【精神哥讲Crash】第二期:java.lang.NoSuchMethodError

KEIL5编译报错L6200E:__stdout重定义问题分析与解决 本文深入分析KEIL5编译报错L6200E中__stdout重定义问题的根源,指出因未完整定义__stderr导致与标准库stdio_streams.o冲突。提供完整重定义标准流、启用MicroLIB库等解决方案,帮助开发者彻底解决Symbol multiply defined错误,提升嵌入式开发效率。 阅读详情

圣诞节到啦,精神哥披着红大衣,戴上红高帽,想着偷偷爬入各位办公楼的烟囱,给大家的座位上留下一包鸡爪作为圣诞礼物!
奈何精神哥太胖,肚子太大爬不进烟囱了,想着大家肯定也在加班没法做到偷偷,就单方面决定还是给大家送文章吧!

话不多说,下来精神哥给大家分享的第二个Crash是“java.lang.NoSuchMethodError”。

一、java.lang.NoSuchMethodError基本介绍

全名

java.lang.NoSuchMethodError

官方解释

Thrown if an application tries to call a specified method of a class (either static or instance), and that class no longer has a definition of that method.

意思就是程序找不到你要用的那个方法!

影响力排名

出错量排名第4

精神哥点评

抛出这异常,只能怪这个喜新厌旧、鱼龙混杂的社会!虽然是社会的错,但你不想办法解决它,就只能等屎了!

java.lang.NoSuchMethodError问题的根本原因是开发编译时所依赖的环境,跟实际App运行的环境不匹配。


二、错误场景分析

1、你就喜欢搞新API,这么喜新厌旧!你家妞知道不?

错误代码

//检查该acitivity是否已经销毁

public static boolean isActivityClose( Activity activity){

if(activity != null){

returnactivity.isDestroyed();

}

return false ;

}

编译环境

Android 4.2 SDK( API LEVEL17)

运行环境

Android 4.0 设备( API LEVEL14)

期望结果

正确返回activity是否已经销毁。

实际结果

Crash!!

java.lang.NoSuchMethodError:com.tencent.bugly.crashreport.test.MainActivity.isDestroyed

原因分析

Activity.isDestroyed()方法是Android 4.2增加的,在这之前的系统肯定找不到这个方法,所以在4.2之前的设备上都会Crash!

解决方法

调用时对当前系统API LEVEL做判断,如果小于17就放弃调用

修复代码

public Boolean isActivityClose( Activity activity){

if(Build.VERSION.SDK_INT < 17)

return null;

if(activity != null){

returnactivity.isDestroyed();

}

return false ;

}


2、@Deprecated的API厂家最爱删,你竟然敢用?

API标志

@Deprecated标注的API

标志描述

Annotation type used to mark program elements that should no longer be used by programmers.

这个API后面随时会被干掉!

现状描述

谷歌还是比较小心的,精神哥发现Android的SDK及Android的亲儿子设备上,这些@Deprecated的API基本上都保留了,谷歌最多就是置空实现或直接抛出一个非法访问的异常,所以开发过程中并没有感觉到API过期不能用(当然有警告啦)

但谷歌亲儿子设备只占Android设备的冰山一角,很多厂家可没管那么多,为了尽可能的节省资源,大刀阔斧的对API进行裁剪,而这个@Deprecated的API就是最有理由被干掉的,所以出现大量的java.lang.NoSuchMethodError的Crash!


3、@Hide的API是人家谷歌私有的,删改都不会跟你商量的,你还敢用吗? 


API标志

@Hide标注的API

标志描述

When applied to a package, class, method or field, @hide removes that node and all of its children from the documentation.

这个API压根不想让你看到,更别说让你使用了。

现状描述

由于Android的开源,加上Java的反射机制的便利,开发者总是喜欢研究源码,用注入或反射的方式获取到官方未正式开放的能力。这很有效,但也很危险,因为谷歌随时会调整,会导致你的App出现各种诡异的java.lang.NoSuchMethodError!

很多同学认为public的私有API,谷歌不会乱改,可以大胆的用。

精神哥,随手给你挑一个反例来证明你的天真:

android.content.pm.PackageParser(该类用于apk安装包内容解析,很受欢迎)这个私有类的public构造函数在5.0发生变化了,而之前一直没变过。

//5.0以前有String作为参数,用于传入apk路径

public PackageParser(String archiveSourcePath) {

mArchiveSourcePath = archiveSourcePath;

}

//5.0优化成无参实现了,一个对象可以多次解析了

public PackageParser() {

mMetrics = new DisplayMetrics();

mMetrics.setToDefaults();

}

想看PackageParser.java源码又懒得找的同学,公众号里@精神哥,我给你发哈!


java.lang.NoSuchMethodError在Bugly影响力排行榜中稳居第4,就能看出Android程序员所面对的Android市场,碎片化有多么的严峻了!

精神哥想不出可以一劳永逸的解决方法,在这里再给大家总结几个私人建议(欢迎拍砖):

o   开发阶段用Android Lint,静态检查代码中API兼容性。

o   预发布前用Bita ( bita.qq.com腾讯云测试平台),动态检测主流真机的兼容性。

o   使用腾讯Bugly( bugly.qq.com腾讯Bugly),实时掌握应用在真实用户环境中的遗留问题。


本文系腾讯Bugly特邀文章,转载请注明作者和出处“腾讯Bugly(http://bugly.qq.com)”

制作你自己的yolov5数据集并进行训练 项目地址:make-your-yolov5_dataset 一、数据集标注软件 labelImg labelMe 精灵标注助手 更多的标注工具你可以去看:深度学习图像标注工具汇总 、 十个最常用深度学习图像/视频数据标注工具 、 百度一下 在这里我选择使用labelImg 二、数据集标注 下载labelImg 解压,直接打开labelimg.exe labelImg标注数据 标注完成后即可获得VOC格式(生成.xml文件)的数据 目录结构: dataset │ ├─Annotations . 阅读详情

相关推荐

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2308

Xposed报错:java.lang.NoSuchMethodError: com.example.........

 Xposed报错: java.lang.NoSuchMethodError: com.example.sample.ui.backanalysis.BackAnalysisActivity#onCreate()#exact 日志记录如下: 08-25 15:46:05.409 I/VClientImpl(19571): Binding application com.example.s...

qq_30304193的博客 7594

逆向拼多多长连接:Frida+Python协议还原实战

长连接是现代移动App实现低延迟、高并发通信的核心技术,其原理在于复用TCP通道避免HTTP频繁建连开销,并通过自定义二进制协议提升传输效率与安全性。在电商场景中,长连接不仅承载业务数据,更集成了动态密钥协商、设备指纹绑定、应用层加密等多重防护机制,显著提升数据窃取与自动化采集难度。本文聚焦真实商业级长连接逆向工程,以拼多多(PDD)v12.86.0为案例,详解如何利用Frida在JNI层精准Hook encrypt/decrypt函数捕获明文,结合Python构建协议解析器与会话管理器,实现对商品详情(I

weixin_30843121的博客 1116

NoSuchMethodError报错与解决方案

NoSuchMethodError报错与解决方案

weixin_44188105的博客 5345

AFSim 2.9中文手册实战指南:从安装到高级功能详解(附B站视频链接)

本文详细介绍了AFSim 2.9的安装配置、基础功能操作和高级功能应用,帮助用户快速掌握这款强大的仿真平台。从系统要求检查到多体动力学仿真,再到性能优化技巧,全面解析AFSim 2.9的使用方法,适合初学者和进阶用户参考。

weixin_30892037的博客 566

802.1AS-2011_Gptp协议栈

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

weixin_49041703的博客 2542

NoSuchMethodError异常原因和处理

NoSuchMethodError就是程序在运行中找不到运行的方法导致的,这应该归功于java的多态特性。 对于NoSuchMethodError异常可有可能发生的就是jar冲突,可能是两个高低版本的jar包导致,也有可能是有两个jar包有相同的类与方法,导致程序调用过程中找不到正确的方法 解决方案: 定位到是那个方法出现了NoSuchMethodError的异常 在当前项目中全局搜索类名,查看有多少个jar包有这个类名,分析这些jar包,确定自己期望自己程序需要执行的jar包...

xc博客 2万+

RK3568驱动 SPI主/从 配置

RK3568 SPI 配置指南 内核配置:启用用户空间驱动(主)和从模式协议支持。 主模式:设备树设置status="okay"、max-freq及引脚复用,子节点compatible="rockchip,spidev"。 从模式:需添加spi-slave属性,子节点命名以slave@X开头。 编译烧写:修改设备树后编译内核或全量镜像,验证/dev/spidevX.Y节点。 测试:使用spidev_test工具,主模式可环回测试,从模式需与主设备通信。 (关键:从模式强制spi-slave和命名规则,频率匹

文石_2009的博客 1144

【Java】已解决:`java.lang.NoClassDefFoundError`

通常出现在运行时,表示 JVM 无法找到某个类的定义。在编译阶段可能并未出现任何问题,但在运行时却由于某些原因导致 JVM 无法加载类。是 Java 开发中比较常见的一类错误,这个错误往往会在运行时发生,可能会让开发者感到困惑。,确保项目在运行时能够正常加载所有依赖的类,减少运行时错误的发生。例如,在一个 Java 项目中,假设你在编写代码时依赖了某个外部库中的类。,但是在运行时由于配置或依赖的问题,该库未被正确引入或加载,这时就会触发。,确保在编译和运行时都能正确找到依赖的类。

屿小夏.的知识博客 3177

Supreme小程序自动化抢购终端——源码架构与执行流程全解析

本系统是一套基于开发的桌面端小程序自动化抢购终端。把只有开发者能跑的脚本,包装成普通用户也能操作的桌面工具。参数自动捕获 → 商品多关键词检索 → sku/尺码/库存映射 → 多商品任务队列 → 定时/立即抢购 → 订单创建 → 支付参数拉取 → 本地服务生成支付链接 → 手机微信扫码付款这套 Supreme 抢购终端,表面上看是一个"下单工具"。但从工程角度审视,它已经具备了一个小型桌面自动化系统GUI 层:CustomTkinter 现代化界面,线程安全业务层:多商品队列、定时调度、任务编排。

猫敷雪 203

1.14、基于NARX神经网络的磁悬浮建模(matlab)

数据准备:首先,需要准备用于训练和测试的磁悬浮系统的输入和输出数据,包括磁力、电流、位置、速度等信息。数据可以被保存在MATLAB的数据文件中,并加载到工作空间中。使用MATLAB的神经网络工具箱,创建一个NARX神经网络。需要定义网络的层次结构、节点数、激活函数等参数。通常,NARX网络包括自回归层和外部输入层。数据预处理:对加载的数据进行预处理,包括去除噪声、归一化处理等操作,以确保数据质量和网络训练的稳定性。使用MATLAB的训练函数,如trainlm或者trainbr,对NARX神经网络进行训练。

XU157303764的博客 1998

NoSuchMethodError、NoClassDefFoundError的常见原因和通用解决方式

java.lang.NoSuchMethodError,类加载机制、maven仲裁机制、Arthas查看运行时类,java.lang.NoClassDefFoundError: Could not initialize class com.xxx, 构造方法、类初始化静态数据

lzhfdxhxm的博客 6690

LVGL(lv_table)

LVGL中的lv_table是一个轻量级表格控件,用于显示行列式文本数据。它支持设置单元格内容/样式、行列调整、事件响应等基础功能,适用于参数配置、数据展示等场景。通过API可快速创建表格,设置行列数、填充数据,并自定义对齐方式与样式。但需注意默认无滚动条、行数限制等问题。该控件适合简单表格需求,复杂交互需结合自定义事件处理。

m0_49476241的博客 1262

Xposed 包名类名加密要如何hook?多dex如何查找对应的方法?

转载请标明出处: http://blog.csdn.net/djy1992/article/details/73168865 本文出自:【奥特曼超人的博客】 Xposed Hook ,逆向常用之一。 有人经常问,方法名不在原包名下怎么办,也就是被加密过的包名路径,如 com.immqy.a / com.immqy.co...

weixin_34411563的博客 696

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java.lang.NoSuchMethodError错误解决

一、错误原因 java.lang.NoSuchMethodError错误可能的原因: 1、有这个类,该类没有这个方法 2、类冲突、Jar包冲突、Jar包版本冲突 3、有这个类(A),类中也有方法,但在B类中引用了A类,并调用A类的方法,后面修改A类,把该A类的方法返回值类型改变(如将方法返回类型由void类型改成String类型),只部署A类,没有重新部署B类,将导致NoSuchMethodError错误。 二、解决方案 1、有这个类,该类没有这个方法 在类增加方法。 2、类冲突、Jar包冲突、Jar包版本

kawsaki的博客 11万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

出现 java.lang.NoSuchMethodError 错误的原因及解决方法

在项目依赖比较复杂或者Java运行的环境有问题时,或者同一类型的jar包有不同版本存在,都可能触发该错误。本质上说是JVM找不到某个类的特定方法,也就是说JVM加载了错误版本的类。说白了,就是JVM找不到真正想要调用的方法啦!出现该错误的情形主要有以下两个种:(1)引用了不匹配的包版本; (2)开发环境和运行环境不一致。

安正勋的博客 12万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java.lang.NoSuchMethodError 原因和处理方案

问题描述 工程中明明有该方法,却提示 java.lang.NoSuchMethodError 错误 1.原因 java 的类加载机制是把所有不同名称的本类和引用类的包全部加载到内存,这样就有一个问题,如果有两个类名一样怎么办,机器很难区分 引用类,即引用别人包中的类: public class Data(){ public static getData(){ System.o...

清泉影月 18万+

从解决一个java.lang.NoSuchMethodError想到的

今天在发布系统部署一个web app的时候,发现应用服务器(tomcat 7.0.26)不能正常启动,于是远程登陆到服务器上查看应用服务器的启动日志,在tomcat_home的logs/localhost.log.2014-03-17上发现了一段如下错误信息: java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(...

weixin_30600503的博客 379

有关C调java遇到问题总结

遇到问题(一): java.lang.NoSuchMethodError: no static method with name='add' signature='(II)I' in class Ltest/test; 找问题思路: 1. 或检查对应java类中,add函数接口是否被“static”修饰: 如果没有被“static”修饰,加上 2. 或检查对应的jar包类中,ad

liuyan20092009的专栏 718

[Android开发] RxJava2之路六 - 结合组合操作符例子Demo

一、简介列表组合操作符用于将多个Observable组合成一个单一的Observable 操作符 解析 and() , then() , when() 通过模式(And条件)和计划(Then次序)组合两个或多个Observable发射的数据集 combineLatest() 当两个Observables中的任何一个发射了一个数据时,通过一个指定的函数组合每个Observable

KeepStudy 3440

Xposed学习二:实现机制

转:http://blog.csdn.net/a6624624/article/details/48138475 在上一篇我们学习了如何在AS中创建Xposed模块,本篇来分析下官方教程中redClock的实现原理。本系列文章基于version-51 [java] view plain copy "font-size:18px;">

zhangmiaoping23的专栏 1609

java.lang.NoClassDefFoundError异常原因分析和解决方案

问题: 项目在本地没有报错,在服务器部署的时候报java.lang.NoClassDefFoundError异常。 发生此问题的时候,在本地的开发工具也会有此异常的警告(开发工具没有关闭警告提示)。 原因: 1.JVM编译时能找到合适的类,运行时不能找到导致错误。例如运行时调用某个类的方法或者访问这个类的静态成员的时,发现这个类不可用,此时Ja...

Mr_Runner的博客 2万+

xposed框架集成跟遇到的几个坑

1 引入 jar 包  XposedBridgeApi-82.jar 引入 jar 包有个巨坑 :  我们新建项目的时候是自动生成下面的代码 compile fileTree(include: ['*.jar'], dir: 'libs') 该代码作用是自动引用 libs 文件夹下的所有 jar 包的,我们集成 xposed 框架的时候这行一定要删除!!!!!!!切记 如果这行没删除 ...

u013171212的博客 1973

使用腾讯bugly更新服务遇到的坑

注册Bugly账号 bugly是腾讯开发的,可以直接使用QQ账号即可完成注册登录;bugly.qq.com/ 新建产品 配置项目 新建产品后那么可以对项目进行配置,目前APP添加的强制更新,未加入热修复; 1.导入jar文件 apply plugin: 'com.android.application' android { compileSdkVersion 27 default...

weixin_33898233的博客 6297

怎么解决java.lang.NoClassDefFoundError错误

前言在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间去不断尝试

jamesjxin的专栏 123万+

java.lang.NoSuchMethodError错误引起原因及解决方案

这个错误基本上由JVM的“全盘负责委托机制”引发的问题:因为在类路径下放置了多个不同版本的包,如commons-lang 2.x.jar和commons-lang3.x.jar都位于类路径中,代码中用到了commons-lang3.x累的某个方法,而这个方法在commons-lang2.x中不存在,JVM加载类时碰巧又从commons-lang2.x.jar中加载类,运行时就会抛出NoSuchMe

ldhsecret的专栏 2万+
上一篇: 全国首发 | 腾讯Bugly携手极客学院,「Android Crash 跟踪方法」强势上线!
下一篇: 【小萝莉说Crash】第二期:Unrecognized selector xxx 之 ForwardInvocation
腾讯Bugly
博客等级 码龄12年 1875粉丝 201原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值