2010-01-05 11 views
22

Come posso trasferire il pacchetto di applicazioni nella cartella "/ system/app" dell'emulatore Android?Push my apk a/system/app

Ho già provato ad usare:
"adb spinta myApk.apk/system/app"
e mi dà questo:

"failed to copy: ... No space left on device" 

Anche se dalle impostazioni -> sdcard & di immagazzinaggio del telefono, Ottengo 37Mb di spazio libero interno.

L'intero punto di questa esigenza è
relativo alle autorizzazioni.

ho bisogno di avere il permesso INSTALL_PACKAGES
e so che, mettendo la mia domanda là,
in/system/app, ottengo quel permesso.

risposta

4

Normalmente, l'unico modo per accedere alla directory "/ system /" è avere un dispositivo rootato. Non so esattamente se è necessario per l'emulatore. Questo potrebbe essere il tuo problema.

+1

Prima di eseguire "adb push ...", , ho usato anche la root adb, , che dovrebbe darmi i privilegi di root. Grazie – Tsimmi

+1

Ho un dispositivo rooted, ma non posso usare adb root, solo adb shell "su -", – david

-3

Se stai semplicemente cercando di installarlo, puoi sempre fare: adb install myApk.apk.

+0

Se ho appena installato il mio pacchetto in questo modo, io don ottenere le autorizzazioni di sistema come INSTALL_PACKAGES. Grazie ;-D – Tsimmi

+0

Questo è il modo corretto per farlo. Non è possibile inviare un APK o scrivere qualcosa a '/ system' anche se si dispone dell'accesso root al dispositivo, poiché tale partizione viene montata in sola lettura. –

+0

Non si ottiene l'autorizzazione per installare i pacchetti perché si tratta di un problema di sicurezza. Le applicazioni non dovrebbero essere in grado di installare altri pacchetti dietro la schiena delle persone.Se hai bisogno di un altro pacchetto installato, il modo corretto per dire all'utente di cui hanno bisogno è chiamare un intento da quell'altro pacchetto. Se l'intento non esiste, informa l'utente (tramite un popup o altro testo) che deve scaricare l'altra applicazione per accedere a tale funzione. – AndrewKS

2

impostazioni -> sdCard & l'archiviazione del telefono dice circa/cartella dati.

/sistema è montato separatamente e immagino che non ci sia modo di scrivere lì a meno che non si costruisca il proprio build Android.

Vedi supporti eseguendo

adb shell 

# df 
1

È necessario eseguire adb remount prima, allora dovrebbe farvi adb push a /system cartelle

1

il seguente file batch installa tutti i file APK nella cartella al/system/app directory. Monta l'unità di sistema come rw, quindi copia i file.

Per utilizzarlo, inserire il seguente codice in un editor di testo e salvarlo come install.bat su una macchina Windows. Quindi fai doppio clic sul file batch per installare tutti i file APK che si trovano nella stessa cartella del file batch.

NOTA: non è possibile rimontare la partizione di sistema se non si dispone di root sul dispositivo. L'ho usato principalmente sull'emulatore, che per impostazione predefinita è root (ed era la domanda originale), ma il concetto dovrebbe essere lo stesso su un dispositivo fisico.

 
@ECHO OFF 
%~d0 
CD %~dp0 
adb root 
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system 
adb shell rm /system/app/SdkSetup.apk 
for /f %%a IN ('dir /b *.apk') do adb push %%a /system/app/. 

+0

scusa per la mia conoscenza del file batch, penso che anche il file batch abbia bisogno di root, giusto? usa il file batch in Android puoi dare un link? se dare un file batch in demo android che è bello grazie – pengwang

+0

Sì, è necessario root sul dispositivo per eseguire il file batch e copiare qualcosa sul sistema di montaggio. Non è possibile rimontare il drive rw senza di esso. ADB viene eseguito come root per impostazione predefinita sull'emulatore. L'utilizzo è piuttosto semplice, ho aggiornato il mio post per includere ulteriori istruzioni. – Doug

+0

quale sia la media per "for/f %% a IN ('dir/b * .apk') adb push %% a/system/app /." può per molti apk mettere su/system/app /? – pengwang

0

Anche prima di adb remount è necessario modificare le autorizzazioni per/system nella shell di adb. è possibile utilizzare chmod per modificare le autorizzazioni.

50

Posso installare un APK su /system/app con i seguenti passaggi.

  1. Premere APK su scheda SD.

    $ adb push SecureSetting.apk /sdcard/ 
    
  2. entrare nella console e ottenere il guscio

    $ adb shell 
    
  3. Passa a superutente. Se il tuo dispositivo non è rootato, procurati prima il root. (Se non sapete come fare, solo Google.)

    $ su 
    
  4. Rimontare la partizione di sistema con i permessi di scrittura.

    $ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
    
  5. Cat tuo APK /sdcard/-/system/, alcuni ragazzi ottiene un rifiuto con cp comando a causa di cp non è supportata. Quindi utilizzare cat invece.

    $ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk 
    
  6. Remout /system partizione torna a Sola lettura, e l'uscita

    $ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system 
    $ exit 
    

quindi riavvia il dispositivo, l'APK avrebbero dovuto essere installati su /system/app.

+2

Grazie! è fantastico. C'è un modo per evitare la necessità di riavviare? – Muzikant

+2

Trovato un modo per evitare il riavvio, ma funziona solo quando è installato busybox. hai solo bisogno di SOSTITUIRE il punto 5 della risposta sopra con il seguente comando 'install /sdcard/yourapkfile.apk/system/app' – Muzikant

+1

