在Eclipse中创建AIDL文件

时间:2011-03-08 12:30:14

标签: android eclipse aidl

一个简单的问题......如何使用Eclipse在Android项目中创建AIDL文件?例如,如果我尝试选择File -> New -> Other...,则ADT无法创建AIDL。 AIDL或多或少是一个接口,但如果我创建一个接口(类),则使用.java扩展名生成该文件。在Eclipse中,我不能简单地重构类以给它一个.aidl扩展名。

也许我过分依赖ADT来完成一项如此微不足道的任务,但是我很惊讶没有看到创建AIDL文件的简单方法。当然,我也可以创建一个新文件并给它自己的扩展名,但是AIDL文件没有自动语法高亮显示。

2 个答案:

答案 0 :(得分:5)

右键单击包 - >新的 - >文件

然后输入您的interfacename以及您的aidl扩展名,例如:

myEclipseAIDLInterface.aidl

答案 1 :(得分:1)

首先让我解释一下AIDL文件是什么:

每个Android应用程序都在自己的进程中运行。因此,一个应用程序无法访问另一个应用程序的内存空间,换句话说,一个进程无法访问其他进程的内存。因此,为了实现这一点,我们需要将对象分解为操作系统可以理解的基元,并为您跨越该边界对象进行编组。  执行编组的代码编写起来很繁琐,因此Android使用AIDL为您处理它 - 这意味着可以通过AIDL轻松处理Inter Process通信(IPC)。为了更好地理解,请将其视为客户端和服务器应用程序之间的通信。客户端发送请求,服务器响应。            本教程将以简单的方式使用清晰的示例和源代码来解释此进程间通信。为了使我们的示例简单,我们采取计算请求。客户端应用程序将从用户获取两个号码并发送到服务器应用程序。服务器应用程序将执行这些数字的添加并将总和返回给客户端应用程序。

可以按照以下步骤实现AIDL: 定义AIDL接口 - 连接应用程序的AIDL。 实现接口 - 上面的接口将在服务中实现,以便客户端可以访问。 将接口公开给客户端 - 要公开服务接口,请扩展服务并实现onBind()

定义AIDL接口                  此文件使用方法签名定义编程接口。应在.aidl文件中定义AIDL接口。在我们的例子中,它的IAdd.aidl包含以下代码。

IAdd.aidl

package com.example.android_additionservice;
interface IAdd
{
int add(int num1, int num2);
}

当我们构建应用程序时,Android SDK生成与此.aidl文件对应的.java文件,其名称与IAdd.java相同。生成的接口包括一个名为Stub的子类,它是其父接口的抽象实现,并声明.aidl文件中的所有方法

实现接口(AdditionService.java)                  要实现从.aidl生成的接口,请扩展生成的Binder接口并实现从.aidl文件继承的方法。在我们的例子中,我们需要在这里实现add方法。现在mBinder是Stub类(Binder)的一个实例,它定义了服务的RPC接口。

 private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
return (num1 + num2);
}
};

向客户端公开接口(AdditionService.java)                  实现接口后,我们需要将其公开给其他应用程序来访问它。为其扩展服务并实现onBind()以返回实现生成的存根的类的实例。

public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
 return mBinder;
}

AdditionService.java

package com.example.android_additionservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import com.example.android_additionservice.IAdd;

public class AdditionService extends Service {
public IBinder onBind(Intent intent) {
 // TODO Auto-generated method stub
return mBinder;
} 


// IAdd definition is below  


private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override



public int add(int num1, int num2) throws RemoteException {
// TODO Auto-generated method stub
return (num1 + num2);
}
};
}

在AndroidManifest.xml中注册服务          由于服务器应用程序是一项服务,因此请在AndroidManifest.xml文件中注册它。

多数民众赞成......我们完成了服务器应用程序。