当我对AIDL一无所知的时候,想去了解一下,网上一搜,虽然有很多资料,博客是写这个的,但是,一无所知的我看不懂呀。各种关于Android studio 使用 AIDL的,但是讲解不是很细致,总是版图而废。鉴于此,我想记录一下我的学习过程,一步步演示怎么用AndroidStudio 创建 AIDL 。如果能帮助到你,是我莫大的荣幸。也欢迎各位大佬拍砖。
这是一篇入门级别的文章,大牛请移步,专为像笔者这样的小白分享。
创建项目 (大牛略过)
首先创建项目,我们命名为AIDLTest好了。
最小SDK根据你需要自行设定,这里我选用 API 19。当然,这个不重要。
为了更好突出AIDL相关的说明,我们选择创建 Empty Activity .然后点击 next。
到此为止,项目创建完毕。如果你是大牛,恐怕要觉得小儿科了吧。
创建AIDL 文件夹及 aidl 文件
然后选中文件夹,右键创建aidl文件
如果我们不修改Android studio 默认的文件名,直接finish,则最终结果 如下:
查看自动生成的Java文件
此时,把项目的查看方式切换到 project选项,依次切换 目录 app->build->generated->source->aidl->debug.此时,你发现debug文件夹为空。好,下面编译一下程序,点击control + F9或者点击 build -> make project.或者点击Rebuild.反正只要能编译下程序就行。然后再次查看debug文件夹,如下图
完成
此时,aidl文件用Android Studio 创建完成.
/*
* This file is auto-generated. DO NOT MODIFY.
* Original file: D:\\Users\\AS04\\AIDLTest\\app\\src\\main\\aidl\\com\\kite\\aidltest\\IMyAidlInterface.aidl
*/
package com.kite.aidltest;
// Declare any non-default types here with import statements
public interface IMyAidlInterface extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements com.kite.aidltest.IMyAidlInterface
{
private static final java.lang.String DESCRIPTOR = "com.kite.aidltest.IMyAidlInterface";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/**
* Cast an IBinder object into an com.kite.aidltest.IMyAidlInterface interface,
* generating a proxy if needed.
*/
public static com.kite.aidltest.IMyAidlInterface asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin!=null)&&(iin instanceof com.kite.aidltest.IMyAidlInterface))) {
return ((com.kite.aidltest.IMyAidlInterface)iin);
}
return new com.kite.aidltest.IMyAidlInterface.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_add:
{
data.enforceInterface(DESCRIPTOR);
int _arg0;
_arg0 = data.readInt();
int _arg1;
_arg1 = data.readInt();
int _result = this.add(_arg0, _arg1);
reply.writeNoException();
reply.writeInt(_result);
return true;
}
}
return super.onTransact(code, data, reply, flags);
}
private static class Proxy implements com.kite.aidltest.IMyAidlInterface
{
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 int add(int num1, int num2) throws android.os.RemoteException
{
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
int _result;
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeInt(num1);
_data.writeInt(num2);
mRemote.transact(Stub.TRANSACTION_add, _data, _reply, 0);
_reply.readException();
_result = _reply.readInt();
}
finally {
_reply.recycle();
_data.recycle();
}
return _result;
}
}
static final int TRANSACTION_add = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
}
public int add(int num1, int num2) throws android.os.RemoteException;
}