Android mantiene i file .apk? se sì dove?


187

Dopo che Android installa un'applicazione dal Marketplace, mantiene il file .apk?

Esiste una posizione standard in cui Android manterrebbe tali file?

Risposte:


125

Le applicazioni preinstallate sono nella /system/appcartella. Le applicazioni installate dall'utente sono presenti /data/app. Immagino che non puoi accedere se non hai un telefono rootato. Non ho un telefono rootato qui ma prova questo codice:

public class Testing extends Activity {
    private static final String TAG = "TEST";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        File appsDir = new File("/data/app");

        String[] files = appsDir.list();

        for (int i = 0 ; i < files.length ; i++ ) {
            Log.d(TAG, "File: "+files[i]);

        }
    }

Elenca gli apk nella mia magia htc radicata e nell'emu.


Funzionava come un Charm su Motorola Droid e anche su Nexus One entrambi non rootati.
Gubatron,

Ok, non hai mai detto per cosa li vuoi :)
Macarse

Voglio essere in grado di leggerli e fare cose con loro. Fortunatamente sono leggibili.
Gubatron,

3
La cosa buona è che non solo i file sono "elencabili", ma sono anche leggibili, quindi si adatteranno al mio scopo.
Gubatron,

Ho letto altrove che gli APK in / data / app corrispondono solo alle app scaricate dal Play Store. È corretto o include qualcosa che l'utente ha installato?
Christian,

135

Puoi usare Gestione pacchetti ( pm) sopra adb shellper elencare i pacchetti:

adb shell pm list packages | sort

e per visualizzare dove si trova il .apkfile:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

E adb pullper scaricare l'apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk

2
ogni app ha una cartella con il nome uguale al nome del pacchetto ma "-1" o "-2" alla fine, hai idea del perché?
Shadygoneinsane,

Per specificare il percorso o il nome del file di destinazione,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta

95

Se vuoi solo ottenere un file APK di qualcosa che hai installato in precedenza, procedi come segue:

  1. Ottieni AirDroid da Google Play
  2. Accedi al tuo telefono usando AirDroid dal browser del tuo PC
  3. Vai su App e seleziona l'app installata
  4. Fai clic sul pulsante "download" per scaricare la versione APK di questa app dal tuo telefono

Non è necessario eseguire il root del telefono, utilizzare adbo scrivere nulla.


2
Sottovalutato perché questo non risponde davvero alla domanda. Cosa succederebbe se l'OP volesse utilizzare ADB, in modo che possa essere utilizzato su dispositivi in ​​cui è stato autorizzato il debug, ma la password è stata dimenticata o la schermata è danneggiata.
Hack5,

modo più semplice per ottenere file apk per dispositivo non root.
Fahmi Hammadi,

Grazie. Sottratto causa risponde alla domanda dicendo: "Li mantiene in / data, ma solo se si esegue la procedura X"
ntg

26

Non esiste un percorso standard, tuttavia è possibile utilizzare PackageManager per scoprire i pacchetti e la classe ApplicationInfo che è possibile ottenere da lì contiene varie informazioni su un determinato pacchetto: il percorso del suo .apk, il percorso della sua directory di dati, il percorso a un .apk di sole risorse (per app bloccate in avanti), ecc. Nota che potresti avere o meno il permesso di leggere queste directory a seconda della tua relazione con l'altra app; tuttavia, tutte le app sono in grado di leggere la risorsa .apk (che è anche il vero .apk per l'app non bloccata in avanti).

Se stai solo frugando nella shell, le app attualmente non bloccate in avanti si trovano in /data/app/.apk. L'utente shell può leggere un .apk specifico, sebbene non sia in grado di elencare la directory. In una versione futura la convenzione di denominazione verrà leggermente modificata, quindi non contare sul fatto che rimanga lo stesso, ma se ottieni il percorso di .apk dal gestore dei pacchetti, puoi usarlo nella shell.


2
cos'è un'app bloccata in avanti?
Tony Chan,

1
È un vecchio meccanismo di protezione dalla copia che installava .apk con autorizzazioni che consentivano solo a quell'applicazione di leggerlo.
hackbod,

18

Le app preinstallate sono in genere in / system / app e le app installate dall'utente sono in / data / app.

Puoi usare "adb pull", ma devi conoscere il percorso completo del file APK. Sull'emulatore, puoi ottenere un elenco di directory usando "adb shell" + "ls". Ma su un dispositivo Android, non sarai in grado di farlo nella cartella "/ data" per motivi di sicurezza. Quindi, come si fa a capire il percorso completo del file APK?

È possibile ottenere un elenco completo di tutte le app installate scrivendo un programma che richiede il PackageManager. Frammento di codice breve di seguito:

PackageManager  pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){             
  PackageInfo pkginfo = pkginfo_list.get(x);
  pkg_path[x] = appinfo_list.get(x).publicSourceDir;  //store package path in array
}

Puoi anche trovare app che forniranno tali informazioni. Ce ne sono molti. Prova questo (AppSender).


9

Se stai cercando il percorso di un'app specifica, una soluzione rapida e sporca è semplicemente grep il report bug:

$ adb bugreport | grep 'dir=/data/app' 

Non so che questo fornirà un elenco esaustivo, quindi potrebbe essere utile eseguire prima l'app.


9

Installa dal marketplace

È il comportamento del marketplace se mantenere l'apk dopo l'installazione. Google play non mantiene l'apk dopo l'installazione. Altri mercati di terze parti potrebbero avere comportamenti diversi.

