2010-01-05 6 views
22

Как я могу нагрузить свой пакет приложений в папку «/ system/app» для эмулятора Android?Push my apk to/system/app

Я уже пытался использовать:
"ADB толчок myApk.apk/системы/приложения"
и это дает мне это:

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

Хотя с настройками -> SDCard & Телефон хранения, Я получаю 37 Мб внутреннего свободного пространства.

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

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

ответ

4

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

+1

Перед созданием «adb push ...», Я использовал также adb root, , который должен дать мне привилегии root. Спасибо – Tsimmi

+1

У меня есть корневое устройство, но я не могу использовать adb root, только adb shell «su -», – david

-3

Если вы просто хотите установить его, вы всегда можете: adb install myApk.apk.

+0

Если я просто установить свой пакет таким образом, я дон Получите системные разрешения, такие как INSTALL_PACKAGES. Спасибо ;-D – Tsimmi

+0

Это правильный способ сделать это. Вы не можете нажать APK или написать что-либо в '/ system', даже если у вас есть root-доступ к устройству, так как этот раздел монтируется как доступный только для чтения. –

+0

У вас нет разрешения на установку пакетов, поскольку это проблема безопасности. Приложения не должны устанавливать другие пакеты за спиной людей.Если вам нужен другой пакет, правильный способ сообщить пользователю, в котором они нуждаются, это вызов из этого другого пакета. Если намерение не существует, сообщите пользователю (через всплывающее окно или какой-либо другой текст), что они должны загрузить другое приложение для доступа к этой функции. – AndrewKS

2

Настройки -> sdCard & телефон хранит информацию о папке/данных.

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

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

adb shell 

# df 
0

Вы должны смонтировать систему как чтения/записи, а затем нажмите на приложение.

Это отвечает на этот вопрос: Push .apk to /system/app/ in HTC HERO

1

Вам необходимо запустить adb remount первым, то он должен позволить вам adb push в /system папки

1

следующий пакетный файл будет устанавливать 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/. 

+0

Извините за мои небольшие знания командного файла, я думаю, что командный файл также нужен root, я прав? использовать командный файл в android, вы можете дать ссылку? если дать пакетный файл в демо-версии Android, который является битым, спасибо – pengwang

+0

Да, вам нужно root на устройстве, чтобы запустить командный файл и скопировать что-то на системный mount. Вы не можете перемонтировать накопитель rw без него. ADB запускается как root по умолчанию на эмуляторе. Использование довольно прямолинейно, я обновил сообщение, чтобы включить дополнительные инструкции. – Doug

+0

что среднее для «for/f %% a IN ('dir/b * .apk') делает adb push %% a/system/app /." он может для многих apk помещаться в/system/app /? – pengwang

0

Еще до adb remount вы должны изменить разрешения для/system в оболочке adb. Вы можете использовать chmod, чтобы изменить разрешения.

50

Я могу установить APK на /system/app со следующими шагами.

  1. Push APK to SD card.

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

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

    $ su 
    
  4. перемонтировать системный раздел с разрешения WRITE.

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

    $ cat /sdcard/SecureSetting.apk > /system/app/SecureSetting.apk 
    
  6. Remout /system раздел назад только для чтения, и выход

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

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

+2

Спасибо! замечательно. Есть ли способ избежать необходимости перезагрузки? – Muzikant

+2

Найден способ избежать перезагрузки, но он работает только при установке busybox. вам нужно только ЗАМЕНИТЬ шаг 5 ответа выше, указав следующую команду 'install /sdcard/yourapkfile.apk/system/app' – Muzikant

+1

Я нахожу, что для шага 4 в большинстве случаев он также работает: mount -o remount, rw/system – posaidong

0

Если ваш apk достаточно мал, чтобы нажать, попробуйте еще раз. Я столкнулся с одной и той же проблемой и дважды попытался нажать apks на/system/app/

0

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

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

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

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

1

Используйте команды из командной строки вашего супер-пользователя ADB. Скопируйте APK вашего APP на 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 

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

3

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

Переименовать файл в АПК base.apk

$ adb push base.apk /sdcard/ 

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

$ adb shell 

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

$ su 

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

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

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

$ mkdir /system/app/Test 

Требуется 755 разрешения на этот реж

$ chmod 755 /system/app/Test 

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

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

раздела Remout/системы обратно только для чтения, и выход

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

Re quires 644 разрешение на этот реестр

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

$ exit 

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

+0

Важное замечание: используйте для доступа к системным разрешениям каталог '/ system/priv-app' вместо'/system/app' ** **, например 'android.permission.SHUTDOWN'! Это также важный комментарий: https://stackoverflow.com/questions/2007024/push-my-apk-to-system-app/30340018#comment38365210_10362072 – OneWorld

0

Я наткнулся на эту ситуацию несколько раз при копировании 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 
    
  • Использование дю/Система, чтобы получить размеры каждой папки & файла в /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, может не помочь в этом сценарии. (NB: Этот шаг может потребовать суперпользователя и перемонтажа /system раздел в режиме чтения-записи с помощью монтирования -o Rw, монтирование/система)

Смежные вопросы