【错误记录】反射内部类报错 ( Android 使用 Hook 时反射内部类报错 )
文章目录
- 一、报错信息
- 二、解决方案
一、报错信息
使用场景 : 需要 Hook 住 View 的 OnClickListener 点击方法 , 该监听器在 View 的内部类 ListenerInfo 中 , 需要先通过反射 , 得到 ListenerInfo 字节码对象 ;
// 反射获取 OnClickListener 成员
// ① 先根据全类名获取 ListenerInfo 字节码
Class<?> clazz = null;
try {clazz = Class.forName("android.view.View.ListenerInfo");
} catch (ClassNotFoundException e) {e.printStackTrace();
}
报错信息 :
2021-06-17 10:28:27.453 31301-31301/com.example.plugin_hook W/System.err: java.lang.ClassNotFoundException: android.view.View.ListenerInfo
2021-06-17 10:28:27.453 31301-31301/com.example.plugin_hook W/System.err: at java.lang.Class.classForName(Native Method)
2021-06-17 10:28:27.453 31301-31301/com.example.plugin_hook W/System.err: at java.lang.Class.forName(Class.java:453)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at java.lang.Class.forName(Class.java:378)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at com.example.plugin_hook.MainActivity.hook(MainActivity.java:67)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at com.example.plugin_hook.MainActivity.onCreate(MainActivity.java:32)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.Activity.performCreate(Activity.java:7144)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.Activity.performCreate(Activity.java:7135)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.os.Looper.loop(Looper.java:193)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6718)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at java.lang.reflect.Method.invoke(Native Method)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View.ListenerInfo" on path: DexPathList[[zip file "/data/app/com.example.plugin_hook-IURzN0enGDqjeLown9_p1w==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.plugin_hook-IURzN0enGDqjeLown9_p1w==/lib/arm64, /system/lib64]]
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
2021-06-17 10:28:27.454 31301-31301/com.example.plugin_hook W/System.err: ... 20 more
2021-06-17 10:28:27.456 31301-31301/com.example.plugin_hook E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.example.plugin_hook, PID: 31301java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.plugin_hook/com.example.plugin_hook.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.reflect.Field java.lang.Class.getField(java.lang.String)' on a null object referenceat android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)at android.os.Handler.dispatchMessage(Handler.java:106)at android.os.Looper.loop(Looper.java:193)at android.app.ActivityThread.main(ActivityThread.java:6718)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.reflect.Field java.lang.Class.getField(java.lang.String)' on a null object referenceat com.example.plugin_hook.MainActivity.hook(MainActivity.java:75)at com.example.plugin_hook.MainActivity.onCreate(MainActivity.java:32)at android.app.Activity.performCreate(Activity.java:7144)at android.app.Activity.performCreate(Activity.java:7135)at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6718) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2021-06-17 10:28:27.463 31301-31301/com.example.plugin_hook I/Process: Sending signal. PID: 31301 SIG: 9
二、解决方案
在此记录下 , 这种低级错误以后少犯 , 内部类要使用
包名.外部类$内部类
的形式 , 进行表示 ;
android.view.View$ListenerInfo
是 ListenerInfo 的正确表示方式 , 外部类与内部类之间使用 $ 符号 ;
修改后 :
// 反射获取 OnClickListener 成员
// ① 先根据全类名获取 ListenerInfo 字节码
Class<?> clazz = null;
try {clazz = Class.forName("android.view.View$ListenerInfo");
} catch (ClassNotFoundException e) {e.printStackTrace();
}
【错误记录】反射内部类报错 ( Android 使用 Hook 时反射内部类报错 )相关推荐
- 【错误记录】PyCharm 中从 GitHub 中 Clone 代码到本地报错 ( OpenSSL SSL_read: Connection was reset, errno 10054 )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 PyCharm 中从 GitHub 中 Clone 代码到本地报错 : 10:01:37.091: [C:\Users\octop\Pychar ...
- 【错误记录】IntelliJ IDEA 中 Java 代码中的中文注释报错 ( Menu / File / Settings / Editor / File Encodings 中修改工程编码 )
文章目录 一.报错信息 二.解决方案 一.报错信息 在 IntelliJ IDEA 中 , 出现中文注释报错 ; Y:\002_WorkSpace\003_IDEA\Groovy_Demo\src\m ...
- android项目模块导入eclipse编译报错,android中studio导入eclipse项目报错怎么办
android中studio导入eclipse项目报错怎么办 发布时间:2020-07-15 17:34:45 来源:亿速云 阅读:96 作者:清晨 这篇文章将为大家详细讲解有关android中stu ...
- mysql查询报错2014_mysql Hibernate 查询时用别名报错
mysqlHibernate查询时用别名报错在mysql查询工具中,能正常执行SQL:SELECTROLE_IDASVALUE,SNAMEASTESTFROMSYS_ROLEORDERBYROLE_I ...
- php项目webpack打包,Vue项目webpack打包部署时Tomcat刷新报404错误问题如何处理
这次给大家带来Vue项目webpack打包部署时Tomcat刷新报404错误问题如何处理,Vue项目webpack打包部署时Tomcat刷新报404错误问题处理的注意事项有哪些,下面就是实战案例,一起 ...
- android socket_盘点Android常用Hook技术
Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术.可以用于绕过系统限制.修改别人发布的代码.动态化.调用隐藏API.插件化.组件化.自动化测试.沙箱等等. Hook如果要跨进程 ...
- 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )
文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...
- 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...
- 【错误记录】Android Studio 编译报错 ( SDK location not found )
文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...
最新文章
- 31页PPT概述:图神经网络表达能力有多强?
- 如何从Android中的另一个应用程序启动活动
- leetcode 150. 逆波兰表达式求值(栈)
- origin对独立曲线进行操作
- 神奇的datetime和datetime,一毫秒引发的血案
- 山东大学操作系统课设
- win7系统gpt分区激活工具哪个好?
- Google关停中国区域翻译服务后继续使用Chrome自带翻译插件的方法教程
- 会员(用户)数据化运营——分析模型
- android scroller,高级UI第四十四篇:Android Scroller详解
- 改html更改百度首页背景颜色,百度地图_更改标注颜色
- ubuntu从本地上传文件到云服务器、从云服务器下载文件到本地的命令(亲测有效)
- vbs和java有关系吗_Java程序员所需的批处理和VBS脚本 (转载)
- qt 实现导航栏切换页面功能 stackedWidget
- 基础平台项目之集成Jquery.pagination.js实现分页
- 11-02 生产环境部署 部署微电影网站
- 毕业设计之 --- 基于深度学习的行人重识别(person reid)
- 软考高级 真题 2012年上半年 信息系统项目管理师 案例分析
- 腾讯云安装和搭建宝塔面板详细教程
- 诺基亚手机锁码忘记了,手机锁了,格式化忘记锁码了怎么办?
热门文章
- Python 基础教程(第2版) 中文版+英文原版下载
- zabbix 3.2.2 server端(源码包)安装部署 (一)【转】
- C#中抽象类和接口的区别与使用
- JAVA课程设计——“小羊吃蓝莓”小游戏
- Spring MVC静态资源处理
- golang使用reflects调用方法时,方法名需要首字母大写
- javascript动画函数封装(升级版)
- Android 动态Tab分页效果实现
- 【javascript】函数调用的对象和方法
- Python机器学习笔记:深入理解Keras中序贯模型和函数模型