Få adgang til private data på Android

I henhold til den officielle udviklerdokumentation er her mulighederne for datalagring på Android:

  • Delte præferencer - Gem private primitive data i nøgleværdipar.
  • Intern opbevaring - Gem private data i enhedens hukommelse.
  • Ekstern lagring - Gem offentlige data på den delte eksterne lager.
  • SQLite-databaser - Gem strukturerede data i en privat database.
  • Netværksforbindelse - Gem data på nettet med din egen netværksserver.

Bortset fra netværksforbindelsesindstillingen er de andre indstillinger alle vedvarende data på enheden. Både SharedPreferences og SQlite-databaser er private data, der er gemt på enheden. Disse filer er ikke tilgængelige for andre applikationer eller brugere, medmindre du er på en emulator eller en rodet enhed. Her er et par måder, hvordan jeg får adgang til og inspicerer disse private data til fejlfinding under udvikling.

Få adgang til private filer

På en emulator eller en rodet enhed

Hvis du kører en emulator eller en rodet enhed. Du skal have adgang til enhedens private lager. 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: Tools / Android / Android Device Monitor. Naviger til fanen File Explorer, derefter data / data / /. 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 <- Kopiér fra enhed til lokal maskine
adb push local-dir remote-dir <- Kopier fra lokal maskine til enhed

På en ikke-rodet enhed

Hvis du ikke kører på en emulator eller en rodet enhed. Fra kommandolinjen:

adb shell
run-as  F
cd data / data / ...

Nu kan du få adgang til filerne på enhedens interne lager. For at forlade skallen, skal du skrive exit.

exit <- exit fra adb shell

Sqlite-databasefil

Når du først har adgang til SQLite-databasefilen på en emulator, en rodfæstet enhed eller via adb shell / run som [pakkenavn], 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 udføre nogle enkle SQL-scripts.

Inspicér SQLite db via sqlite3 kommandolinjeværktøj

For mig er den lettere mulighed at bruge sqlite3 kommandolinjeværktøj til at inspicere databasen fra adb shell -

adb shell
cd data / data /  / databaser /
sqlite3 
.tables
.schema 

Alternativt kan du bruge sqlite3 lokalt i stedet for inden for en skal, efter at du har trukket databasefilen fra enheden:

adb pull 
sqlite3 

Udslette appdata

Så når du arbejder med SharedPreferences eller SQLite db på Android, skal du ofte udslette dataene og starte forfra. Så her er et par muligheder:

  • Afinstaller og geninstaller appen
  • Gå til enhedsindstillinger / Apps / Find din app, og klik på den / Opbevaring / Ryd data

Der er en meget lettere måde at hjælpe din udvikling og fejlsøgningsproces: installer en Android Studio-plugin, kaldet ADB Idea. For at installere plug-in skal du gå til Android Studio / Præferencer / Plugins, klikke på Gennemse arkiver og søge efter “ADB Idea”. Installer og genstart Android Studio, så vises plug-in-optionen under Værktøjer / Android / ADB Idea. Prøv det. Jeg synes, dette plugin er meget nyttigt, når jeg har brug for at udslette appdata.

Brug et bibliotek

Der er andre muligheder for adgang til og inspektion af private filer på Android-enheder ved hjælp af et bibliotek.

En mulighed er at bruge et bibliotek kaldet Android Debug Database, og du kan læse detaljerne fra et blogindlæg af forfatteren om dette.

Hvis du gerne vil inspicere netværksforbindelser udover database og SharedPreferences, skal du bruge Stetho til et open source debugging værktøj udviklet af Facebook. Når du bruger Stetho, skal din app være i debugtilstand, men der er ikke behov for rodadgang. Det er et kraftfuldt værktøj, der giver dig mulighed for at debugge din app ved hjælp af Chrome Developer Tool.