Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FMX DX10 assets\internal --> Android geht nicht? (https://www.delphipraxis.net/187743-fmx-dx10-assets%5Cinternal-android-geht-nicht.html)

Harry Stahl 29. Dez 2015 18:03

FMX DX10 assets\internal --> Android geht nicht?
 
Ich möchte bestimmte Daten mit in das Dokumentenverzeichnis der app übertragen lassen, benutze dazu für die Datei den Eintrag "assets\internal".

Leider wird die Datei nicht übertragen.

Im Übertragungsprotokoll steht als Ziel:

c:\program files (x86)\embarcadero\studio\17.0\bin\paclient.exe -u8 --put="FerienA.DAT,.\Android\Debug\\TimOnize\assets\ internal\,0,FerienA.DAT"

Das "\\" dürfte doch eigentlich nicht sein, oder?

Was auch seltsam ist: Delphi bindet mir zwangsweise in das Bereitstellungsfenster eine Projektdatei "Data.pas" ein, die ich nicht hinzugefügt habe und die man auch nicht entfernen kann (Schalter ist ausgegraut).

Wenn ich die Deployment-Datei manuell editiere und den Eintrag selber lösche, nimmt Delphi die Datei einfach wieder hinzu. Warum nur?

Sir Rufo 29. Dez 2015 18:13

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Bei mir gehen diese Dateien an
Code:
.\assets\internal\

Harry Stahl 29. Dez 2015 20:40

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Das hatte ich auch schon versucht, was aber leider auch nicht ging. Seltsam.

Rollo62 29. Dez 2015 21:24

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Bei mir gehts mit ".\assets\internal\" unter Android.

Blöde Frage: hast du das Overwrite Flag auf "Always" stehen ? Vermutlich ja.

Ich habe noch nicht das Update-1 für Rx10 eingespielt, vielleicht liegt es daran ?

Rollo

Harry Stahl 29. Dez 2015 23:52

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Auch diese Variante mit pathdelimeter am Ende hatte ich probiert. Das Flag steht auf always overwrite. Benutze das Update 1. Es müsste eigentlich funktionieren, ging ja sonst auch immer.

Wie gesagt, mich irritiert im Übertragungsprotokoll das "\\" im Pfad (siehe oben den Auszug).

Harry Stahl 30. Dez 2015 11:34

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Schon seltsam. Wenn ich mir die Einträge in den Delphi-Deploy-Dateien ansehen, stimmen die alle:
Delphi-Quellcode:
 <DeployFile Include="FerienD.DAT" Condition="'$(Config)'=='Release'">
   <RemoteDir>TimOnize\assets\internal\</RemoteDir>
   <RemoteName>FerienD.DAT</RemoteName>
   <DeployClass>File</DeployClass>
   <Operation>0</Operation>
   <LocalCommand/>
   <RemoteCommand/>
   <Overwrite>True</Overwrite>
 </DeployFile>
Leider wird aber dann keine Datei übertragen an:

Delphi-Quellcode:
Dieser PC\Harry Stahl (SM-P605)\Tablet\Android\data\de.hastasoft.TimOnize\files
Auf diese Dateien würde ich dann ja normalerweise mit

Delphi-Quellcode:
fullpathfilename := System.IOUtils.TPath.Combine (System.IOUtils.TPath.GetDocumentsPath, OnlyFileName)
zugreifen können. Der Dokumentenpfad wird vom System mit

data/data/de.hastasoft.TimOnize/files

ausgegeben, was soweit auch OK wäre.

Wähle ich im Bereitstellungsmanager alternativ das Ziel "assets\external\"

dann kommen die Dateien in

Delphi-Quellcode:
Dieser PC\Harry Stahl (SM-P605)\Tablet\Android\data\de.hastasoft.TimOnize\files\external
auch tatsächlich an und ich kann dann per

Delphi-Quellcode:
fullpathfilename := System.IOUtils.TPath.Combine (System.IOUtils.TPath.GetSharedDocumentsPath, OnlyFileName)
auch auf die Dateien zugreifen.

Der gemeinsame Dokumentenpfad lautet dann gemäß Angabe vom System

/storage/emulated/0/Documents

was auch OK ist.

Mach ich es halt so. Aber warum die erste Variante nicht geht, bleibt mir ein Rätsel.:?::?::?:

Sir Rufo 30. Dez 2015 16:22

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Das Geheimnis mit diesen Dateien erfährst du in der
Delphi-Quellcode:
System.StartUpCopy
Unit.

Harry Stahl 30. Dez 2015 22:35

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Ja, ganz interessant, man kann sich mal ansehen, wie die Angaben tatsächlich lauten müssten (bzw. die werden eben, falls nicht ganz passend, zurecht gestutzt).

Sir Rufo 30. Dez 2015 22:40

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Zitat:

Zitat von Harry Stahl (Beitrag 1325677)
Ja, ganz interessant, man kann sich mal ansehen, wie die Angaben tatsächlich lauten müssten (bzw. die werden eben, falls nicht ganz passend, zurecht gestutzt).

Und man sieht wann was warum wohin kopiert wird und was die Overwrite Einstellung in der Bereitstellung aussagt. Vor allem sieht man, dass die Dateien nach dem Kopieren auf dem Device doppelt vorhanden sind. :stupid:

bra 4. Jan 2016 09:23

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Die Overwrite-Einstellung ist für die Tonne, funktioniert nämlich nicht. Das habe ich schon mehrfach bei EMB bemängelt, soll aber angeblich so "by Design" sein (https://quality.embarcadero.com/browse/RSP-12630).

Unabhängig davon werden die Dateien im Deployment erst beim Starten der App umkopiert und nicht beim Installieren. Das beim Testen beachten.

Sir Rufo 4. Jan 2016 14:31

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Die Overwrite Einstellung funktioniert, denn die Dateien kommen auf dem Gerät an (wenn die überschrieben werden sollen), und zwar exakt in dem Ordner den man in der Bereitstellung angegeben hat.

Dieses fett Geschriebene so lange lesen, bis man den Sinn wortwörtlich verstanden .

Wenn es nicht klappt, dann einmal laut den Pfad vorlesen, der dort in der Bereitstellung steht und dann den Pfad, wo man die Dateien erwartet. Was fällt uns auf? Die klingen ganz unterschiedlich ... warum wohl?

Die Antwort steht indirekt hier:
Zitat:

Zitat von bra (Beitrag 1325949)
Unabhängig davon werden die Dateien im Deployment erst beim Starten der App umkopiert und nicht beim Installieren. Das beim Testen beachten.

Wo kommen wohl die Dateien her, die da umkopiert werden und warum werden die überhaupt umkopiert?

bra 4. Jan 2016 15:20

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Die Dateien kommen aus der APK-Datei, das ist mir schon klar. Nur wenn ich es richtig verstehe, sollten die quasi in die APK reinmappen. Sprich, wenn ich eine neue APK mit neuen Dateien ausliefere, sollten die Dateien auch neuer sein. Sind sie aber nicht. Teste es selbst. Ist übrigens unter iOS dasselbe (in meinen Augen falsche) Verhalten.

Sir Rufo 4. Jan 2016 15:39

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Dann verrate mir doch mal den Remote-Pfad aus der Bereitstellung und den Pfad auf dem Device.

Dann kann ich dir auch sagen, wo du dich irrst ;)

Sir Rufo 4. Jan 2016 16:02

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Zitat:

Zitat von bra (Beitrag 1325981)
Die Dateien kommen aus der APK-Datei, das ist mir schon klar. Nur wenn ich es richtig verstehe, sollten die quasi in die APK reinmappen. Sprich, wenn ich eine neue APK mit neuen Dateien ausliefere, sollten die Dateien auch neuer sein. Sind sie aber nicht. Teste es selbst. Ist übrigens unter iOS dasselbe (in meinen Augen falsche) Verhalten.

Ich habe es nochmal explizit getestet und es funktioniert exakt so wie ich es beschrieben habe. Die Datei kommt definitv auf dem Gerät in genau dem Verzeichnis an, was in der Bereitstellung angegeben wurde.

Das Problem bei dir ist, dass du eben nicht in das Verzeichnis schaust, was du in der Bereitstellung angegeben hast!

bra 4. Jan 2016 16:10

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1325985)
Ich habe es nochmal explizit getestet und es funktioniert exakt so wie ich es beschrieben habe. Die Datei kommt definitv auf dem Gerät in genau dem Verzeichnis an, was in der Bereitstellung angegeben wurde.

