Линковка Kotlin (Котлин) библиотек в Delphi, как делаю:
Хедеры линкуемых библиотек обычно громадны описанием всех типов...
Я обычно делаю свой jar на java в нем линкую зависимости и наружу для дельфи оставляю один объект с простыми функциями.
Хедер дельфи получается компактным и понятным:
package com.MyCompany.evotor;
public interface J2DCallback {
void Log(String str);
String Trans(String str);
String GetValue(String name);
void SetValue(String name, String value);
Activity GetActivity();
Context GetContext();
}
public class FiscalCoreConnection {
final private Global Instance;
public FiscalCoreConnection(J2DCallback aj2d) throws NullPointerException {
Instance = new Global(aj2d);
}
public String SendJSON(String JSON){
try{
return Instance.SendJson(JSON);
}
catch (Exception e) {
return FiscalCoreException.MakeJson(e);
}
}
}
type
J2DCallbackClass = interface(IJavaClass)
['{856654D5-7939-44DF-ACD5-E2EF8C6D3AA4}']
end;
[JavaSignature('com/MyCompany/evotor/J2DCallback')]
J2DCallbackIntf = interface(IJavaInstance)
['{025B14E9-C041-4105-9E85-83CC127CC340}']
procedure Log(str:JString); cdecl;
function Trans(str:JString):JString; cdecl;
function GetValue(name:JString):JString; cdecl;
procedure SetValue(name:JString; value:JString); cdecl;
function GetActivity():JActivity; cdecl;
function GetContext():JContext; cdecl;
end;
TJ2DCallbackImp = class(TJavaGenericImport<J2DCallbackClass, J2DCallbackIntf>) end;
[JavaSignature('com/MyCompany/evotor/FiscalCoreConnection')]
JFiscalCoreConnection = interface(JObject)
['{5797747D-D61D-4EF6-94F7-5E8994545CC2}']
function SendJSON(JSON:JString):JString; cdecl;
end;
JFiscalCoreConnectionClass = interface(JObjectClass)
['{81782882-DFCF-4FA9-BD37-02CCCF2409EA}']
function init(j2d : J2DCallbackIntf) : JFiscalCoreConnection; cdecl;
end;
TJFiscalCoreConnection = class(TJavaGenericImport<JFiscalCoreConnectionClass, JFiscalCoreConnection>)
end;
TJ2DCallback = class(TJavaLocal, J2DCallbackIntf)
public
procedure Log(str:JString); cdecl;
function Trans(str:JString):JString; cdecl;
function GetValue(name:JString):JString; cdecl;
procedure SetValue(name:JString; value:JString); cdecl;
function GetActivity():JActivity; cdecl;
function GetContext():JContext; cdecl;
end;
В Дереве External Libraries забираем jarы зависимостей
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Там же забираем kotlin-stdlib
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Но в kotlin-stdlib.jar есть "лишний" файл kotlin-stdlib-1.5.10.jar\META-INF\versions\9\module-info.class
Открываем архиватором и удаляем файл или всю папку versions
Почти все готово... Но котлин еще и посыпан сахаром и не хочет Дельфей dexится, хочет -min-sdk-version=26
Поможем Delphi:
Ищем CodeGear.Common.Targets, у меня он в "C:\Program Files (x86)\Embarcadero\Studio\21.0\bin"\
Ищем в нем --output, и перед ним вставим все про sdk. У меня получилось так:
<DxCmd>PATH $(JDKPath)\bin;$(PATH); %26 set JAVA_HOME=$(JDKPath)%26 "$(JavaDxPath)" --dex --min-sdk-version=26 --output=</DxCmd>
Далее цепляем все jar в проект
Либа производителя, Либа своя обертка, и котлин
Иии собираем!
Если есть еще зависимости делаем аналогично:
находим jar, выпиливаем META-INF\versions\9\module-info.class, линкуем в проект и собираем...
Не все зависимости используются и нужны, поэтому добавляем поштучно до тех пор пока не заведется.
Вопрос
Slym
Линковка Kotlin (Котлин) библиотек в Delphi, как делаю:
Хедеры линкуемых библиотек обычно громадны описанием всех типов...
Я обычно делаю свой jar на java в нем линкую зависимости и наружу для дельфи оставляю один объект с простыми функциями.
Хедер дельфи получается компактным и понятным:
Все зависимости в build.gradle:
В Дереве External Libraries забираем jarы зависимостей
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Там же забираем kotlin-stdlib
ПКМ Show in Explorer. Копируем в папку своего проекта и даем осознанное имя.
Но в kotlin-stdlib.jar есть "лишний" файл kotlin-stdlib-1.5.10.jar\META-INF\versions\9\module-info.class
Открываем архиватором и удаляем файл или всю папку versions
Почти все готово... Но котлин еще и посыпан сахаром и не хочет Дельфей dexится, хочет -min-sdk-version=26
Поможем Delphi:
Ищем CodeGear.Common.Targets, у меня он в "C:\Program Files (x86)\Embarcadero\Studio\21.0\bin"\
Ищем в нем --output, и перед ним вставим все про sdk. У меня получилось так:
<DxCmd>PATH $(JDKPath)\bin;$(PATH); %26 set JAVA_HOME=$(JDKPath)%26 "$(JavaDxPath)" --dex --min-sdk-version=26 --output=</DxCmd>
Далее цепляем все jar в проект
Изменено пользователем SlymЛиба производителя, Либа своя обертка, и котлин
Иии собираем!
Если есть еще зависимости делаем аналогично:
находим jar, выпиливаем META-INF\versions\9\module-info.class, линкуем в проект и собираем...
Не все зависимости используются и нужны, поэтому добавляем поштучно до тех пор пока не заведется.
добавил интерфейс
Ссылка на комментарий
1 ответ на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.