2

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

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

4

2 回答 2

5

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

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

myEclipseAIDLInterface.aidl

于 2011-05-27T12:21:04.327 回答
1

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

每个 Android 应用程序都在自己的进程中运行。所以一个应用程序不能访问另一个应用程序的内存空间,或者换句话说,一个进程不能访问另一个进程的内存。因此,为了让这种情况发生,我们需要将它们的对象分解为操作系统可以理解的原语,并为您跨边界编组对象。进行编组的代码编写起来很乏味,因此 Android 使用 AIDL 为您处理它 - 意思是,进程间通信 (IPC) 可以通过 AIDL 轻松处理。为了更好地理解,将其视为客户端和服务器应用程序之间的通信。客户端发送请求,服务器响应。本教程将通过清晰的示例和源代码以简单的方式解释这种进程间通信。为了使我们的示例简单,让我们接受计算请求。客户端应用程序将从用户那里获得两个号码并发送到服务器应用程序。服务器应用程序将执行这些数字的加法并将总和返回给客户端应用程序。

AIDL 可以按照以下步骤实现: 定义 AIDL 接口 - 与您的应用程序接口的 AIDL。实现接口 - 上面的接口将在服务中实现,以便客户端可以访问。向客户端公开接口 - 要为您的服务公开接口,请扩展 Service 并实现 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;
}

加法服务.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 文件中注册它。

就是这样..我们完成了服务器应用程序。

于 2016-01-14T07:11:31.717 回答