Intereting Posts
Обнаруживать, оценил ли пользователь приложение на Android Управление памятью Android: плотность экрана, требуемые размеры изображений и доступная куча API Google Диска – имя не должно быть пустым: null (Но я передал действительное имя учетной записи в GoogleAccountCredential) Как захватить необработанное изображение с камеры Android Обнаружение службы BLE для Android (BluetoothGatt # DiscoverServices ()) и Low Energy vs BR / EDR Могу ли я отправить «полученное SMS-сообщение»? Бар перекрывается по оси Y при запуске в aChartEngine Когда действительно используется пакет savedInstanceState? Сколько пользователей получили обновленную версию приложения NoSuchMethodError при использовании realm.io в библиотеке Как очистить трассировку стека событий на обратном пресс-мероприятии? UiAutomator не работает на устройстве 4.1.2 Отключить системные события на Android-обезьяне Как отключить проверку орфографии Android edittext Проблема с первым приложением для Android

Принуждение эмулятора Android для хранения изменений в / system

Я знаю, что это повторяющийся вопрос при работе с эмулятором Android, но есть ли способ заставить эмулятор принимать постоянные изменения в /system ?

Эмулятор основан на QEMU, поэтому теоретически возможно, чтобы заставить изображение system вести себя так же, как и пользовательские данные (например), но я не знаком с тем, как QEMU обрабатывает вещи. Любые указатели?

На данный момент (с помощью Build Tools v26, если Google не меняет вещи так часто, как они есть), если вы используете директиву -writable-system при загрузке эмулятора из командной строки, это позволит настойчивость к /system разделу Через перезагрузки. То есть вы сможете писать на /system раздел, и если вы перезагрузитесь, изменения будут сохранены.

emulator -avd <AVD_NAME> -writable-system

Это также сохранит ваши изменения в qcow2 образа qcow2 обычно в .android/avd/<AVD_NAME>.avd/system.img.qcow2

Вы даже можете скопировать этот файл system.img.qcow2 , стереть данные с AVD с помощью директивы -wipe-data , поместить этот файл обратно в каталог, перезагрузиться и изменения системы, которые вы сделали изначально, по-прежнему будут сохраняться. (Предостережение: по крайней мере на данный момент, поскольку Google продолжает меняться)

Обновление: опция -nand видимому, была удалена из последних версий QEMU, поэтому следующее может не работать.

Обновление: см. Принятый ответ для текущего способа выполнения действий.


Ответ Юрия является общим, но если вы хотите иметь возможность сценариев (в конце концов, это то, что я хочу), вам нужно найти изображение эмулятора в каталоге /tmp .

Я обнаружил, что вы можете переопределить поведение QEMU. Это немного хакерский, но он работает, поэтому я закончил это:

  1. Скопируйте system.img из каталога платформы в каталог AVD.
  2. Преобразуйте объем пространства, необходимый для гексагона. Например, если вам нужно 500M, это 0x1f400000 .
  3. Запустите эмулятор в режиме чтения и записи:

     emulator -avd Galaxy_Nexus -qemu -nand system,size=0x1f400000,file=/home/fx/.android/avd/Galaxy_Nexus/system.img 

    (Если вы поместите эмулятор в подробный режим, вы заметите, что по умолчанию он будет использовать initfile= вместо простого file= )

  4. Внесите свои изменения, они немедленно сохраняются в локальной системе.

  5. Теперь вы можете просто запустить эмулятор с emulator -avd Galaxy_Nexus , и он будет использовать ваши изменения

Обновление: если скрипты, QEMU не синхронизирует изменения непосредственно с изображением, поэтому, если вы сразу перезагружаетесь после изменения чего-либо, скорее всего, вы потеряете данные. Я ищу способ обойти это …

Следующее обновление: Используйте adb -e emu kill чтобы остановить эмулятор. reboot будет просто делать плохие вещи.

На самом деле это очень хороший вопрос. У меня были такие же проблемы. Вот мои выводы. На самом деле, я использую Ubuntu, и я опишу шаги для Ubuntu. Если вы используете Windows, вы должны просто изменить пути.

  1. Создайте новый AVD, например example.avd
  2. Скопируйте system.img с android-sdk-linux/platforms/android-10/images в ~/.android/avd/example.avd
  3. Сделайте system.img доступным для записи и чтения (либо в свойствах, либо просто с помощью терминала)
  4. Запустите свой AVD с помощью emulator -avd example команды emulator -avd example
  5. Перезагрузите свою систему как rw, используя оболочку adb shell mount -o rw,remount -t yaffs2 /dev/block/mtd0 /system (чтобы обнаружить команду использования разделов cat /proc/mtd )
  6. Внесите свои изменения …
  7. Теперь во время запуска эмулятора найдите эмулятор tmp в /tmp/android-<your_computer_name> со странным именем, например: emulator-PQ7LgE и скопируйте его в ~/.android/avd/example.avd
  8. Удалить system.img и переименовать скопированный эмулятор tmp в system.img
  9. Закрыть эмулятор
  10. Удалите cache.img , userdata.img и userdata-qemu.img из ~/.android/avd/example.avd
  11. Запустите свой эмулятор еще раз

Удачи!

Решение №2 удивительно.

Вот несколько советов, если вы используете MS Win, поскольку хосты каталогов AVD расположены ниже, но «короткие» имена путей должны использоваться как параметр file = path. По какой-то причине вариант цитируемого пути не работает.

Win XP: C: \ Documents and Settings \ (имя пользователя) \ .android \ avd \ … Short C: \ DOCUME ~ 1 \ (имя пользователя) \ ANDROI ~ 1 \ avd \ …

Win 7 C: \ Users \ (имя пользователя) \ .android \ avd \ …

Вы можете создать собственный файл bat, например «startrw.bat», как показано в следующем примере:

 @echo off C:\<ADTFOLDER>\sdk\tools\emulator -avd <AVDNAME> -qemu -nand system,size=0x1f400000,file=C:\DOCUME~1\<USERNAME>\ANDROI~1\avd\<AVDNAME>.AVD\system.img cd C:\<ADTFOLDER>\sdk\platform-tools echo . echo Wait ... echo . echo When emulator is FULLY loaded press any key to connect adb shell to it echo To make /system writeable type in adb shell: echo . echo ----------------------------- echo mount -o rw,remount /system echo ----------------------------- echo . echo You can use the Eclipse ADT DDMS File Browser to browse or push-pull files now. echo . echo Closing this window closes the emulator ! echo . echo Wait emulator to load Android. When done pause C:\<ADTFOLDER>\sdk\platform-tools\adb shell 

Таким образом, вы можете загрузить один клик. Закончив модификацию, просто закройте текущее командное окно, чтобы убить эмулятор.

Для загрузки большинства вещей, таких как эмулятор, редактор ADT, требуется много времени для загрузки файлов браузера DDook файлов (вам нужно щелкнуть левой кнопкой мыши по левому экрану эмулятора, чтобы увидеть дерево файлов в правом окне) и так далее.

У меня возникли проблемы с поиском файла system.img и каталога AVD, который опубликовал FX. На Mac вы можете найти их здесь:

  • System.img: ~/Library/Android/sdk/system-images/android-19/default/
  • AVD Directory: ~/.android/avd/Nexus.avd/

У меня недостаточно репутации, чтобы добавить его в качестве комментария, поэтому мне пришлось публиковать его так. Сожалею.

Ответ FX не работает для меня с Android API 19 и 21 на Windows, поскольку он стоит. С заданными параметрами

 emulator -avd <AVD> -qemu -nand system,size=0x<SIZE IN HEX>,file=<PATH/TO/system.img> 

Системе не удается смонтировать изображение. Посмотрев на вывод ядра, я обнаружил, что он использует подозрительный размер страницы (2048) и два ненулевых значения параметра: дополнительный размер и «стереть». Эти параметры нигде не документируются, но вы можете увидеть их в исходном коде qemu . Что для меня работало

 emulator -avd <AVD> -qemu -nand system,size=0x<SIZE IN HEX>,file=<PATH/TO/system.img>,pagesize=512,extrasize=0 

С указанными параметрами «erase» также устанавливается на 0.

Я также был удивлен, узнав, что с этими параметрами система не может загрузиться в графическую среду, но adb работает.

Лучший способ сделать это – использовать следующую команду:

 emulator -avd <AVD> -partition-size 512 

Новый год новых решений.

Просто скопируйте system.img в свою avd-папку и переименуйте system.img в system-qemu.img

Для меня копирование C:\Android\sdk\system-images\android-22\android-tv\armeabi-v7a\system.img в C:\Users\Neil Agarwal\.android\avd\Android_TV_1080p_API_22.avd\ и переименование Это к system-qemu.img сделал трюк.

После этого перезапустите свой avd.