Das Problem bei dir ist, dass du eben nicht in das Verzeichnis schaust, was du in der Bereitstellung angegeben hast!

Und warum funktioniert es dann, wenn ich die System.StartUpCopy.pas so verändere, dass die Dateien IMMER überschrieben werden, wie es sein sollte?

Nochmal zum Verständnis:
- Version 1 der App mit einer Datei abc mit Inhalt "1" wird aus dem Appstore/über die APK installiert
- Version 2 der App mit einer Datei abc mit Inhalt "2" wird aus dem Appstore/über die APK installiert (als Update)
-> Datei abc enthält weiterhin den Text "1", sollte aber "2" sein.

Wird die Version 1 dagegen vorher deinstalliert und dann die Version 2 installiert, enthält die Datei abc wie erwartet den Text "2".

Genau dieselbe Diskussion führe ich schon seit Monaten mit denen von EMB und entweder hab ich ein massives Brett vorm Kopf oder ich bin einer der wenigen, der es versteht ;D

Sir Rufo 4. Jan 2016 16:57

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Es gibt da eine Funktionalität, die Dateien beim Start aus einem bestimmten Verzeichnis in ein bestimmtes Verzeichnis kopiert, wenn die Datei im Ziel-Verzeichnis nicht existiert.

Das macht die
Delphi-Quellcode:
unit System.StartupCopy
. Als Voraussetzung muss (bei iOS) die Datei zwingend in der Bereitstellung als Remote-Pfad Startup/Documents/ bekommen.
Bei jedem anderen Remote-Pfad funktioniert das nicht.

