2010-01-05 9 views
22

¿Cómo puedo enviar mi paquete de aplicación a la carpeta "/ system/app" del emulador de Android?Empuje mi apk a/system/app

ya he intentado utilizar:
"adb empuje myApk.apk/system/app"
y me da esto:

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

A pesar de los ajustes -> sdcard & del almacenaje, Obtengo 37Mb de espacio libre interno.

El punto entero de esta necesidad es
relacionado con los permisos.

tengo que tener el permiso INSTALL_PACKAGES
y sé que por mi aplicación que pone allí,
en/system/app, consigo ese permiso.

Respuesta

4

Normalmente, la única forma de acceder al directorio "/ system /" es rootear un dispositivo. Aunque no sé exactamente si eso se requiere para el emulador. Ese podría ser tu problema.

+1

Antes de hacer "adb push ...", utilicé también adb root, que debería darme privilegios de administrador. Gracias – Tsimmi

+1

Tengo un dispositivo rooteado, pero no puedo usar adb root, solo adb shell "su -", – david

-3

Si simplemente desea instalarlo, siempre puede hacerlo: adb install myApk.apk.

+0

Si sólo se instala el paquete de esa manera, Pongo obtener permisos del sistema como INSTALL_PACKAGES. Gracias ;-D – Tsimmi

+0

Esta es la forma correcta de hacerlo. No puede presionar una APK ni escribir nada en '/ system' incluso si tiene acceso de raíz al dispositivo, ya que esa partición está montada como de solo lectura. –

+0

No se obtiene el permiso para instalar paquetes porque es un problema de seguridad. Las aplicaciones no deberían poder instalar otros paquetes detrás de la gente.Si necesita instalar otro paquete, la forma correcta de decirle al usuario que lo necesita es invocar un intento de ese otro paquete. Si el intento no existe, informe al usuario (a través de una ventana emergente u otro texto) que debe descargar la otra aplicación para acceder a esa función. – AndrewKS

2

configuración -> sdCard & teléfono de almacenamiento dice about/data folder.

/system se monta por separado y supongo que no hay forma de escribir allí a menos que haga su propia compilación de Android.

Ver montajes ejecutando

adb shell 

# df 
1

Tiene que ejecutar adb remount primero, entonces debería usted dejar que adb push a /system carpetas

1

El siguiente archivo por lotes instalará los archivos apk en la carpeta a la/system/app directory. Monta la unidad del sistema como rw y luego copia los archivos.

Para usarlo, coloque el siguiente código en un editor de texto y guárdelo como install.bat en una máquina con Windows. A continuación, haga doble clic en el archivo por lotes para instalar cualquier archivo APK que esté en la misma carpeta que el archivo por lotes.

NOTA: No puede volver a montar la partición del sistema a menos que tenga una raíz en el dispositivo. Lo he usado principalmente en el emulador, que por defecto es root (y fue la pregunta original), pero el concepto debería ser el mismo en un dispositivo físico.

 
@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

lo siento por mi pequeño conocimiento del archivo por lotes, creo que el archivo por lotes también necesita root, ¿me equivoco? Y cómo usar el archivo por lotes en Android, ¿puedes dar un enlace? si da un archivo por lotes en la demostración de Android que es beatifule, gracias – pengwang

+0

Sí, necesita una raíz en el dispositivo para ejecutar el archivo por lotes y copiar algo en el montaje del sistema. No puede volver a montar la unidad rw sin ella. ADB se ejecuta como raíz de forma predeterminada en el emulador. El uso es bastante directo, he actualizado mi publicación para incluir más instrucciones. – Doug

+0

cuál es la media de "for/f %% a IN ('dir/b * .apk') hacer adb push %% a/system/app /." puede para muchos apk poner a/system/app /? – pengwang

0

Incluso antes de adb remount debe cambiar los permisos para/system en el shell adb. puede usar chmod para cambiar los permisos.

50

