Risposte:
Le applicazioni preinstallate sono nella /system/app
cartella. 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.
Puoi usare Gestione pacchetti ( pm
) sopra adb shell
per elencare i pacchetti:
adb shell pm list packages | sort
e per visualizzare dove si trova il .apk
file:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
E adb pull
per scaricare l'apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Se vuoi solo ottenere un file APK di qualcosa che hai installato in precedenza, procedi come segue:
Non è necessario eseguire il root del telefono, utilizzare adb
o scrivere nulla.
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.
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).
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.
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 install
o 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 pm
comando 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:
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/app
e /system/priv-app
.
app installata dall'utente
La maggior parte degli apk rientra in questa categoria. Questi apk sono generalmente installati dal marketplace dagli utenti o adb install
senza -s
opzione. Puoi trovarli nella directory /data/app
per un dispositivo rooted.
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 .apk
file. Esiste una cartella contenente i file per ogni app preinstallata nella directory /system/app
o /system/priv-app
per l'ultima versione di Android.
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.
In / data / app ma per la protezione dalla copia non penso che tu possa accedervi.
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.
se stai usando eclipse goto DDMS e quindi Esplora file lì vedrai la cartella Sistema / App e gli apk sono lì
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.
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.
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.
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;)