Dostęp do folderu Android/data z plikami innej aplikacji

0

Witam
Mam pewien problem z dostępem do folderu i nie wiem, czy to tak jest by design, czy ja coś źle robię. Potrzebuje dostać się do plików aplikacji w /storage/emulated/0/Android/data, aby podmieniać pliki z profilami.

MANIFEST

<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application android:requestLegacyExternalStorage="true"

PERMISSIONS

await Permission.storage.request();
await Permission.accessMediaLocation.request();
await Permission.manageExternalStorage.request();

Pobieram external path za pomocą biblioteki

var path = await ExternalPath.getExternalStorageDirectories();
List files = io.Directory('${path[0]}/Android/data').listSync();
print(files);

Dostaje błąd

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: FileSystemException: Directory listing failed, path = '/storage/emulated/0/Android/data/' (OS Error: Permission denied, errno = 13)

Aplikacja zapytała mnie o uprawnienia i ma full.
permissions_azt.png

Co ja jeszcze muszę zrobić żeby to działało? Da się w ogóle dostać do plików innej aplikacji? Jak działają file managery na androidzie?

3

No to jest by design, potrzebujesz roota. To powinno być oczywiste. Chyba odkąd istnieje Android to nigdy nie można było grzebać w plikach innych aplikacji.

0

No ale jak pobiorę jakiś inny (nie systemowy) file manager to też nie będę mógł tam wejść/generować plików?

2

Od kiedy to możesz tam grzebać bez roota? Znasz jakiś manager plików który to robi? Skąd w ogóle myśl że się da?

0

Ja nie twierdzę, że mogę, bo nie sprawdziłem tego. Ja pytam właśnie, czy sklepowe file managery też nie mogą tam się wbić. Czyli ogólnie potrzebny jest root żeby to ogarnać i nie ma żadnego innego wyjścia, aby moja aplikacja miała dostęp do folderu jednej z aplikacji, koniec kropka?

2
AdamWox napisał(a):

Czyli ogólnie potrzebny jest root żeby to ogarnać i nie ma żadnego innego wyjścia, aby moja aplikacja miała dostęp do folderu jednej z aplikacji, koniec kropka?

Tak. Dziwię że, że w ogóle zakładałeś inaczej. Masz jak byk to w dokumentacji:
https://developer.android.com/training/data-storage/manage-all-files

Apps that are granted this permission still can't access the app-specific directories that belong to other apps, because these directories appear as subdirectories of Android/data/ on a storage volume.

2

https://developer.android.com/training/data-storage/app-specific

The system prevents other apps from accessing these locations, and on Android 10 (API level 29) and higher, these locations are encrypted. These characteristics make these locations a good place to store sensitive data that only your app itself can access.

Tak, jak napisał @gajusz800 powyżej - katalogi prywatne aplikacji są chronione przed grzebaniem w nich przez inne apki. Bez roota to kiepsko widzę taką możliwość.Zresztą ma to sens - bo apka trzyma w takim prywatnym katalogu różne dane, jak loginy, hasła, adresy serwerów, klucze do szyfrowania itp - więc jakby dało się do tego tak po prostu dobić to puszczasz jakiegoś spyware'a i pobierasz sobie wszystkie poufne dane, jakie użytkownik posiada w telefonie. To by nie było lekkie przegięcie, ale totalna dziura w bezpieczeństwie.

Jeszcze jest takie coś jak Storage Access Framework (SAF) - https://developer.android.com/guide/topics/providers/document-provider, ale nie miałem z tym nigdy do czynienia. Z tego co widze, to musisz swoją aplikację zarejestrować jako odbiorcę/apkę zaufaną u tej drugiej, w której chcesz grzebać. Także nie wiem, czy w Twoim przypadku to się nada.

1 użytkowników online, w tym zalogowanych: 0, gości: 1