android studio AIDL使用方法。
来源:互联网 发布:阿里云公共dns 编辑:程序博客网 时间:2024/04/28 11:06
最近学习aidl,在as上遇到了问题,老是出现问题,这里总结一下aidl的用法。
因为例子中需要使用自定义类型作为传入参数,所以这篇文章基于此背景写的。
step one:
在你的src/main目录下新建一个aidl的文件夹,然后在aidl文件夹中新建一个包,注意,这的包名要完全等同于androidMainfest里面的包名,然后我们在其中初始化我们自定义的类型(Book),Book.aidl是Book类在AIDL中的生命,IBookManager是我们定义的一个接口。
结构如下:
step two:
我们需要在gradle里面添加如下的语句:
sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', 'src/main/aidl'] resources.srcDirs = ['src/main/java', 'src/main/aidl'] aidl.srcDirs = ['src/main/aidl'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] } }
因为aidl文件我们初始化后,如果没有告诉as自定类型在哪里,它自己根本找不到,(这个白痴,让我弄了好久,吐槽一下)。
step three:
重新Build一下project就可以了,就有相关的信息出现在bulid/generated/source/aidl/debug里面了
如下:
最后生成的效果如下:
/* * This file is auto-generated. DO NOT MODIFY. * Original file: /Users/linchen/Desktop/MyApplication/app/src/main/aidl/com/mytest/adiltest/BookManager.aidl */package com.mytest.adiltest;public interface BookManager extends android.os.IInterface { /** * Local-side IPC implementation stub class. */ public static abstract class Stub extends android.os.Binder implements com.mytest.adiltest.BookManager { private static final java.lang.String DESCRIPTOR = "com.mytest.adiltest.BookManager"; /** * Construct the stub at attach it to the interface. */ public Stub() { this.attachInterface(this, DESCRIPTOR); } /** * Cast an IBinder object into an com.mytest.adiltest.BookManager interface, * generating a proxy if needed. */ public static com.mytest.adiltest.BookManager asInterface(android.os.IBinder obj) { if ((obj == null)) { return null; } android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR); if (((iin != null) && (iin instanceof com.mytest.adiltest.BookManager))) { return ((com.mytest.adiltest.BookManager) iin); } return new com.mytest.adiltest.BookManager.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_getBookList: { data.enforceInterface(DESCRIPTOR); java.util.List<com.mytest.adiltest.Book> _result = this.getBookList(); reply.writeNoException(); reply.writeTypedList(_result); return true; } case TRANSACTION_addBook: { data.enforceInterface(DESCRIPTOR); com.mytest.adiltest.Book _arg0; if ((0 != data.readInt())) { _arg0 = com.mytest.adiltest.Book.CREATOR.createFromParcel(data); } else { _arg0 = null; } this.addBook(_arg0); reply.writeNoException(); return true; } } return super.onTransact(code, data, reply, flags); } private static class Proxy implements com.mytest.adiltest.BookManager { 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 java.util.List<com.mytest.adiltest.Book> getBookList() throws android.os.RemoteException { android.os.Parcel _data = android.os.Parcel.obtain(); android.os.Parcel _reply = android.os.Parcel.obtain(); java.util.List<com.mytest.adiltest.Book> _result; try { _data.writeInterfaceToken(DESCRIPTOR); mRemote.transact(Stub.TRANSACTION_getBookList, _data, _reply, 0); _reply.readException(); _result = _reply.createTypedArrayList(com.mytest.adiltest.Book.CREATOR); } finally { _reply.recycle(); _data.recycle(); } return _result; } @Override public void addBook(com.mytest.adiltest.Book book) throws android.os.RemoteException { android.os.Parcel _data = android.os.Parcel.obtain(); android.os.Parcel _reply = android.os.Parcel.obtain(); try { _data.writeInterfaceToken(DESCRIPTOR); if ((book != null)) { _data.writeInt(1); book.writeToParcel(_data, 0); } else { _data.writeInt(0); } mRemote.transact(Stub.TRANSACTION_addBook, _data, _reply, 0); _reply.readException(); } finally { _reply.recycle(); _data.recycle(); } } } static final int TRANSACTION_getBookList = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0); static final int TRANSACTION_addBook = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1); } public java.util.List<com.mytest.adiltest.Book> getBookList() throws android.os.RemoteException; public void addBook(com.mytest.adiltest.Book book) throws android.os.RemoteException;}
参考文章:
http://www.android100.org/html/201507/15/165012.html
http://blog.csdn.net/wuyuxing24/article/details/46948961
0 0
- android studio AIDL使用方法。
- Android Studio中AIDL使用方法
- Android Studio中AIDL使用方法
- Android Studio下AIDL的使用方法
- Android AIDL使用方法详解
- Android Aidl 的使用方法
- Android studio import aidl
- Android Studio 使用AIDL
- Android Studio导入aidl
- [Android Studio] AIDL
- Android studio AIDL详解
- AIDL导入Android Studio
- Android Studio 使用AIDL
- Android Studio AIDL
- Android Studio新建AIDL
- Android Studio 使用AIDL
- Android studio中的aidl
- android studio 创建aidl
- 面试常见问题及相关答案整理(持续更新中)
- 前端框架
- 102.Oracle数据库SQL开发之 表——获得有关表的信息
- c语言基础总结(一)
- Yaroslav and Permutations
- android studio AIDL使用方法。
- HDU1166(树状数组)
- Codeforces Round #333 (Div. 2) B C D
- 103.Oracle数据库SQL开发之 表——获得表中列的信息
- 5.1.5 time对象
- 交叉编译构建环境搭建
- UML——重要吗?
- 异常之java.net.BindException: Address already in use: JVM_Bind
- Sublime Text 2 中文包