![]() |
JAR File einbinden
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. |
AW: JAR File einbinden
Vielleicht so?
Delphi-Quellcode:
TJLightController.JavaClass.getInstance
|
AW: JAR File einbinden
Zitat:
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 |
AW: JAR File einbinden
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: ![]() Da werden auch .so's geladen. Grüße TurboMagic |
AW: JAR File einbinden
Zitat:
Zu den anderen Fragen kann ich leider nichts sagen. Damit habe ich bisher selbst wenig gemacht. |
AW: JAR File einbinden
@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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz