Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi requestLegacyExternalStorage im AndroidManifest (https://www.delphipraxis.net/207636-requestlegacyexternalstorage-im-androidmanifest.html)

zeras 16. Apr 2021 18:57

requestLegacyExternalStorage im AndroidManifest
 
In der Google Konsole habe ich gesehen, dass meine APP die Berechtigung "android:requestLegacyExternalStorage="true"" enthalten soll.
Das habe ich nicht extra ausgewählt, sondern scheint im Standardmanifest schon zu sein.
Ich habe nur eine INI Datei, die unter
Delphi-Quellcode:
  fDir := TPath.GetDocumentsPath + TPath.DirectorySeparatorChar;
liegt.
Kann ich die Berechtigung auch auf False setzen?

zeras 5. Mai 2021 16:33

AW: requestLegacyExternalStorage im AndroidManifest
 
Ich habe diese nun im AndroidManifest gelöscht und dann eine neue Version hochgeladen. Leider kommt die Meldung im Store.
Hat hier jemand mehr Wissen und möchte das mit uns teilen?

philipp.hofmann 5. Mai 2021 16:47

AW: requestLegacyExternalStorage im AndroidManifest
 
Generell solltest du im Google-Play-Store-Postfach auch eine Info haben, was du ab dem 05.Mai beachten sollst, da Updates sonst nicht mehr hochladbar sind.
Habe ich mir diese Woche auch als todo auf die Agenda gestellt, ich habe es mir im Detail noch nicht angeschaut und fleißig das letzte notwendige Update gestern hochgeladen, damit ich ein paar Tage Zeit habe.

zeras 5. Mai 2021 17:11

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1488661)
Generell solltest du im Google-Play-Store-Postfach auch eine Info haben, was du ab dem 05.Mai beachten sollst, da Updates sonst nicht mehr hochladbar sind.

Die Info habe ich ja bekommen und deswegen die Zeile im Manifest gelöscht. Die Meldung im Playstore kommt aber trotzdem, obwohl ich eine neue Version hochgeladen habe.

Aber vielleicht kannst du in ein paar Tagen berichten, wie es bei dir lief.

himitsu 5. Mai 2021 17:15

AW: requestLegacyExternalStorage im AndroidManifest
 
Du kannst die erstellte APK mit 7-Zip entpacken.
Und dort in den XML im RootVerzeichnis schauen, ob sich dieses requestLegacyExternalStorage doch noch drin befindet.
(eventuell auch nochmal mit einem Suchprogramm in allen anderen Dateien suchen)

zeras 5. Mai 2021 17:33

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von himitsu (Beitrag 1488664)
Du kannst die erstellte APK mit 7-Zip entpacken.
Und dort in den XML im RootVerzeichnis schauen, ob sich dieses requestLegacyExternalStorage doch noch drin befindet.
(eventuell auch nochmal mit einem Suchprogramm in allen anderen Dateien suchen)

Danke für den Tipp.
Ich habe dann die "aab" Datei geöffnet.
Leider habe ich den o.g. Parameter nicht gefunden. Als Gegenbeweis habe ich mal nach "hardwareAccelerated" gesucht. Diesen Parameter habe ich dann mehrmals gefunden.

philipp.hofmann 5. Mai 2021 18:02

AW: requestLegacyExternalStorage im AndroidManifest
 
Wenn du einen Pfad aus
Delphi-Quellcode:
  fDir := TPath.GetDocumentsPath + TPath.DirectorySeparatorChar
nutzt, musst du aber doch in deiner App mehr Permissions nutzen, damit dies erlaubt ist oder nicht? Spontan würde ich sagen, dass dies die folgenden sein sollten:
Delphi-Quellcode:
  PermissionsService.RequestPermissions(['android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE'], ReadExternalStorageRequestResult);
und auch hierzu sollten in der Mail Infos stehen. Dieser Pfad dürfte eigentlich nicht mehr erlaubt sein oder du musst es begründen können (z.B. Hersteller von File-Explorer-Apps).

zeras 5. Mai 2021 18:08

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1488670)
Wenn du einen Pfad aus
Delphi-Quellcode:
  fDir := TPath.GetDocumentsPath + TPath.DirectorySeparatorChar
nutzt, musst du aber doch in deiner App mehr Permissions nutzen, damit dies erlaubt ist oder nicht? Spontan würde ich sagen, dass dies die folgenden sein sollten:
Delphi-Quellcode:
  PermissionsService.RequestPermissions(['android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE'], ReadExternalStorageRequestResult);
und auch hierzu sollten in der Mail Infos stehen. Dieser Pfad dürfte eigentlich nicht mehr erlaubt sein oder du musst es begründen können (z.B. Hersteller von File-Explorer-Apps).

Habe ich da etwas falsch verstanden? Ich hatte gedacht, dass ich in dem o.g. Pfad meine Ini speichern kann.
Wo gibt es sonst einen Platz, um meine Ini zu speichern?

philipp.hofmann 5. Mai 2021 18:22

AW: requestLegacyExternalStorage im AndroidManifest
 
Ich speichere meine Daten unter Android in
appPath:=TFileUtils.adjustDir(System.IOUtils.TPath .GetPublicPath());

Dies ist laut Delphi-Doku
Android: /storage/emulated/0/Android/data/<application ID>/files
Dein Pfad ist laut Delphi-Doku
Android: /data/data/<application ID>/files

Ob dies hier einen Unterschied macht, kann ich dir leider nicht sagen. Da es an sich unterhalb der Application-ID ist, sollte es in der Theorie passen. Da gebe ich dir recht.
Hast du die Entitlements im Projekt mal angeschaut, ob dort noch eines gesetzt ist, was nicht mehr sein sollte?

zeras 5. Mai 2021 19:16

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1488672)
Hast du die Entitlements im Projekt mal angeschaut, ob dort noch eines gesetzt ist, was nicht mehr sein sollte?

Meinst du mit Entitlements Berechtigungen?

Rollo62 5. Mai 2021 20:47

AW: requestLegacyExternalStorage im AndroidManifest
 
http://docwiki.embarcadero.com/RADSt...or_iOS_or_OS_X

philipp.hofmann 5. Mai 2021 21:04

AW: requestLegacyExternalStorage im AndroidManifest
 
Da bin ich mir gerade unsicher. Im Englischen heißen die beiden relevanten Listen:
- Entitlement List
- Uses Permissions

In der Entitlement List gibt es ein "Secure File Sharing", keine Ahnung, ob dies noch so erlaubt ist.
In den Uses Permissions gibt es "Read External Storage" und "Write External Storage".

Diese Punkte haben zumindest das Potential jetzt nicht mehr so einfach gültig zu sein.
Ich freue mich schon total darauf, dass alles durchzutesten.

TurboMagic 6. Mai 2021 07:09

AW: requestLegacyExternalStorage im AndroidManifest
 
Deine ini gehört in einen App lokalen Pfad, also nicht ein öffentliches Verzeichnis.
Also z.B. TPath.GetHomePath.

philipp.hofmann 6. Mai 2021 11:38

AW: requestLegacyExternalStorage im AndroidManifest
 
GetDocumentsPath und GetHomePath ist unter Android das gleiche Verzeichnis und auch GetPublicPath zeigt nicht auf ein öffentliches, sondern ein Applikationsverzeichnis:

TPath.GetDocumentsPath (nutzt der Verfasser)
/data/data/<application ID>/files

TPath.GetHomePath
/data/data/<application ID>/files

TPath.GetPublicPath (nutze ich)
/storage/emulated/0/Android/data/<application ID>/files

Die Pfade sollten für Ini-Files also alle erlaubt sein.

himitsu 6. Mai 2021 12:16

AW: requestLegacyExternalStorage im AndroidManifest
 
Je nach Geräte-Hersteller können die Pfade auch etwas abweichen,
aber im Großen und Ganzen ist das Schema überall ähnlich.