Jetzt kommst du und sagst dass Emba da etwas falsch gemacht hat, denn du möchtest gerne diesen Remote-Pfad verwenden und da soll alles anders sein. :shock:

Wenn du nicht nass werden willst, dann geh nicht ans Wasser.
Wenn du keinen Sonnenbrand haben möchtest, dann gehe nicht in die Sonne.
Wenn du die Dateien nicht kopiert haben möchtest, dann lege diese nicht in den Remote-Pfad StartUp/Documents/ ab.
Wenn du die Dateien immer ohne wenn und aber kopiert haben möchtest (wozu eigentlich dann kopieren), dann lege diese nicht in den Remote-Pfad StartUp/Documents/ ab.

Lege diese Dateien in einen anderen Remote-Pfad und schreibe dir eine andere Routine, die diese Dateien dann nach deinem Gutdünken wo auch immer hin kopiert.
Merksatz
Dieser eine Remote-Pfad StartUp/Documents/ hat eine besondere ihm zugedachte Funktion.

Willst du dich morgen bei Emba darüber beschweren, dass man in einem Button keinen Text editieren kann? Äh, dafür ist der auch nicht gemacht => "works as designed". Ich will aber ... :roll:
Oder bei Microsoft, weil du deine Word-Dokumente am liebsten mit der Endung *.xlsx speicherst und beim Öffnen geht jetzt plötzlich Excel auf?
Oder beim Obsthändler, weil du mit der Banane deine Bierflasche nicht aufbekommst?

Wenn du den Pfad trotzdem nutzen möchtest und dir die Kopiererei egal ist (die Datei liegt doppelt auf dem Device und verbraucht doppelt so viel Speicherplatz), dann kannst du unter iOS so
Delphi-Quellcode:
TPath.Combine( 
  TPath.Combine( 
    TPath.GetDirectoryName( ParamStr( 0 ) ),
    'StartUp' ),
  'Documents' );
den Remote-Pfad StartUp/Documents/ erhalten.

bra 4. Jan 2016 17:16

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Ich weiss zwar nicht, wieso du mich da jetzt gleich so anmachst aber egal... auf dem Niveau hab ich keine Lust, mich hier weiter runtermachen zu lassen.

Versuche doch bitte mal unter Remote Pfad bei Android irgendwas anderes als assets\* anzugeben. Diese Dateien landen überhaupt nicht in der APK, wie sollen die also bitte dann auf dem Gerät ankommen?

Bist du sicher, dass DU verstehst, was hier passiert?

Sir Rufo 4. Jan 2016 18:44

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Ja, bin ich. Meine Dateien sind immer da, wo ich die haben will.

Manchmal muss man sich dazu auch mit der Doku der Plattformen auseinandersetzen.

bra 5. Jan 2016 09:16

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Kannst du nicht mal ein Beispiel geben, was für einen Pfad du da für Android angegeben hast? Wenn ich irgendwas anderes als assets\... angebe, landet die Dateien NICHT in der APK, wird ergo auch nie auf dem Gerät erscheinen.

