Einzelnen Beitrag anzeigen

Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#1

Java2Pas für FMX / Android

  Alt 1. Apr 2014, 11:46
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.
Angehängte Dateien
Dateityp: zip Java2Pas140.zip (299,8 KB, 235x aufgerufen)
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all

Geändert von Union ( 8. Mai 2014 um 10:11 Uhr) Grund: Version 1.4.0
  Mit Zitat antworten Zitat