zeras 6. Mai 2021 18:56

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1488720)
GetDocumentsPath und GetHomePath ist unter Android das gleiche Verzeichnis und auch GetPublicPath zeigt nicht auf ein öffentliches, sondern ein Applikationsverzeichnis:

TPath.GetDocumentsPath (nutzt der Verfasser)
/data/data/<application ID>/files
/data/user/0/<application ID>/files

TPath.GetHomePath
/data/data/<application ID>/files
/data/user/0/<application ID>/files

TPath.GetPublicPath (nutze ich)
/storage/emulated/0/Android/data/<application ID>/files
/storage/emulated/0/Android/data/<application ID>/files


Die Pfade sollten für Ini-Files also alle erlaubt sein.

Bei mir sehen die Pfade ein wenig anders aus (dunkelrot).

Mal sehen, was eure Ergebnisse bringen, wenn ihr den/das Token in der Überschrift aus dem Manifest entfernt.

himitsu 6. Mai 2021 19:05

AW: requestLegacyExternalStorage im AndroidManifest
 
Ja, viele Gerätehersteller passen ihr Android etwas an,
auch was das Speicherlayout betrifft.
Und auch je nach Android-Version kann es sich mal verändern.

Vor allem, wenn man im Android auch noch das MultiUser aktiviert,
wonach es bei dir aussieht. (kann aber auch sein, dass es so schon vorbereitet ist, selbst wenn noch nicht aktiv)

Im Android besteht das Dateisystem aus vielen als "Verzeichnis" gemappten Partitionen, oder auch die SD-Card hat ein/zwei Verzeichnisse,
und auch viele Dateien sind als Verzeichnisse eingebunden. (z.B. oft für das Userverzeichnis, je Benutzer)

Wie im Windows, können diese Verzeichnisse sich halt auch verschieben,
drum gibt es ja diese Funktionen zum Auslesen des gewünschten Verzeichnisnamens. :zwinker:
Man kann sie sogar im aktuellen System wo anders hin tun, passiert vielleicht auch mal bei einem Update, oder sogar als Benutzer z.B. auf eine andere Partition/Festplatte/Netzlaufwerk verschieben. (im Android/iOS ist aber vieles gesperrt, drum macht sowas selten jemand selbst)

zeras 6. Mai 2021 19:29

AW: requestLegacyExternalStorage im AndroidManifest
 
Danke für eure Hinweise.
Eigentlich will ich ja nur meine Einstellungen irgendwo sichern. Ich muss auf keine weiteren Dateien zugreifen.
Den Schlüssel im Manifest habe ich ja gelöscht, aber trotzdem kommt die Meldung im Store, dass das Flag immer noch da wäre.
Mal sehen, ob die Meldung im nächsten Update immer noch kommt.
Das Manifest sollte doch nur einmalig da sein für 32 und 64 bit??

Rollo62 6. Mai 2021 19:35

AW: requestLegacyExternalStorage im AndroidManifest
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1488679)
In der Entitlement List gibt es ein "Secure File Sharing", keine Ahnung, ob dies noch so erlaubt ist.
In den Uses Permissions gibt es "Read External Storage" und "Write External Storage".
Diese Punkte haben zumindest das Potential jetzt nicht mehr so einfach gültig zu sein.

Bei mir hat "Secure File Sharing" jedenfalls nicht mit requestLegacyExternalStorage zu tun,
egal ob mit/ohne, das Letztere kommt immer mit in das Template.

philipp.hofmann 8. Mai 2021 17:37

AW: requestLegacyExternalStorage im AndroidManifest
 
Also bei mir hat es geklappt. Ich habe folgendes tun müssen:
- Zeile mit requestLegacyExternalStorage aus dem Manifest rausgenommen
- ReadExternalStorage und WriteExternalStorage aus den Project-Permissions für Android-64 rausgenommen
- Abfrage im Code für ReadExternalStorage und WriteExternalStorage rausgenommen
- meine externen Dateizugriffe auf SAF umgestellt

Die App ist seit heute Nachmittag so im Store aktualisiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.

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