AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JAR File einbinden

Ein Thema von laboca · begonnen am 12. Feb 2023 · letzter Beitrag vom 2. Mär 2023
Antwort Antwort
laboca

Registriert seit: 10. Apr 2012
Ort: Euskirchen, NRW
4 Beiträge
 
Delphi XE3 Professional
 
#1

JAR File einbinden

  Alt 12. Feb 2023, 01:07
Hallo,

ich hab ein 10" Android 11 Tablet was man an die Wand hängen kann mit einer Beleuchtung im Rahmen.
Zum Tablet gibt es ein Sample in Java wie die Beleuchtung zu steuern ist.
Da auch ein .jar File dabei war hab ich den in eine Bridge Datei übersetzen lassen (Java ist echt nicht meine Welt..)

Jetzt habe ich eine Bridge Datei mit Interface Deklaration.
Die Kommunikation findet wohl über "serialport" statt ("/dev/ttyS8", 9600 Baud).

In meinem Verständnis hätte ich jetzt ein Objekt erzeugt von "JLightController".
Es gibt aber irgendwie kein "Create". Da hapert es schon..
Geschweige denn ein "openDevice()" aufzurufen. Auch da stellt sich mir die Frage was ein "JContext" ist.
Google hat mich leider auch nicht weiter gebracht...

Hat jemand einen Tipp wie es weiter geht?.. oder ein Sample?
Stehe da gerade komplett auf dem Schlauch...

Herzlichen Dank,
Ralf

anbei unit der LightController.pas
insgesamt sind das 14 units mit "Java2Pas 1.6" erzeugt. Plattform Rad Studio 11.2
(kann auch gerne das komplette Java Sample einstellen)

Code:
//
// Generated by JavaToPas v1.6 20230211 - 221813
////////////////////////////////////////////////////////////////////////////////
unit com.ys.serialport.LightController;

interface

uses
  AndroidAPI.JNIBridge,
  Androidapi.JNI.JavaTypes,
  com.ys.serialport.SerialPort,
  Androidapi.JNI.GraphicsContentViewText,
  com.ys.serialport.LightController_Led,
  com.ys.serialport.LightController_LightState;

type
  JLightController = interface;

  JLightControllerClass = interface(JObjectClass)
    ['{9D8AD17E-A9A7-41BF-A663-EE15D0B5997C}']
    function _GetSTATE_HELP : JString; cdecl;                                  //  A: $0019
    function _GetSTATE_VIEW : JString; cdecl;                                  //  A: $0019
    function getInstance : JLightController; cdecl;                            // ()Lcom/ys/serialport/LightController; A: $0009
    function init : JLightController; cdecl;                                   // ()V A: $0001
    procedure close ; cdecl; overload;                                         // ()V A: $0001
    procedure close(leds : JList) ; cdecl; overload;                           // (Ljava/util/List;)V A: $0001
    procedure crazyMode(time : Integer) ; cdecl;                               // (I)V A: $0001
    procedure flashMode(time : Integer) ; cdecl;                               // (I)V A: $0001
    procedure getHelp(lightState : JLightController_LightState) ; cdecl;       // (Lcom/ys/serialport/LightController$LightState;)V A: $0001
    procedure getStatus(lightState : JLightController_LightState) ; cdecl;     // (Lcom/ys/serialport/LightController$LightState;)V A: $0001
    procedure keepMode(led : JLightController_Led; second : Integer; light : Integer) ; cdecl;// (Lcom/ys/serialport/LightController$Led;II)V A: $0001
    procedure liveMode(led : JLightController_Led; second : Integer) ; cdecl;  // (Lcom/ys/serialport/LightController$Led;I)V A: $0001
    procedure openDevice(context : JContext; dev : JString; rate : Integer) ; cdecl;// (Landroid/content/Context;Ljava/lang/String;I)V A: $0001
    procedure resume ; cdecl;                                                  // ()V A: $0001
    procedure resumeStausIfNeed(context : JContext) ; cdecl;                   // (Landroid/content/Context;)V A: $0001
    property STATE_HELP : JString read _GetSTATE_HELP;                         // Ljava/lang/String; A: $0019
    property STATE_VIEW : JString read _GetSTATE_VIEW;                         // Ljava/lang/String; A: $0019
  end;

  [JavaSignature('com/ys/serialport/LightController$LightState')]
  JLightController = interface(JObject)
    ['{5F1E8C0D-1D47-4D25-90C8-A22D83E5D858}']
    procedure close ; cdecl; overload;                                         // ()V A: $0001
    procedure close(leds : JList) ; cdecl; overload;                           // (Ljava/util/List;)V A: $0001
    procedure crazyMode(time : Integer) ; cdecl;                               // (I)V A: $0001
    procedure flashMode(time : Integer) ; cdecl;                               // (I)V A: $0001
    procedure getHelp(lightState : JLightController_LightState) ; cdecl;       // (Lcom/ys/serialport/LightController$LightState;)V A: $0001
    procedure getStatus(lightState : JLightController_LightState) ; cdecl;     // (Lcom/ys/serialport/LightController$LightState;)V A: $0001
    procedure keepMode(led : JLightController_Led; second : Integer; light : Integer) ; cdecl;// (Lcom/ys/serialport/LightController$Led;II)V A: $0001
    procedure liveMode(led : JLightController_Led; second : Integer) ; cdecl;  // (Lcom/ys/serialport/LightController$Led;I)V A: $0001
    procedure openDevice(context : JContext; dev : JString; rate : Integer) ; cdecl;// (Landroid/content/Context;Ljava/lang/String;I)V A: $0001
    procedure resume ; cdecl;                                                  // ()V A: $0001
    procedure resumeStausIfNeed(context : JContext) ; cdecl;                   // (Landroid/content/Context;)V A: $0001
  end;

  TJLightController = class(TJavaGenericImport<JLightControllerClass, JLightController>)
  end;

