Android如何利用InvocationHandler动态代理调用aidl接口

Android Hook 机制之简单实战,android进程管理器 单个进程Hook; 常见 Hook 框架 在Android开发中,有以下常见的一些Hook框架: Xposed 通过替换 /system/bin/app_process 程序控制 Zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge.jar 这个 Jar 包,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机的劫持。 Xposed 在开机的时候完成对所有的 Hook Function 的劫持,在原 Function 执行的前后加上自定义代码。 . 阅读详情

众所周知,Java的InvocationHandler可以作为动态代理去调用接口方法。但是如何去调用android里面的aidl接口定义的方法呢?

经过查阅相关资料和自己实践最终得出解决方案:

1 首先利用反射获取aidl接口的实例

Class<?> reflectCallback = null;
try {
        reflectCallback =  Class.forName("com.xxx.xxx.IAidlClass"); //aidl类
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    mProxyHandler = new CallbackProxyHandler(ServiceManager.AUDIO_BOOK_KEY);
    mCallbackProxy = (IAidlClass) Proxy.newProxyInstance(
                  CallbackProxyManager.class.getClassLoader(), new Class[] { 
                  reflectCallback },
                  mProxyHandler);

2 接着去实现InvocationHandler类

public class CallbackProxyHandler implements InvocationHandler {

    String key;

    public CallbackProxyHandler(String key) {
        this.key = key;
    }

    @Override
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
        boolean result = ServiceManager.getInstance().startRemoteService(key);//启动某个service,可以忽略这句
        if (result) {
            InvokeObject invokeObject = new InvokeObject();
            invokeObject.setKey(key);
            invokeObject.setMethod(method);
            invokeObject.setObjects(objects);
            IInterface disposeInterface = IAidlClass//这里iaidl可以通过任何方式传进来
            invokeObject.getMethod().invoke(disposeInterface, invokeObject.getObjects());
            return true;
        }
       return false;
    }
}

上面的invokeObject主要存贮了被代理aidl类的相关属性和方法。

public class InvokeObject {

    private String key;

    private Method method;

    private Object[] objects;
}

这样就完成了通过动态代理去调用aidl接口的实现了。

【实践篇】Android中AIDL使用 Binder的前身是OpenBinder,它是一种通过提供远程过程调用(RPC)功能进程间通信的机制,是Android系统中的重要组成部分。在Android系统的Binder机制中,由一系统组件组成,分别是:Client、Server、ServiceManager和binder驱动。其中Client、Server和ServiceManager运行在用户空间,binder驱动运行在内核空间,binder驱动程序是核心组件,ServiceManager提供管理功能,Client和Server在binder驱动和 阅读详情

相关推荐

InvocationHandler, Proxy机制

NULL 博文链接:https://xienan123.iteye.com/blog/1008459

(转 )【Android那些高逼格的写法】InvocationHandler与代理模式

转自这个公众号: 今天会聊一下InvocationHandler。说到InvocationHandler不得不提到的就是代理模式,什么是代理模式,举个例子,你玩游戏,花钱请个代练,代练其实是登录你的账号,假装是你帮你升级打怪。再比如买房,你需要委托中介帮你去处理一些事,中介在办理这些事的时候,实际是使用你的身份证,身份信息去办理的。 代理模式也是一样,比如有一个类,有一个方法是压缩图...

weixin_34406796的博客 247

2026年5月典型AI应用落地

2026年5月AI应用全面进入商用化阶段,呈现三大特征:产业端深度渗透核心业务场景,如法律领域AI合同处理系统完成8500万元项目;消费端实现规模普及,京东618全场景AI化,智能家居产品涌现;基础设施层面运营商推出词元套餐降低使用门槛。政策法规与国际合作同步推进,日本通过首部AI专项法律,中国举办多场产业对接会。AI应用从技术验证转向实效产出,进入精算回报的成熟期。

AI_Encyc的博客 2631

Java反射以及在Android中的使用