Das Problem ist halt, dass ich diese Frage schon mehrfach gestellt habe (auch hier im Forum vor einigen Monaten) und mir darauf niemand eine vernünftige Antwort gibt, außer "schau in die Doku". Das bringt mir nichts. :(

Rollo62 6. Jan 2016 17:56

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Zitat:

Wenn du die Dateien immer ohne wenn und aber kopiert haben möchtest (wozu eigentlich dann kopieren), dann lege diese nicht in den Remote-Pfad StartUp/Documents/ ab.
Das ist schön und gut, aber wie Bra schon sagte, so klar ist das auf den Plattformen nicht.

Was is denn der kleinste gemeinsame Nenner an Verzeichnissen, hat sich da schonmal jemand ein System aufgebaut ?

Ich bin mittlerweile soweit zurückgerudert das ich möglichst alles unter dem User Dokuments Verzeichnis ablege, weil auch das Shared Dokuments
bei den meisten Plattformen Probleme macht, die Appdata holder sowieso.

Allerdings kommt es auch auf den Datentyp und Verwendung an, denn Apple kann ja eine App abweisen wenn man "wiedererzeugbare" Daten unter Dokuments ablegt, weil sie keine Dubletten beim Sync haben wollen.

Ich würde gerne die richtigen Verzeichnisse für die folgenden Aufgaben wissen:

Von der App erzeugte, einmalige Daten --> ab in Dokuments --> kann Synchronisiert werden --> alles OK
Von der App gedownloaded --> wohin damit ? --> Apple sagt ich könnte mir die im Zweifel ja nochmal downloaden --> schlechtes Bauchgefühl
Von der App interne Daten, z.B. INI Files, bearbeitete Bilder oder Sqlite.db --> wohin damit ? --> Shared Dokuments ? --> könnte Apple meckern
Wie von Bra der Fall das eine Datei beim Update überschrieben werden soll --> wohin damit ? --> muss ich wohl selber was für schreiben ?
Wie bei StartUpCopy --> wofür sollte ich das überhaupt benutzen ? --> Initiale Dateien, die dann nicht mehr benutzt werden --> doppelter Speicher
etc. etc.

Die Emba Docs zu den Plattformen helfen nur bedingt weiter, denn es gibt nicht immer Zugriff auch wenn es so sein sollte.
Ich habe es mittlerweile fast aufgegeben das zu versuchen zu optimieren und arbeite wieder an der eigentlichen Appfunktion,
Aber ich habe immer ein ungutes Gefühl das irgendwann mal wieder etwas nicht gespeichert wird.

Wie macht ihr das denn um ohne Zugriffsprobleme durchs Leben zu gehen, was ist der "kleinste gemeinsame Folder" ?

Rollo

P.S.:
Zitat:

Oder beim Obsthändler, weil du mit der Banane deine Bierflasche nicht aufbekommst?
Ich machs genau umgekehrt, klappt immer hervorragend :stupid:

omp 28. Apr 2016 16:21

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Zitat:

Zitat von Harry Stahl (Beitrag 1325538)
Ich möchte bestimmte Daten mit in das Dokumentenverzeichnis der app übertragen lassen, benutze dazu für die Datei den Eintrag "assets\internal".
Leider wird die Datei nicht übertragen.

Ich habe gerade einige Zeit mit dem Problem "Dateien des Bereitstellungsmanagers werden einfach nicht bereitgestellt" verschwendet. Und da ich bei der Suche immer wieder auf diesen Thread gestoßen bin, hier kurz die Lösung in meinem Fall:

In der .dpr fehlte "uses System.StartUpCopy".

Gruß, Harald

wschrabi 6. Aug 2023 18:04

AW: FMX DX10 assets\internal --> Android geht nicht?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Liebe Leute,
ich habe BERLIN 10.1 mit Android 5.1 (Ich weiss, es ist sehhhhr alt, aber zum Testen, bis mein Android 10 Handy mit RAD 11.3 kommt):
Ich habe folgende CODE:
Delphi-Quellcode:
    iconfile:=System.IOUtils.TPath.GetSharedDocumentsPath+PathDelim+'icon.bmp';
  ShowMessage(iconfile);
  if FileExists(iconfile) then
     begin
     ShowMessage('File ist da');
     Image1.Bitmap.LoadFromFile(iconfile);
     end;
Und im Bereitstellungsfile das drin: siehe Attachment.

Doch es kommt einfach nicht das ShowMessage Fenster, weil er das File nicht findet.
Was ist da falsch?
DANKE

himitsu 6. Aug 2023 19:35

AW: FMX DX10 assets\internal --> Android geht nicht?
 
[deleted weil verlaufen]


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