const
  TJLightControllerTAG = 'LightController';
  TJLightControllerMODE_LIVE_RED = 'LIVE:RED';
  TJLightControllerMODE_LIVE_GREEN = 'LIVE:GREEN';
  TJLightControllerMODE_LIVE_BLUE = 'LIVE:BLUE';
  TJLightControllerMODE_KEEP_RED = 'KEEP:RED';
  TJLightControllerMODE_KEEP_GREEN = 'KEEP:GREEN';
  TJLightControllerMODE_KEEP_BLUE = 'KEEP:BLUE';
  TJLightControllerMODE_FLASH = 'FLASH';
  TJLightControllerMODE_CRAZY = 'CRAZY';
  TJLightControllerMODE_CLOSE = 'CLOSE';
  TJLightControllerMODE_RECOVER = 'RECOVER';
  TJLightControllerSTATE_VIEW = 'VIEW';
  TJLightControllerSTATE_HELP = 'HELP';
  TJLightController_SP = 'light_S';
  TJLightController_COMMAND = '_command';

implementation

end.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: JAR File einbinden

  Alt 12. Feb 2023, 08:35
Vielleicht so?
TJLightController.JavaClass.getInstance
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
laboca

Registriert seit: 10. Apr 2012
Ort: Euskirchen, NRW
4 Beiträge
 
Delphi XE3 Professional
 
#3

AW: JAR File einbinden

  Alt 21. Feb 2023, 22:05
Vielleicht so?
TJLightController.JavaClass.getInstance
@Sebastian
Danke für den Hinweis.

ein paar Fragen hab ich, da Google mir keine Antworten liefert...

1. Wenn ich nur Java samples habe (als jar files) erstelle ich "bridge" Dateien aus den jar files.
die .jar files stellen wohl nur das reine interface zur Verfügung.

2. Soweit ich das interpretiere muss ich die libs (.so / shared objects) separat laden.
bei der "Bereitstellung" lade ich die .so Dateien, je nachdem 32bit nach "library\lib\armeabi-v7a\"
bei 64 bit nach "arm64-v8a". Ist das ok?

3. Frage: kann man die auch ins root Verzeichnis der App legen? also "TPath.GetLibraryPath"?

4. Wenn die denn nach "library\lib\armeabi-v7a\"/"arm64-v8a" eingefügt wurden.. werden die dann automatisch gefunden?

5. Um die Librarys zu laden habe ich einige Beispiele gefunden welche TPath.Combine <Pfadangabe> haben.
und den Hinweis das man "fmx.Objects , system.IOUtils," in die richtige Reihenfolge bringen soll. Bringt beides Fehler.. (11.2)

6. Reicht ein LoadLibrary?.. oder muss man explizit auf eine Java LoadLibrary? (vollkommenes Neuland..)

6. Gibt es eine TPath Funktion die auf die .so Dateien (libs) verweist? oder ist es besser die .so's wo anders zu lagern?

7. Was ist ein "JContext"? Im Aufruf soll der übergeben werden. Hatte ich schon mal gefragt...
(hab nichts gefunden was mir das erklärt..)

Wenn jemand eine Idee hat wo ich ansetzen kann, bitte gerne!
Bin gerade vollkommen ratlos...

TIA, Ralf
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#4

AW: JAR File einbinden

  Alt 22. Feb 2023, 18:53
Hallo,

LoadLibrary sollte funktionieren. SO's sind stark verwandt mit Windows DLLs
von der Semantik in Delphi.

Du könntest dir auch mal dieses Repository anschauen:
https://github.com/MHumm/Bitmaps2Video

Da werden auch .so's geladen.

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: JAR File einbinden

  Alt 22. Feb 2023, 20:50
7. Was ist ein "JContext"? Im Aufruf soll der übergeben werden. Hatte ich schon mal gefragt...
(hab nichts gefunden was mir das erklärt..)
Ab Delphi 11 ist das glaube ich TAndroidHelper.Context.

Zu den anderen Fragen kann ich leider nichts sagen. Damit habe ich bisher selbst wenig gemacht.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
laboca

Registriert seit: 10. Apr 2012
Ort: Euskirchen, NRW
4 Beiträge
 
Delphi XE3 Professional
 
#6

AW: JAR File einbinden

  Alt 2. Mär 2023, 22:29
@jaenicke
@TurboMagic

möchte nur mal kurz ein Echo geben...

vielen Dank für die Hinweise und Tipp's!

Letztendlich habe ich das aber jetzt in Kotlin umgesetzt. Ich hatte ja die Java Sourcen.
Da war es relativ einfach. Und das was fehlte lies sich schnell dazu packen.

IMHO, ich finde das ziemlich aufwändig wenn man es in Delphi umsetzen will.
Man findet wenig Doku.. viel Trial & error.. und viel Zeit geht ins Land..
Aber ich bleibe dran. Die gleiche Herausforderung wartet bestimmt schon hinter der nächsten Ecke.

Also danke euch beiden!

Ralf
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz