Перейти к содержанию
  • Регистрация
  • 0
Авторизация  
void

Подключение интерфейсов AIDL

Вопрос

Добрый день.

Собственно вопрос:

Как подключить интерфейсы AIDL к Delphi?

Есть опыт подключения jar бибилиотек.

Тут описано как действовать если есть jar файлы.
А если их нет?
Есть только AIDL файлы....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

В delphi есть класс который реализует похожую (с VisualStudio - например) технологию подключения интерфейсов
unit Androidapi.JNI.InAppBilling;

{*******************************************************}
{                                                       }
{           CodeGear Delphi Runtime Library             }
{ Copyright(c) 2013-2018 Embarcadero Technologies, Inc. }
{              All rights reserved                      }
{                                                       }
{*******************************************************}

unit Androidapi.JNI.InAppBilling;
uses
  Androidapi.JNIBridge,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Os;

type
// ===== Forward declarations =====

  JIInAppBillingService = interface;//com.android.vending.billing.IInAppBillingService
  JIInAppBillingService_Stub = interface;//com.android.vending.billing.IInAppBillingService$Stub

// ===== Interface declarations =====

  JIInAppBillingServiceClass = interface(JIInterfaceClass)
    ['{914929AF-917C-4D7E-842C-656701CACCE7}']
  end;

  [JavaSignature('com/android/vending/billing/IInAppBillingService')]
  JIInAppBillingService = interface(JIInterface)
    ['{03D4C897-6265-4854-97C6-415F5C846C0E}']
    function consumePurchase(apiVersion: Integer; packageName: JString; purchaseToken: JString): Integer; cdecl;
    function getBuyIntent(apiVersion: Integer; packageName: JString; sku: JString; type_: JString; developerPayload: JString): JBundle; cdecl;
    function getPurchases(apiVersion: Integer; packageName: JString; type_: JString; continuationToken: JString): JBundle; cdecl;
    function getSkuDetails(apiVersion: Integer; packageName: JString; type_: JString; skusBundle: JBundle): JBundle; cdecl;
    function isBillingSupported(apiVersion: Integer; packageName: JString; type_: JString): Integer; cdecl;
  end;
  TJIInAppBillingService = class(TJavaGenericImport<JIInAppBillingServiceClass, JIInAppBillingService>) end;

  JIInAppBillingService_StubClass = interface(JBinderClass)
    ['{77F4F8A3-E103-4CC1-AB9A-D373F71C6D4C}']
    {class} function init: JIInAppBillingService_Stub; cdecl;
    {class} function asInterface(obj: JIBinder): JIInAppBillingService; cdecl;
  end;

  [JavaSignature('com/android/vending/billing/IInAppBillingService$Stub')]
  JIInAppBillingService_Stub = interface(JBinder)
    ['{A5D13E53-F09B-4972-A639-BF7D7B81C242}']
    function asBinder: JIBinder; cdecl;
    function onTransact(code: Integer; data: JParcel; reply: JParcel; flags: Integer): Boolean; cdecl;
  end;
  TJIInAppBillingService_Stub = class(TJavaGenericImport<JIInAppBillingService_StubClass, JIInAppBillingService_Stub>) end;

implementation

procedure RegisterTypes;
begin
  TRegTypes.RegisterType('Androidapi.JNI.InAppBilling.JIInAppBillingService', TypeInfo(Androidapi.JNI.InAppBilling.JIInAppBillingService));
  TRegTypes.RegisterType('Androidapi.JNI.InAppBilling.JIInAppBillingService_Stub', TypeInfo(Androidapi.JNI.InAppBilling.JIInAppBillingService_Stub));
end;

initialization
  RegisterTypes;
end.



пробовал подключить подобным образом

Обращение (для подключения к интерфейсу):

....
FService := TJIInAppBillingService_Stub.JavaClass.asInterface(service);

....

Но в моем случае выдает ошибку при таком обрашщении:
Java class JIInAppBillingService_Stub could not be found
УСЛОВНО (т.е. мой класс а не в примере):
Java class MyClass_Stub could not be found

JavaSignature - перепроверено названия классов

ЧТО НУЖНО для этого обращения еще, кроме выше приведенного класса, чтобы взлетело подобное обращение?

Изменено пользователем void

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Походу все-таки нужен jar
вышеприведенный класс используется в:
C:\Program Files (x86)\Embarcadero\Studio\20.0\lib\android\debug\google-play-billing.jar

Который в свою очередь подключается в delphi

В AndroidStudio сгенерировались Java файлы с интерфейсами в Java
 

Цитата

Инструменты Android SDK генерируют интерфейс на языке программирования Java на основе вашего файла .aidl . Этот интерфейс имеет внутренний абстрактный класс с именем Stub который расширяет Binder и реализует методы из вашего интерфейса AIDL. Вы должны расширить класс Stub и реализовать методы.

Теперь вопрос:
Как из этих файлов сделать jar библиотеку?
используя все зависимости от андроида
 

Изменено пользователем void

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...