Trovo che, per il punto 4, la maggior parte del tempo funzioni anche: mount -o remount, rw/system – posaidong

0

Se il tuo apk è abbastanza piccolo da entrare, prova ancora qualche volta. Ho incontrato lo stesso problema e ho provato due volte a spingere gli apk su/system/app/

0

Apparentemente, non c'è abbastanza spazio per la tua applicazione nel montaggio "/ system". Puoi verificarlo con il comando "adb shell df".

Per risolvere questo problema, è necessario impostare il parametro di partizione di dimensioni adeguatamente, mentre iniziare la vostra AVD come questo:

emulator.exe -avd <your avd name> -partition-size 512 
0

Verificare di avere abbastanza inode, si può disporre di memoria sufficiente, ma non abbastanza inode cioè di file segnaposto.

1

Utilizza i seguenti comandi dalla shell ADB per superutente. Copia l'APK della tua APP nella scheda SD o nella memoria interna.

$ adb shell 
$ su 
$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
$ cp /sdcard/<Your_APK_PATH> /system/app/file_name_comes_here.apk 
$ chmod 644 /system/app/<YourAPK>.apk 

quindi riavviare il dispositivo

3

Questi sono i passi, se si sta installando un sistema di apk per Android 5.0 o dispositivi successivi. Per le versioni precedenti utilizzano la risposta di posaidong

rinominare il file apk per base.apk

$ adb push base.apk /sdcard/ 

entrare nella console e ottenere il guscio

$ adb shell 

Passa a superutente. Se il tuo dispositivo non è rootato, procurati prima il root. (Se non sai come farlo, solo Google.)

$ su 

Rimontare la partizione di sistema con i permessi di scrittura.

$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 

Creare una directory di test all'interno della cartella/system/app. (o può usare anche/system/priv-app). Idealmente, questo nome di cartella dovrebbe essere il nome dell'applicazione. Per il momento, permette l'uso di test

$ mkdir /system/app/Test 

Richiede 755 permesso per questo dir

$ chmod 755 /system/app/Test 

copiare i base.apk all'interno

$ cat /sdcard/base.apk > /system/app/Test/Base.apk 

partizione Remout/sistema a sola lettura, e uscita

$chmod 644 /system/app/Test/Base.apk 

Re quires 644 i permessi per questa dir

$ mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system 

$ exit 

riavviare il dispositivo. Quando avvio completa si dovrebbe vedere un messaggio di sistema come l'aggiornamento Android ...

+0

Nota importante: utilizzare la directory '/ system/priv-app' invece di'/system/app' ** per accedere alle autorizzazioni di sistema ** come 'android.permission.SHUTDOWN'! Anche questo è un commento importante: https://stackoverflow.com/questions/2007024/push-my-apk-to-system-app/30340018#comment38365210_10362072 – OneWorld

0

Mi sono imbattuto in questa situazione più volte durante la copia dei file APK per /system partizione e potrebbe infine risolverlo utilizzando le seguenti operazioni:

  • Verificare Spazio libero nella partizione /system utilizzando df da adb shell. Molto probabilmente lo spazio libero sarebbe inferiore alla dimensione del file apk.

    Filesystem    Size  Used  Free Blksize 
    /dev       1.3G 80.0K  1.3G  4.0K 
    /sys/fs/cgroup    1.3G 12.0K  1.3G  4.0K 
    /mnt/secure     1.3G  0.0K  1.3G  4.0K 
    /mnt/asec     1.3G  0.0K  1.3G  4.0K 
    /mnt/obb      1.3G  0.0K  1.3G  4.0K 
    /system      3.5G  3.5G 10.0M  4.0K 
    /efs      15.7M  2.8M 12.9M  4.0K 
    /cache      192.8M 736.0K 192.1M  4.0K 
    /data      25.5G 12.7G 12.8G  4.0K 
    /persdata/absolute   4.9M 120.0K  4.8M  4.0K 
    /sbfs      10.8M  8.0K 10.7M  4.0K 
    /mnt/shell/knox-emulated 25.5G 12.7G 12.8G  4.0K 
    /mnt/shell/privatemode  25.4G 12.7G 12.7G  4.0K 
    /mnt/shell/emulated   25.4G 12.7G 12.7G  4.0K 
    /preload      5.8M  3.3M  2.5M  4.0K 
    
  • Usa du/sistema per ottenere dimensioni di ogni & file di cartella in /system partizione. Disporre l'uscita in ordine di grandezza (s) decrescente per ottenere (qualcosa di simile):

    4091840 /system/ 
    1199416 /system/app 
    964064 /system/priv-app 
    558616 /system/lib64 
    373320 /system/lib 
    206624 /system/vendor 
    170952 /system/app/WebViewGoogle 
    148824 /system/app/WebViewGoogle/lib 
    125488 /system/voice 
    125480 /system/voice/embedded 
    122880 /system/app/Chrome 
    106520 /system/framework 
    102224 /system/priv-app/Velvet 
    96552 /system/app/SBrowser_3.0.38 
    93936 /system/vendor/lib64 
    93792 /system/vendor/lib64/egl 
    92552 /system/tts 
    92512 /system/tts/lang_SMT 
    ... 
    
  • cancellare i file inutili dal /system/voice/embedded, /system/tts/lang_SMT (per il supporto della lingua/locale) e/o altre cartelle per liberare spazio sufficiente /system partizione per ospitare il nuovo file apk. L'eliminazione di file in partizioni diverse da /system potrebbe non essere d'aiuto in questo scenario. (NB : questo passaggio potrebbe richiedere privilegi di root e di rimontare /system partizione in modalità di lettura-scrittura utilizzando mount -o rw, remount/sistema)