Создание файла AIDL в Eclipse - PullRequest
2 голосов
/ 08 марта 2011

Простой вопрос ... как создавать файлы AIDL в проекте Android с помощью Eclipse?Например, если я пытаюсь выбрать File -> New -> Other..., ADT не может создать AIDL.AIDL - это более или менее интерфейс, но если я создаю интерфейс (класс), файл создается с расширением .java.В Eclipse я не могу просто реорганизовать класс, чтобы дать ему расширение .aidl.

Возможно, я слишком полагаюсь на ADT для такой тривиальной задачи, но я удивлен, что не вижупростой способ создать файл AIDL.Конечно, я также могу просто создать новый файл и присвоить ему собственное расширение, но тогда файл AIDL не имеет автоматической подсветки синтаксиса.

Ответы [ 2 ]

5 голосов
/ 27 мая 2011

щелкните правой кнопкой мыши пакет -> новый -> Файл

затем введите ваше имя интерфейса вместе с расширением aidl, например:

myEclipseAIDLInterface.aidl

1 голос
/ 14 января 2016

Сначала позвольте мне объяснить, что такое файл 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 генерирует файл .java, соответствующий этому файлу .aidl, с тем же именем, что и 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.

Вот и все .. Мы закончили с серверным приложением.

...