Puedo instalar una APK para /system/app con los siguientes pasos.

  1. Presione APK a la tarjeta SD.

    $ adb push SecureSetting.apk /sdcard/ 
    
  2. Introduzca la consola y conseguir la concha

    $ adb shell 
    
  3. Cambie a superusuario. Si su dispositivo no está rooteado, hágalo rootear primero. (Si usted no sabe cómo hacerlo, sólo Google.)

    $ su 
    
  4. Volver a montar la partición del sistema con permisos de escritura.

    $ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
    
  5. gato su APK de /sdcard/ a /system/, algunos chicos se ponen un error con cp comando debido a cp no es compatible. Así que use cat en su lugar.

    $ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk 
    
  6. Remout /system partición de nuevo a sólo lectura, y salida

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

luego reiniciar el dispositivo, el APK deberían haber sido instalado en /system/app.

+2

Gracias! eso es genial. ¿Hay alguna forma de evitar la necesidad de reiniciar? – Muzikant

+2

Encontré una forma de evitar el reinicio, pero solo funciona cuando se instala busybox. solo necesita SUSTITUIR el paso 5 de la respuesta anterior con el siguiente comando 'install /sdcard/yourapkfile.apk/system/app' – Muzikant

+1

Creo que, para el paso 4, la mayoría de las veces también funciona: mount -o remount, rw/system – posaidong

0

Si su apk es lo suficientemente pequeño como para empujar, intente algunas veces nuevamente. Me encontré con el mismo problema e intenté dos veces enviar los apk a/system/app/

0

Aparentemente, no hay suficiente espacio para su aplicación en el montaje "/ system". Puede verificarlo con el comando "adb shell df".

Para resolver este problema, es necesario ajustar el parámetro de partición de tamaño adecuado al iniciar su AVD como esto:

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

Compruebe que dispone de suficientes nodos, es posible que tenga memoria suficiente pero no lo suficiente ínodo archivo es decir, marcador de posición

1

Utilice a continuación los comandos de su superusuario ADB shell. Copie el APK de su aplicación en su tarjeta SD o almacenamiento interno.

$ 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 

luego reiniciar el dispositivo

3

Estos son los pasos si está instalando un sistema de APK para Android 5.0 o dispositivos posteriores. Para versiones anteriores utilizan la respuesta de posaidong

cambiar el nombre del archivo APK a base.apk

$ adb push base.apk /sdcard/ 

Introduzca la consola y conseguir la concha

$ adb shell 

Cambie a superusuario. Si su dispositivo no está rooteado, hágalo rootear primero. (Si no sabes cómo hacerlo, solo Google.)

$ su 

Vuelva a montar la partición del sistema con permiso de ESCRITURA.

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

Crear un directorio de prueba dentro de/system/app folder. (o puede usar/system/priv-app también). Idealmente, este nombre de carpeta debe ser el nombre de la aplicación. Por ahora, permite el uso de pruebas

$ mkdir /system/app/Test 

Requiere 755 permisos para este directorio

$ chmod 755 /system/app/Test 

copiar su base.apk dentro

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

partición Remout/sistema de copia de sólo lectura, y salida

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

Re requiere 644 permiso para este dir

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

$ exit 

Reinicie su dispositivo. Cuando al inicio se realiza debería ver un mensaje del sistema, como la actualización de Android ...

+0

Observación importante: utilice el directorio '/ system/priv-app' en lugar de'/system/app' ** para acceder a los permisos del sistema ** como 'android.permission.SHUTDOWN'! Eso también es un comentario importante: https://stackoverflow.com/questions/2007024/push-my-apk-to-system-app/30340018#comment38365210_10362072 – OneWorld

0

me he encontrado con esta situación varias veces durante la copia de archivos apk a /system partición y, finalmente, podría resolverlo a través de los siguientes pasos:

  • Compruebe el Espacio gratuito en la partición /system usando df de adb shell. Lo más probable es que el espacio libre sea menor que el tamaño del archivo 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 
    
  • Uso du/sistema de para conseguir tamaños de cada archivo de carpetas & en /system partición. Organizar la salida en orden de tamaño (s) descendente para obtener (algo similar):

    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 
    ... 
    
  • eliminar archivos innecesarios de /system/voice/embedded, /system/tts/lang_SMT (para soporte de idiomas/locale) y/o otras carpetas para liberar suficiente espacio en el /system partición para acomodar el nuevo archivo apk. Eliminar archivos en particiones que no sean /system puede no ser útil en este escenario. (NB : Este paso puede requerir privilegios de root y volver a montar /system partición en el modo de lectura-escritura utilizando montaje -o rw, volver a montar/sistema de)