文章内容尽可能的详细,方便自己后续查阅。 一、反射概念 ​ java反射是指,在运行状态中,对于任意一个类,都能知道这个类的所有属性及方法,对于任何一个对象,都能调用他的任何一个方法和属性,这种动态获取新的及动态调用对象的方法的功能叫做反射. 二、Class 类 (java.lang.Class) ​ Java中万物皆为对象,每个类也是一个对象,每个类的java...

Evan的博客 566

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3545

用 ABAP LSMW 的 Standard Batch / Direct Input 稳准快迁移物料主数据:从 MM01 录制到 RMDATIND 直入的落地指南

本文详细介绍了SAP数据迁移中LSMW工具的使用方法,重点分析了物料主数据迁移的两种主要路径:Batch Input Recording和Standard Batch/Direct Input。前者通过录制事务操作实现快速起步,后者通过调用预置接口程序实现稳定高效的批量处理。文章深入解析了Standard Direct Input的具体实施步骤,包括对象属性设置、源结构定义、字段映射规则等关键环节,并特别强调了迁移前的准备工作(如编号策略、视图策略等)对项目成功的重要性。通过对比两种方法的优缺点,为不同业务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

Android中如何正确的使用动态代理

首先,定义一个接口,这是动态代理所必须的。动态代理在 Android 开发中具有重要意义,可以帮助开发者实现更灵活的代码设计,支持 AOP 和权限管理等功能。在使用动态代理时,需注意性能开销和线程安全问题。通过合理设计和使用动态代理,可以大大提高代码的可维护性和复用性。

彬_小彬的博客 1025

WOFOST作物模型(1):PCSE环境配置

get_summary_output() 方法通常用于在 PCSE 模拟过程结束后,获取模拟结果的摘要信息,例如模拟期间的总产量、总水分需求等。它可以提供对模拟结果的快速总结,方便用户进行后续的分析和处理。用.get_output来获取过程参数,并将这些参数转为dataframe显示。用run_till_terminate()代表终止。安装好之后,打开jupyter notebook。也可以指定运行时间,并获取最后一天的参数。首先还是打开之前建好的gee虚拟环境。

所有专家都曾始于新手 681

Android 动态代理以及利用动态代理实现 ServiceHook

Android 利用 ServiceHook 实现特殊功能

Shawn_Dut的专栏 3万+

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 GhostNet V1 基于 Ghost Module 和 Ghost Bottlenecks的轻量化网络结构

本文记录的是基于的YOLOv11网络模型轻量化方法研究。GhostNet中的Ghost模块和Ghost瓶颈结构是其轻量化的关键。Ghost模块克服了传统卷积层计算资源需求大的问题,Ghost瓶颈则合理设计了通道数量的变化以及与捷径连接的方式,能更好地在减少计算成本的同时保持较高性能,从而提升模型在移动设备上的应用能力和效率。

Limiiiing的博客 1430

13、网络通信中的字节序与内存测试

本文主要探讨了网络通信中的字节序问题以及嵌入式系统中内存测试的相关内容。在网络通信部分,重点分析了大端序和小端序的差异,以及TCP/IP协议中字节序的转换机制,并介绍了相关的宏定义和实现方法。在内存测试部分,详细阐述了内存测试的目的、常见问题以及具体的测试策略,包括数据总线测试、地址总线测试和设备测试。通过这些内容,嵌入式程序员可以更好地理解并解决实际开发中可能遇到的字节序和内存问题,从而提高系统的稳定性和可靠性。

mmm90的博客 111

Android 静态代理和动态代理 看这一篇就够了

