Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Mühsame Fehlerkorrekturen unter Android 64Bit (https://www.delphipraxis.net/202683-muehsame-fehlerkorrekturen-unter-android-64bit.html)

Klapauzius 27. Nov 2019 09:29


Mühsame Fehlerkorrekturen unter Android 64Bit
 
Bei zwei meiner selbst programmierten Komponenten treten unter Android 64Bit unerklärliche Fehler auf. Während unter 32Bit alles problemlos kompiliert tauchten unzählige Fehler dieser Art auf: "Deklaration... unterscheidet sich von vorheriger Deklaration"
Angemeckert wird zum Beispiel:

Delphi-Quellcode:
//Klassendefinition:
 public
    function Read(var Buffer; Count: Longint): Longint; override;

//die eigentliche Funktion

   function TMyComponentStream.Read(var Buffer; Count: Longint): Longint;
Auch nach ca 100 maligem Vergleichen, konnte ich keinen Unterschied feststellen. Da hab ich einfach mal Copy und Paste gemacht und staune, obwohl gar nichts geändert wurde, wird die entsprechende Funktion nun akzeptiert. Die Lösung ist also gefunden, aber bei mehreren Dutzend Funktionen ist dies doch etwas mühsam mit copy and paste die entsprechenden Funktionsdefinitionen zu ändern. Unerklärlicherweise meckert Rio 10.3.3 aber nicht alle Funktionen an, nur einzelne, aber ein Muster kann ich da nicht erkennen.

Infos:
- Die Dateien wurden nie in einem externen Editor geöffnet oder verändert
- Die Dateien wurden ursprünglich in Tokyo erstellt und in Rio 10.3.2 / 10.3.3 übernommen
- Die Klassen wurden ursprünglich mit MMX Code Explorer erstellt

Rollo62 27. Nov 2019 16:36

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Delphi-Quellcode:
function Read(var Buffer; Count: Longint): Longint; override;
und wie sieht das in der Basisklasse aus ?

Klapauzius 28. Nov 2019 09:28

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Zitat:

Zitat von Rollo62 (Beitrag 1452305)
Delphi-Quellcode:
function Read(var Buffer; Count: Longint): Longint; override;
und wie siet das in der Basisklasse aus ?

Das spielt hier definitiv keine Rolle. Es war nur Zufall, dass ich hier eine überladene Funktion als Beispiel aufgeführt habe. Der Fehler tritt bei unterschiedlichsten Funktionen und Prozeduren auf, unabhängig ob überladen, abgeleitet, privat oder public. Es ist wirklich (mindestens von mir) kein Schema zu erkennen.

Zusätzliche Fehlerkorrekturen, die ich nicht erwartet hätte:
Rio 3.3 überschreibt mir bei diesem Projekt die Einstellungen der Bereitstellung. Dokumente, die ich unter 2.2 unter Android 32Bit manuell eingefügt habe, sind in 3.3 plötzlich nicht mehr vorhanden, Standardeinträge von Delphi, die ich deaktiviert hatte, sind wieder aktiviert. Dass in 64Bit Android Standardwerte eingetragen werden ist mir klar, aber warum auch in 32Bit?

Rollo62 28. Nov 2019 12:50

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Ich denke das Beste ist für Android-64 ein komplett neues, leeres Projekt anzulegen.
Damit werden alle Einträge von Delphi neu erzeugt, so wie es der Schöpfer gedacht hat.
Leider muss man dann alle Einstellungen neu eintragen, aber dafür weiss man wo man steht.

Dem Upgrade-Prozess der IDE vertraue ich nur bedingt, was Berechtigungen, etc. betrifft.
Insbesondere wenn neue Build-Ziele hinzugekommen sind (64-Bit).

Klapauzius 28. Nov 2019 13:32

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Zitat:

Zitat von Rollo62 (Beitrag 1452376)
Ich denke das Beste ist für Android-64 ein komplett neues, leeres Projekt anzulegen.
.... (64-Bit).

Dieser Vorschlag ist für mich leider nicht wirklich realisierbar. Delphi ist ein Multiplattformentwicklungswerkzeug. Ich entwickle nicht nur für Android. D.h. in einem Projekt sind mehrere Plattformen integriert. Muss ich nun mit einem leeren Projekt anfangen, alle Dateien mühsam reinkopieren und für jede Plattform die Bereitstellungseinstellungen neu eingeben, gehen da Stunden an Arbeit drauf.

Das ändert aber nichts daran, dass von mir erstellte Komponenten, mit völlig identischem Code erstmals unter Android 64 nicht immer kompilierbar sind (wohl aber unter Windows, MAC, iOS und Android32), erst das Ersetzen der vom Compiler angemeckerten Funktions- und Methodendefinitionen (mit identischen Werten) ermöglicht mir das Kompilieren unter Android 64. Um klar zu stellen, nicht eine für mich nachvollziehbare Änderung des Codes wurde beim Ersetzen vorgenommen.

Egal, ich habe mich damit abgefunden. Alles ist ersetzt, meine Komponenten laufen auch unter Android64, die Bereitstellungsdateien des aktuellen Projektes sind wieder geändert und erste Testversionen sind bei den Betatestern im Einsatz. Hat mich einfach ein paar Stunden Zeit gekostet und mein Vertrauen in den Android 64Bit Compiler etwas getrübt.

Rollo62 28. Nov 2019 13:36

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Zitat:

Zitat von Klapauzius (Beitrag 1452380)
Zitat:

Zitat von Rollo62 (Beitrag 1452376)
Ich denke das Beste ist für Android-64 ein komplett neues, leeres Projekt anzulegen.
.... (64-Bit).

Dieser Vorschlag ist für mich leider nicht wirklich realisierbar.

Ja ich weine auch jedes Mal wenn ich mal wieder Tabularasa machen Muss.
Aber aus Erfahrung weiis ich das man dann an anderer Stelle viel Arbeit einsparen kann.

Ich versuche mich da bei dein Einstellungen mit OptionSets, und verschiedener anderer Tricks,
aber den großen Wurf habe ich da auch noch nicht gefunden.

Mir persönlich wäre es am liebsten wenn die Options in Delphi meinetwegen simpel per Text-Editor editiert werden könnten, und nicht mit diesem Options-Dialog, wo man nie genau weiss ob er die Änderung vererbt hat, oder nicht.

philipp.hofmann 5. Dez 2019 09:55

AW: Mühsame Fehlerkorrekturen unter Android 64Bit
 
Ich hatte auch etwas zu kämpfen, bis meine Android-64-Version lief. Hauptproblem war, dass das Andriud-64 SDK und NDK nicht komplett eingerichtet war und teilweise auf falsche Pfade zeigt oder z.B. im Biblithekspfad für Delphi-NDK fehlte der Pfad C:\Users\Public\Documents\Embarcadero\Studio\20.0\ PlatformSDKs\android-ndk-r17b\sources\cxx-stl\gnu-libstdc++\4.9\libs\arm64-v8a; welcher bei Android-32 noch automatisch eingerichtet war.

Und natürlich muss die Bereitstellungssektion wieder gefüllt werden, was den Typ "File" und "ProjectFile" angeht. Da wird nichts übernommen.
Und meist ist es eine gute Idee eine von einem neuen Projekt erzeugte AndroidManifest.template.xml per Copy&Paste zu übernehmen (und Anpassungen wieder dort einzutragen).

Ich habe auch damit gekämpft, dass ich der Meinung war, dass ich der Android 64-Bit-Version die Bibliothek JavaScriptHelper.jar analog zu Android 32 hinzufügen muss. Dann ging aber weder Android 32 noch Android 64, weil die Bibliothek dann zweimal eingebunden war. Dies scheint mir noch ein Fehler in der Delphi-Konfiguration zu sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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