java - 使用 Java 在 Android 中进行方法 Swizzling

标签 java android

是否可以使用 java 在 android 中进行方法调配?我想拦截一个系统方法并记录它的参数然后正常处理它

最佳答案

我认为该技术不能在任何环境中使用 Java。

也许您可以使用 AOP 实现类似的结果。

但是在 Android 上,您可以用它做的事情看起来很有限。参见 Aspect-oriented programming in android .事实上,由于您不会编译目标代码(系统方法),因此编译时编织(这似乎是您可以在 Android 上使用的所有内容)对于这种情况将毫无用处。我想这个答案也是如此。

还有一个想法...我猜您想始终如一地执行此日志记录。但是如果你需要它来调试问题,你可以使用 conditional breakpoint in Eclipse 来完成。 .

A conditional expression can contain arbitrary Java code and may contain more than one statement, allowing breakpoint conditions to implement features like tracing. For example, a condition can execute a print statement and then return a hard coded value to never suspend ("System.out.println(...); return false;").

我不知道这是否适用于 Android SDK 中的方法。但它确实适用于 Java SDK 中的方法。例如,这是一个简单的代码:

    System.err.println("foo");

我在 PrintStream.print 中设置了条件断点,如下所示:

System.err.println("hello: " + arg0);
return false;

程序调试时的控制台输出是这样的:

hello: foo
foo

请注意,由于 JDK 未使用调试符号进行编译,因此我无法通过名称引用方法参数,而是使用 arg0..argn

关于java - 使用 Java 在 Android 中进行方法 Swizzling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403273/

相关文章:

java - 为什么 Double.compare() 比较数字两次

java - Java 简介 - 出了什么问题?

java - 在更新时升级部署的 Android 应用程序上的数据库

android - 使用自定义监听器扩充类时出错

android - 从图库或相机中选择图像的对话框

java - 在 BorderPane 中设置节点位置时出错

java - 当我们使用 hibernate 5.3.1.Final 依赖项在 hibernate.cfg.xml 文件中启用查询缓存时,为什么会出现异常?

java - Spring 依赖注入(inject)到带有构造函数的类

android - 改变方向时不要改变背景

Android - 按钮高度不会改变