AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Java2Pas für FMX / Android
Thema durchsuchen
Ansicht
Themen-Optionen

Java2Pas für FMX / Android

Ein Thema von Union · begonnen am 1. Apr 2014 · letzter Beitrag vom 8. Apr 2017
Antwort Antwort
Benutzerbild von Union
Union
Registriert seit: 18. Mär 2004
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, 234x 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
 
arnof

 
Delphi 10.1 Berlin Enterprise
 
#2
  Alt 1. Apr 2014, 11:51
Kann ich nur empfehlen, ich habe damit schon ein paar Sachen übersetzt und in echten Apps integriert!
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#3
  Alt 7. Apr 2014, 20:59
Inzwischen gibt es auch einen Backlink
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

 
Delphi 10.4 Sydney
 
#4
  Alt 7. Apr 2014, 21:11
Funktioniert das ganze eigentlich nur für FMX und Android oder auch für "normales" Java und VCL?
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

 
Delphi 7 Enterprise
 
#5
  Alt 7. Apr 2014, 21:37
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.
  Mit Zitat antworten Zitat
wschrabi
 
#6
  Alt 8. Apr 2017, 07:12
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

 
Delphi 11 Alexandria
 
#7
  Alt 8. Apr 2017, 10:04
Du kannst Java Klassen aus Android nicht unter Windows nutzen.
Sebastian Jänicke
  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 18:34 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