Нажмите мой APK в / system / app - PullRequest
       15

Нажмите мой APK в / system / app

23 голосов
/ 05 января 2010

Как я могу отправить свой пакет приложений в папку эмулятора Android "/ system / app"?

Я уже пытался использовать:
"adb push myApk.apk / system / app"
и это дает мне это:

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

Хотя из настроек -> sdCard & Phone Storage, Я получаю 37Mb внутреннего свободного пространства.

Весь смысл этой потребности
связанные с разрешениями.

Мне нужно разрешение INSTALL_PACKAGES
и я знаю, что, положив туда свою заявку,
в / system / app я получаю это разрешение.

Ответы [ 14 ]

52 голосов
/ 28 апреля 2012

Я могу установить APK на /system/app, выполнив следующие действия.

  1. Нажмите APK на SD-карту.

    $ adb push SecureSetting.apk /sdcard/  
    
  2. Войдите в консоль и получите оболочку

    $ adb shell
    
  3. Переключиться на суперпользователя. Если ваше устройство не имеет root-прав, сначала получите его как root. (Если вы не знаете, как это сделать, просто Google.)

    $ su 
    
  4. Перемонтируйте системный раздел с разрешением WRITE.

    $ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 
    
  5. Смените ваш APK с /sdcard/ на /system/, некоторые парни получают ошибку с командой cp, поскольку cp не поддерживается. Поэтому используйте cat вместо.

    $ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk 
    
  6. Извлеките /system раздел обратно в ТОЛЬКО ДЛЯ ЧТЕНИЯ и выйдите из

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

Затем перезагрузите устройство, APK должен быть установлен на /system/app.

6 голосов
/ 05 января 2010

Обычно единственный способ получить доступ к каталогу "/ system /" - это получить рутированное устройство.Я точно не знаю, требуется ли это для эмулятора, хотя.Это может быть вашей проблемой.

3 голосов
/ 20 мая 2015

Это шаги, если вы устанавливаете системный апк для устройств Android 5.0 или более поздней версии. Для более старых версий используйте ответ posaidong

Переименуйте файл apk в base.apk

$ adb push base.apk /sdcard/  

Войдите в консоль и получите оболочку

$ adb shell

Переключиться на суперпользователя. Если ваше устройство не имеет root-прав, сначала получите его как root. (Если вы не знаете, как это сделать, просто Google.)

$ su 

Перемонтируйте системный раздел с разрешением WRITE.

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

Создать тестовый каталог в папке / system / app. (или можете также использовать / system / priv-app). В идеале это имя папки должно быть именем приложения. А пока давайте используем Test

$ mkdir /system/app/Test 

Требуется разрешение 755 для этого каталога

$ chmod 755 /system/app/Test 

Скопируйте ваш base.apk внутрь

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

Remout / системный раздел обратно в READ-ONLY и выход

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

Требуется разрешение 644 для этого каталога

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

$ exit

Перезагрузите ваше устройство. Когда загрузка завершится, вы должны увидеть системное сообщение, такое как обновление Android ...

2 голосов
/ 05 января 2010

settings -> sdCard и память телефона говорят о папке / data.

/ система монтируется отдельно, и я думаю, что там нет никакого способа написать, если вы не сделаете свою собственную сборку Android.

См монтирует, запустив

adb shell

# df
1 голос
/ 01 апреля 2015

Используйте приведенные ниже команды из вашей супер-пользовательской оболочки ADB. Скопируйте APK вашего приложения на SD-карту или во внутреннюю память.

$ 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

Затем перезагрузите устройство

1 голос
/ 04 ноября 2011

Следующий пакетный файл установит все apk-файлы из папки в каталог / system / app. Он монтирует системный диск как rw, затем копирует файлы.

Чтобы использовать его, поместите следующий код в текстовый редактор и сохраните его как install.bat на компьютере с Windows. Затем дважды щелкните командный файл, чтобы установить все APK-файлы, которые находятся в той же папке, что и командный файл.

ПРИМЕЧАНИЕ. Вы не сможете перемонтировать системный раздел, если у вас нет root на устройстве. Я в основном использовал это на эмуляторе, который по умолчанию имеет root (И это был оригинальный вопрос), но концепция должна быть такой же на физическом устройстве.

@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/.
1 голос
/ 12 сентября 2011

Сначала нужно запустить adb remount, затем он должен позволить вам adb push до /system папок

0 голосов
/ 29 октября 2015

Я сталкивался с этой ситуацией несколько раз при копировании файлов apk в раздел /system и, наконец, смог ее решить, выполнив следующие действия:

  • Проверьте Свободное пространство в /system разделе, используя df из adb shell . Скорее всего, Свободное место будет меньше размера файла 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
    
  • Используйте du / system , чтобы получить размеры каждой папки и файла в /system разделе. Расположите вывод в порядке убывания размера (ов), чтобы получить (что-то похожее):

    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
    ...
    
  • Удалите ненужные файлы из /system/voice/embedded, /system/tts/lang_SMT (для поддержки языка / языка) и / или других папок, чтобы освободить достаточно места в разделе /system для размещения нового файла apk. Удаление файлов в разделах, отличных от /system, может не помочь в этом сценарии. ( N.B. : для этого шага могут потребоваться права ROOT и перемонтирование раздела /system в режиме чтения-записи с использованием mount -o rw, remount / system )

0 голосов
/ 14 декабря 2013

Убедитесь, что у вас достаточно inode, у вас может быть достаточно памяти, но недостаточно inode, т.е. заполнитель файла.

0 голосов
/ 25 ноября 2012

Видимо, для монтирования "/ system" недостаточно места для вашего приложения. Вы можете проверить это с помощью команды "adb shell df".

Чтобы решить эту проблему, вам нужно правильно настроить параметр размера раздела при запуске AVD следующим образом:

emulator.exe -avd <your avd name> -partition-size 512
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...