I henhold til den officielle dokumentation for udviklere er der følgende muligheder for datalagring på Android:
- Delte præferencer – Gem private primitive data i nøgle-værdipar.
- Intern lagring – Gem private data på enhedens hukommelse.
- Ekstern lagring – Gem offentlige data på den delte eksterne lagringsplads.
- SQLite-databaser – Gem strukturerede data i en privat database.
- Netværksforbindelse – Gem data på nettet med din egen netværksserver.
Ud over muligheden for netværksforbindelse er de andre muligheder alle persisterende data på enheden. Både SharedPreferences og SQlite-databaser er private data, der gemmes på enheden. Disse filer er ikke tilgængelige for andre programmer eller brugere, medmindre du er på en emulator eller en rooted enhed. Her er et par måder, hvorpå jeg får adgang til og inspicerer disse private data til debugging under udviklingen.
På en emulator eller en rooted enhed
Hvis du kører en emulator eller rooted enhed. Du skal have adgang til enhedens private lagerplads. Du kan få adgang til filerne fra Android Studio GUI eller via kommandolinjen:
- GUI – I Android Studio skal du starte Android Device Monitor fra menuen: Værktøjer/Android/Android Device Monitor. Naviger til fanen File Explorer og derefter data/data/<din app-pakke navn>/. Find den fil, du leder efter, og du kan skubbe og trække en fil derfra.
- Kommandolinje – du kan også skubbe filen til enheden eller trække filen fra enheden via adb:
adb pull remote-dir local-dir <-- Copy from device to local machine
adb push local-dir remote-dir <-- Copy from local machine to device
På en ikke-rooted enhed
Hvis du ikke kører på en emulator eller en rooted enhed. Fra kommandolinjen:
adb shell
run-as <app-package-name>F
cd data/data/...
Nu kan du få adgang til filerne på enhedens interne lager. Hvis du vil afslutte shell’en, skal du skrive exit.
exit <-- exit out of adb shell
Sqlite-databasefil
Når du kan få adgang til SQLite-databasefilen på en emulator, rooted enhed eller via adb shell / run as , er der et par muligheder for at inspicere skemaet og din SQLite-database på enheden.
Inspicér SQLite db via et GUI-værktøj
Træk først filen fra enheden, og brug derefter en GUI-software til at se skemaet og indholdet. Jeg bruger SQLite-browser, som giver dig mulighed for at se databaseskemaet, tabelindholdet samt at udføre nogle enkle SQL-scripts.
Inspicer SQLite db via sqlite3 kommandolinjeværktøj
For mig er den nemmere løsning at bruge sqlite3 kommandolinjeværktøj til at inspicere databasen fra adb shell –
adb shell
cd data/data/<your package-name>/databases/
sqlite3 <db-name>
.tables
.schema <table-name>
Alternativt kan du bruge sqlite3 lokalt i stedet for i en shell, efter at have trukket databasefilen fra enheden:
adb pull <db-name>
sqlite3 <db-name>
Tørring af app-data
Så når du arbejder med SharedPreferences eller SQLite db på Android, skal du ofte tørre dataene ud og starte forfra. Så her er et par muligheder:
- Afinstaller og geninstaller appen
- Gå til enhedsindstillinger/Apps/Find din app, og klik på den/Storage/Clear Data
Der er en meget nemmere måde at hjælpe din udviklings- og debuggingproces på: Installer et Android Studio-plug-in kaldet ADB Idea. For at installere plug-in’et skal du gå til Android Studio/Preferences/Plugins, klikke på Browse repositories (Gennemse repositories) og søge efter “ADB Idea”. Installer og genstart Android Studio, og du vil se plug-in-muligheden dukke op under Tools/Android/ADB Idea. Prøv det. Jeg finder dette plugin super nyttigt, når jeg har brug for at slette app-data.
Brug et bibliotek
Der er andre muligheder for at få adgang til og inspicere private filer på Android-enheder ved at bruge et bibliotek.
En af mulighederne er at bruge et bibliotek kaldet Android Debug Database, og du kan læse detaljerne i et blogindlæg af forfatteren om dette.