Kotlin书写动态代理method.invoke(iam, *args) must not be null

在Kotlin中实现动态代理时遇到错误,具体表现为`method.invoke(iam, *args)`返回值为null。问题源于Java和Kotlin对可变长参数的不同处理。Java的可变长参数可以用数组传递,而Kotlin的`*args`是vararg转换。尝试将Java代码转换为Kotlin后,虽然参数类型匹配,但仍然报错。解决方案是将返回类型更改为`Any?`,最终使代码能够正常运行。然而,此问题引发疑问:Java中`Object`类型的返回值如何能接受无返回值的方法调用。" 133165284,19974074,SAP UI代码故障排查指南,"['SAP UI', '前端开发', 'JavaScript', '错误处理']
摘要由CSDN通过智能技术生成

问题

1.动态代理使用Kotlin书写报错

描述
    Process: com.y.hookdemo, PID: 24014
    java.lang.IllegalArgumentException: method android.app.IActivityManager$Stub$Proxy.getActivityDisplayId argument 1 has type android.os.IBinder, got java.lang.Object[]
        at java.lang.reflect.Method.invoke(Native Method)
        at com.y.hookdemo.HookUtil$HookInvocationHandler.invoke(HookUtil.kt:121)
  • kotlin书写:
    private class HookInvocationHandler(private val iam: Any): InvocationHandler {

        @Throws(Throwable::class)
        override fun invoke(proxy: Any, method: Method, args: Array<Any>): Any {
            if (method.name.contains("startActivity")) {
                Log.e("Hook", "IActivityManager动态代理的invoke方法,伪装intent")
                for (i in args.indices) {
                    if (args[i] is Intent) {
 
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值