静态代理和动态代理 根据加载被代理类的时机不同,将代理分为静态代理和动态代理。 编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理; 运行时才确定被代理的类是哪个,那么可以使用类动态代理。 1、静态代理 public interface Subject { public void sayGoodBye(); public void sayHello(String st...

weixin_39079048的博客 4305

注意力机制与经典 CV 网络:PyTorch 实现与实战

注意力机制(SE/空间/CBAM/Non-Local)通过权重重标定让模型聚焦关键特征,经典 CNN(ResNet/DenseNet/FPN)提供了深层网络、特征复用和多尺度融合的基础骨架。建议先在 ResNet 上插入 SE 模块(通道注意力)做基线实验,再根据任务类型引入空间注意力(分割任务)或非局部注意力(视频任务)。CIFAR-10 数据集适合快速验证注意力模块的有效性,迁移到更大数据集时保持相同的结构设计思路即可。

FJN110的博客 62

Android代理模式基础

!最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧!

2401_84009993的博客 823

vue2/3 - H5 移动端网页中调用手机摄像头扫描二维码 / 条形码功能,在h5手机网页里调起相机摄像头进行二维码或条形码扫描效果详细教程(详细示例组件源码,一键复制开箱即用!)

vue扫描二维码条形码,vue网页调用摄像头扫二维码条形码,vue移动端如何实现调用相机扫描二维码,vue移动端扫一扫功能,vue怎么做移动端h5扫一扫功能,vue识别二维码和条形码,vue实现点击按钮调用摄像头扫码,vue调用本地摄像头实现拍照功能,Vue中如何进行二维码生成与扫描,如何实现vue在手机浏览器中调用摄像头实现扫描二维码功能,VUE项目移动端H5调用摄像头扫码,vue项目中实现H5调取摄像头,网页调用摄像头实现二维码扫描功能,vue调用手机摄像头,vue在调用摄像头扫码,vue自定义打开摄像

✅ 精选推荐文章 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android开发中的代理模式

上一篇文章Android开发中单例模式写法与可能遇到的坑讲到了单例模式的一般写法,本篇继续总结一下Android(Java)中比较常用的代理模式。和单例模式一样,代理模式也是经常使用到的,使用过Spring的小伙伴,应该比较清楚,其AOP代理就默认使用JDK自带动态代理来生成代理类的。在Android中很多基于Binder机制的系统服务如ActivityManagerService、自己定义的AID

chenkai19920410的专栏 3325

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android动态代理以及利用动态代理实现ServiceHook

Java 的动态代理 首先我们要介绍的就是 Java 动态代理,Java 的动态代理涉及到两个类:InvocationHandler 接口和 Proxy 类,下面我们会着重介绍一下这两个类,并且结合实例来着重分析一下使用的正确姿势等。在这之前简单介绍一下 Java 中 class 文件的生成和加载过程,Java 编译器编译好 Java 文件之后会在磁盘...

weixin_33725239的博客 287

ssm框架搭建

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android代理模式基础,该如何高效实用Kotlin

default:// 主要关注代理模式的实现;可以看到AIDL的Proxy是通过静态代理模式实现try {if (!= null) {

2401_84150187的博客 722

Android代理模式基础,android性能优化和内存优化

Override// 主要关注代理模式的实现;可以看到AIDL的Proxy是通过静态代理模式实现try {if (!= null) {

657

Android跨进程通信之AIDL

Android跨进程通信之AIDL目录 1. AIDL的概念 2. AIDL的基本使用方法 3. AIDL在Android5.0以后的更新使用一、AIDL的概念AIDL是Android Interface definition language(Android接口定义语言)的缩写,是Android中IPC(Inter-Process Communication)(进程间通信)方式中的一种。AI

DemonMU的博客 653

Android代理模式基础,flutterandroid混合开发

// Declare any non-default types here with import statements public interface IMyAidlInterface extends android.os.IInterface { /** Default implementation for IMyAidlInterface. / public static class Default implements com.bc.sample.IMyAidlInterface { @Overr

m0_65145426的博客 164

Android代理模式基础讲解

一、代理模式 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。 二、静态代理 静态代理的代理类持有被代理者的引用,在方法调用时,代理对象调用了被代理对象去执行真正的实现。 2.1 简单示例 假如对于一个日志处理功能,可通过代理类代理实例日志处理类: // 1.首先定义接口层 interface ILogProcessor { public void printLog(String log); } // 2.定义实现类 public class MainLogProcess

m0_64420071的博客 599
上一篇: Javadoc 识别@hide标记Tag之doclava
下一篇: Android Gradle7.0 allowInsecureProtocol (true)依然无法引入Maven库的解决方案
T-Quake
博客等级 码龄20年 103粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值