Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Java2Pas für FMX / Android (https://www.delphipraxis.net/179781-java2pas-fuer-fmx-android.html)

Union 1. Apr 2014 11:46


Java2Pas für FMX / Android
 
Liste der Anhänge anzeigen (Anzahl: 1)
Java2Pas ist ein Konverter um Delphi .pas Sourcen aus Android .class oder .jar Dateien zu erstellen. Dies erleichtert die Tipparbeit bei der Integration neuer Klassen in das FMX-Framework ganz erheblich.

Dies ist eine kostenlose Version für Mitglieder der DelphiPraxis.

Aufruf: Java2Pas <.class|.jar> [outputpath]

Erzeugt .pas Units aus .class Dateien oder aus allen .class Dateien innerhalb einer .jar Datei und schreibt diese im aktuellen Verzeichnis, oder in das durch den Parameter outputpath angegebene. Informationen über die Analyse der Java-Klassen werden in die Standardausgabe geschrieben und können umgeleitet werden.

Es werden auch Konstanten für konstante Properties angelegt, somit kann man evtl. etwas Laufzeit sparen da man die Getter nicht aufrufen muss und in einigen Fällen nicht einmal die Klasse instantiieren. Die uses werden für bekannte FMX units sowie für benötige importierte Java-Klassen automatisch erstellt.

Die Java-Signaturen (Format (ParamTyp1[;][..ParamTypn[;]])ReturnTyp ) und Zugriffs-Flags (A: $<Hexwert>) werden als Kommentar integriert, so dass man evtl. vorhandene Fehler leicht selber beheben kann.

Einschränkungen: Erzeugt nur komplette Implementation für JObject Interfaces von Klassen aus dem android/ Namespace. Die JObjectClass Implementation ist aber immer vollständig.

Uses (besonders zirkuläre Referenzen) sowie Definitionen von Abstrakten Interface-Definitionen und auch einige reservierte Symbolnamen müssen bei Bedarf angepaßt werden.

Beispielausgabe für android.app.AlarmManager.class:
Delphi-Quellcode:
//
// Generated by JavaToPas 20142503 - 225052
////////////////////////////////////////////////////////////////////////////////
unit android.app.AlarmManager;

interface

uses
  AndroidAPI.JNIBridge,
  Androidapi.JNI.JavaTypes,
  android.app.PendingIntent;

type
  JAlarmManager = interface;

  JAlarmManagerClass = interface(JObjectClass)
    ['{A87F06C0-7AAC-4594-A68E-6BEBE7BB69C8}']
    function _GetELAPSED_REALTIME : Integer; cdecl;                            //  A: $19
    function _GetELAPSED_REALTIME_WAKEUP : Integer; cdecl;                     //  A: $19
    function _GetINTERVAL_DAY : Int64; cdecl;                                  //  A: $19
    function _GetINTERVAL_FIFTEEN_MINUTES : Int64; cdecl;                      //  A: $19
    function _GetINTERVAL_HALF_DAY : Int64; cdecl;                             //  A: $19
    function _GetINTERVAL_HALF_HOUR : Int64; cdecl;                            //  A: $19
    function _GetINTERVAL_HOUR : Int64; cdecl;                                 //  A: $19
    function _GetRTC : Integer; cdecl;                                         //  A: $19
    function _GetRTC_WAKEUP : Integer; cdecl;                                  //  A: $19
    procedure &set(&type : Integer; triggerAtMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJLandroid/app/PendingIntent;)V A: $1
    procedure cancel(operation : JPendingIntent) ; cdecl;                      // (Landroid/app/PendingIntent;)V A: $1
    procedure setInexactRepeating(&type : Integer; triggerAtMillis : Int64; intervalMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJJLandroid/app/PendingIntent;)V A: $1
    procedure setRepeating(&type : Integer; triggerAtMillis : Int64; intervalMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJJLandroid/app/PendingIntent;)V A: $1
    procedure setTime(millis : Int64) ; cdecl;                                 // (J)V A: $1
    procedure setTimeZone(timeZone : JString) ; cdecl;                         // (Ljava/lang/String;)V A: $1
    property ELAPSED_REALTIME : Integer read _GetELAPSED_REALTIME;             // I A: $19
    property ELAPSED_REALTIME_WAKEUP : Integer read _GetELAPSED_REALTIME_WAKEUP;// I A: $19
    property INTERVAL_DAY : Int64 read _GetINTERVAL_DAY;                       // J A: $19
    property INTERVAL_FIFTEEN_MINUTES : Int64 read _GetINTERVAL_FIFTEEN_MINUTES;// J A: $19
    property INTERVAL_HALF_DAY : Int64 read _GetINTERVAL_HALF_DAY;             // J A: $19
    property INTERVAL_HALF_HOUR : Int64 read _GetINTERVAL_HALF_HOUR;           // J A: $19
    property INTERVAL_HOUR : Int64 read _GetINTERVAL_HOUR;                     // J A: $19
    property RTC : Integer read _GetRTC;                                       // I A: $19
    property RTC_WAKEUP : Integer read _GetRTC_WAKEUP;                         // I A: $19
  end;

  [JavaSignature('android/app/AlarmManager')]
  JAlarmManager = interface(JObject)
    ['{51B4D906-1804-4540-B40B-75F650A76293}']
    procedure &set(&type : Integer; triggerAtMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJLandroid/app/PendingIntent;)V A: $1
    procedure cancel(operation : JPendingIntent) ; cdecl;                      // (Landroid/app/PendingIntent;)V A: $1
    procedure setInexactRepeating(&type : Integer; triggerAtMillis : Int64; intervalMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJJLandroid/app/PendingIntent;)V A: $1
    procedure setRepeating(&type : Integer; triggerAtMillis : Int64; intervalMillis : Int64; operation : JPendingIntent) ; cdecl;// (IJJLandroid/app/PendingIntent;)V A: $1
    procedure setTime(millis : Int64) ; cdecl;                                 // (J)V A: $1
    procedure setTimeZone(timeZone : JString) ; cdecl;                         // (Ljava/lang/String;)V A: $1
  end;

  TJAlarmManager = class(TJavaGenericImport<JAlarmManagerClass, JAlarmManager>)
  end;

const
  TJAlarmManagerRTC_WAKEUP = 0;
  TJAlarmManagerRTC = 1;
  TJAlarmManagerELAPSED_REALTIME_WAKEUP = 2;
  TJAlarmManagerELAPSED_REALTIME = 3;
  TJAlarmManagerINTERVAL_FIFTEEN_MINUTES = 900000;
  TJAlarmManagerINTERVAL_HALF_HOUR = 1800000;
  TJAlarmManagerINTERVAL_HOUR = 3600000;
  TJAlarmManagerINTERVAL_HALF_DAY = 43200000;
  TJAlarmManagerINTERVAL_DAY = 86400000;

implementation

end.

arnof 1. Apr 2014 11:51

AW: Java2Pas für FMX / Android
 
Kann ich nur empfehlen, ich habe damit schon ein paar Sachen übersetzt und in echten Apps integriert!

Union 7. Apr 2014 20:59

AW: Java2Pas für FMX / Android
 
Inzwischen gibt es auch einen Backlink :o

Bernhard Geyer 7. Apr 2014 21:11

AW: Java2Pas für FMX / Android
 
Funktioniert das ganze eigentlich nur für FMX und Android oder auch für "normales" Java und VCL?

Union 7. Apr 2014 21:37

AW: Java2Pas für FMX / Android
 
Theoretisch könnte das gehen. Es wird ja nichts FMX-spezifisches bzw. visuelles gemacht. Allerdings wird die AndroidAPI.JNIBrigde verwendet. Eine etwas ältere Methode (2002) die allgmeiner ist kann man hier finden.

wschrabi 8. Apr 2017 07:12

AW: Java2Pas für FMX / Android
 
Hallo,
wollte für WIN 32 ein .class mit JavatoPas nutzen.
Übersetzen geht, doch kommt da AndroidAPI in der USES vor. Und da meint Delphi dass es nicht fir win32 paßt`?
Was macht man da?

DANKE
walter

jaenicke 8. Apr 2017 10:04

AW: Java2Pas für FMX / Android
 
Du kannst Java Klassen aus Android nicht unter Windows nutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf