Android AIDL自动生成Java文件测试

简介: /******************************************************************************** * Android AIDL自动生成Java文件测试 * 说明: * 知道有aidl这东西已经挺久了,但是一直没有花时间来系统了解一下其工作机制,现在 * 花点时间一点一点验证一下其功能。
/********************************************************************************
 *                                 Android AIDL自动生成Java文件测试
 * 说明:
 *     知道有aidl这东西已经挺久了,但是一直没有花时间来系统了解一下其工作机制,现在
 * 花点时间一点一点验证一下其功能。
 *
 *                                                 2016-5-8 深圳 南山平山村 曾剑锋
 *******************************************************************************/

一、参考文章:
    1. Android AIDL使用详解
        http://blog.csdn.net/stonecao/article/details/6425019
    2. android进程间通信:使用AIDL
        http://blog.csdn.net/saintswordsman/article/details/5130947

二、cat forService.aidl
    package com.example.aidltest.aidl;

    import com.example.aidltest.aidl.forActivity;

    interface forService {
        void registerTestCall(forActivity cb);  
        void invokCallBack();  
    }

三、cat forService.java
    /*
     * This file is auto-generated.  DO NOT MODIFY.
     * Original file: D:\\soft\\Android\\workspace\\AidlTest\\src\\com\\example\\aidltest\\aidl\\forService.aidl
     */
    package com.example.aidltest.aidl;

    // 继承了android.os.IInterface接口
    public interface forService extends android.os.IInterface {
        /** Local-side IPC implementation stub class. */
        // Stub类继承了Binder,并继承我们在aidl文件中定义的接口
        public static abstract class Stub extends android.os.Binder implements
                com.example.aidltest.aidl.forService {
            private static final java.lang.String DESCRIPTOR = "com.example.aidltest.aidl.forService";

            /** Construct the stub at attach it to the interface. */
            public Stub() {
                this.attachInterface(this, DESCRIPTOR);
            }

            /**
             * Cast an IBinder object into an com.example.aidltest.aidl.forService
             * interface, generating a proxy if needed.
             */
            // 在使用的时候经常会看到这一部分的内容
            public static com.example.aidltest.aidl.forService asInterface(
                    android.os.IBinder obj) {
                if ((obj == null)) {
                    return null;
                }
                android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
                if (((iin != null) && (iin instanceof com.example.aidltest.aidl.forService))) {
                    return ((com.example.aidltest.aidl.forService) iin);
                }
                return new com.example.aidltest.aidl.forService.Stub.Proxy(obj);
            }

            @Override
            public android.os.IBinder asBinder() {
                return this;
            }

            @Override
            public boolean onTransact(int code, android.os.Parcel data,
                    android.os.Parcel reply, int flags)
                    throws android.os.RemoteException {
                switch (code) {
                case INTERFACE_TRANSACTION: {
                    reply.writeString(DESCRIPTOR);
                    return true;
                }
                case TRANSACTION_registerTestCall: {
                    data.enforceInterface(DESCRIPTOR);
                    com.example.aidltest.aidl.forActivity _arg0;
                    _arg0 = com.example.aidltest.aidl.forActivity.Stub
                            .asInterface(data.readStrongBinder());
                    this.registerTestCall(_arg0);
                    reply.writeNoException();
                    return true;
                }
                case TRANSACTION_invokCallBack: {
                    data.enforceInterface(DESCRIPTOR);
                    this.invokCallBack();
                    reply.writeNoException();
                    return true;
                }
                }
                return super.onTransact(code, data, reply, flags);
            }

            private static class Proxy implements
                    com.example.aidltest.aidl.forService {
                private android.os.IBinder mRemote;

                Proxy(android.os.IBinder remote) {
                    mRemote = remote;
                }

                @Override
                public android.os.IBinder asBinder() {
                    return mRemote;
                }

                public java.lang.String getInterfaceDescriptor() {
                    return DESCRIPTOR;
                }

                @Override
                public void registerTestCall(
                        com.example.aidltest.aidl.forActivity cb)
                        throws android.os.RemoteException {
                    android.os.Parcel _data = android.os.Parcel.obtain();
                    android.os.Parcel _reply = android.os.Parcel.obtain();
                    try {
                        _data.writeInterfaceToken(DESCRIPTOR);
                        _data.writeStrongBinder((((cb != null)) ? (cb.asBinder())
                                : (null)));
                        mRemote.transact(Stub.TRANSACTION_registerTestCall, _data,
                                _reply, 0);
                        _reply.readException();
                    } finally {
                        _reply.recycle();
                        _data.recycle();
                    }
                }

                @Override
                public void invokCallBack() throws android.os.RemoteException {
                    android.os.Parcel _data = android.os.Parcel.obtain();
                    android.os.Parcel _reply = android.os.Parcel.obtain();
                    try {
                        _data.writeInterfaceToken(DESCRIPTOR);
                        mRemote.transact(Stub.TRANSACTION_invokCallBack, _data,
                                _reply, 0);
                        _reply.readException();
                    } finally {
                        _reply.recycle();
                        _data.recycle();
                    }
                }
            }

            static final int TRANSACTION_registerTestCall = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
            static final int TRANSACTION_invokCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
        }

        // AIDL中自定义的方法,没有实现
        public void registerTestCall(com.example.aidltest.aidl.forActivity cb)
                throws android.os.RemoteException;

        public void invokCallBack() throws android.os.RemoteException;
    }

四、cat MainActivity.java
    public class MainActivity extends ActionBarActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        ......
        new forService.Stub() {
                
                @Override
                public void registerTestCall(forActivity cb) throws RemoteException {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public void invokCallBack() throws RemoteException {
                    // TODO Auto-generated method stub
                    
                }
            };
        ......
        }
    }

 

目录
相关文章
|
3天前
|
机器学习/深度学习 算法 异构计算
m基于FPGA的多通道FIR滤波器verilog实现,包含testbench测试文件
本文介绍了使用VIVADO 2019.2仿真的多通道FIR滤波器设计。展示了系统RTL结构图,并简述了FIR滤波器的基本理论,包括单通道和多通道的概念、常见结构及设计方法,如窗函数法、频率采样法、优化算法和机器学习方法。此外,还提供了Verilog核心程序代码,用于实现4通道滤波器模块,包含时钟、复位信号及输入输出接口的定义。
19 7
|
3天前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
28 3
|
16天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
19 0
|
17天前
|
XML 前端开发 Java
《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)
【4月更文挑战第6天】按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍定位倒数二个方法:By xpath。xpath 的定位方法, 非常强大。使用这种方法几乎可以定位到页面上的任意元素。xpath 是XML Path的简称, 由于HTML文档本身就是一个标准的XML页面,所以我们可以使用Xpath 的用法来定位页面元素。XPath 是XML 和Path的缩写,主要用于xml文档中选择文档中节点。基于XML树状文档结构,XPath语言可以用在整棵树中寻找指定的节点。
43 0
|
1天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
10 2
|
2天前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
28 1
|
2天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
16 1
|
2天前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
14 1
|
2天前
|
Android开发
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
Android源代码定制:添加customize.mk文件进行分项目和分客户的定制
2 0
|
2天前
|
Java API Android开发
Android 11 修改libcore Cipher AS测试
Android 11 修改libcore Cipher AS测试
13 1