Installa dallo strumento di sviluppo / debug (adb, eclipse, android studio)

Quando installiamo l'apk dallo strumento di debug, invociamo direttamente adb installo da eclipse / android studio, l'apk verrà trasferito ( adb push) in una directory pubblica di lettura e scrittura, di solito /data/local/tmp/. Successivamente, lo strumento utilizzerà il pmcomando per l'installazione, eliminerà l'apk temporaneo in/data/local/tmp/ dopo l'installazione corretta.

Potremmo ottenere queste informazioni dall'output di debug come segue.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Come sistema mantiene l'apk

Ovviamente il sistema deve archiviare tutti gli apk da qualche parte. Esistono tre posizioni in cui il sistema può mantenere gli apk in base ai diversi tipi di apk:

  1. per app di riserva

    Di solito questi vengono spediti nel dispositivo per fabbricazione, inclusa l'app principale per il funzionamento del sistema e il servizio Google, li puoi trovare nella directory /system/appe /system/priv-app.

  2. app installata dall'utente

    La maggior parte degli apk rientra in questa categoria. Questi apk sono generalmente installati dal marketplace dagli utenti o adb installsenza -sopzione. Puoi trovarli nella directory /data/appper un dispositivo rooted.

  3. app su sdcard

    Se l'apk abilita la sua posizione di installazione in sdcard con android:installLocation="auto"nel suo manifest, l'app può essere spostata in sdcard dal menu di gestione app del sistema. Questi apk si trovano solitamente nella cartella sicura di sdcard /mnt/sdcard/asec.

    Un altro modo per forzare il percorso di installazione su sdcard sta usando il comando adb install -s apk-to-install.apk.

Come nota, i file per l'app preinstallata non si trovano più in un singolo .apkfile. Esiste una cartella contenente i file per ogni app preinstallata nella directory /system/appo /system/priv-appper l'ultima versione di Android.


8

Puoi estrarre le app con ADB. Sono in / data / App /, credo.

adb pull (location on device) (where to save)

Tieni presente che devi eseguire il root del telefono per estrarre le app protette da copia.


5

In / data / app ma per la protezione dalla copia non penso che tu possa accedervi.


2
Quindi, come funziona esattamente un'app che consente la condivisione di APK tramite bluetooth? Come lo fanno?
Piccolo bambino,

5

Se sei rootato, scarica l'app Root Explorer. Miglior file manager per utenti rooted. Ad ogni modo, Sistema / app ha tutti gli apk predefiniti forniti con il telefono e data / apk ha tutti gli apk delle app installate. Premi a lungo sull'apk che desideri (mentre sei in Root Explorer), vai alla cartella / sdcard e incolla.


4

Usa questo per elencare tutti i .apks in / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4

4
  • dati / app
  • system / app
  • Sistema / priv-app
  • mnt / asec (se installato in sdcard)

Puoi estrarre i .apks da qualsiasi di essi:

adb pull / mnt / asec


3

I file .apk si trovano nella directory / data / app /. Usando ES File Explorer possiamo accedere a questi file .APK.


2

se stai usando eclipse goto DDMS e quindi Esplora file lì vedrai la cartella Sistema / App e gli apk sono lì


0

Quando ho installato la mia app sull'emulatore, ha mostrato il mio file .apk in

data / app Poi ho usato ls data / app // per vedere se esiste o no

Dopo aver installato l'app, basta usare il comando vie shell shell e controllare la directory desiderata, ma dipende dal tipo di applicazione che si sta tentando di installare. Ho usato questo metodo per installare Point se qualcosa non va.


Sto anche cercando di individuare gli apk, ma quello che ho scoperto è che non è possibile individuare tutti gli apk, quindi suggerisco il metodo di rooting. Non sono riuscito a ottenere tutti gli apk installati. Quindi è meglio eseguire il root del telefono e ottenere tutti gli apk usando Titanium Backup e ottenere un maggiore controllo sul telefono.
Jawad Amjad,

0

Un altro modo per ottenere le apks che non riesci a trovare, su un dispositivo rooted è con la casella degli strumenti rom .

Esegui un backup utilizzando Gestione app quindi vai a storage/emulated/appmanagere controlla il backup dell'app di sistema o il backup dell'app utente .


0

Per trovare un apk , scarica e installa il mittente dell'app Bluetooth dal Play Store. Una volta completata l'installazione, apri il mittente dell'app Bluetooth. Mostrerà tutte le app (.apk)installate sul tuo dispositivo, quindi puoi facilmente trasferire l'app sul tuo PC tramite Bluetooth.


0

A differenza di quanto scritto sulla risposta scelta, non è necessario il root ed è possibile ottenere gli APK delle app installate, ed è così che l'ho fatto sulla mia app ( qui ). Esempio:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Quindi, per ciascuno degli elementi dell'elenco, è possibile accedere a packageInfo.applicationInfo.sourceDir , che è il percorso completo dell'APK dell'app installata.


-1

Bene, sono arrivato a questo post perché volevo reinstallare alcune app che mi piacevano molto. In questo caso, vai su Google Play e cerca Le mie app, la scheda Tutte, e troverai un modo per reinstallare alcune app che ti sono piaciute. Ho riscontrato un problema che non riuscivo a trovare cercando un'app, ma era presente nelle mie app in modo da poterlo reinstallare nel mio nuovo dispositivo mobile;)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.