Forçando o emulador de Android a airmazenair alterações no sistema

Eu sei que esta é uma questão recorrente ao trabalhair com o emulador do Android, mas existe uma maneira de forçair o emulador a aceitair mudanças persistentes no /system ?

O emulador baseia-se no QEMU, portanto, deve ser possível, em teoria, forçair a image do system a se comportair da mesma forma que userdata (por exemplo), mas não estou familiairizado com a forma como o QEMU lida com as coisas. Alguma ponteira?

  • Como include milissegundos em uma seqüência de data formatada?
  • Android Studio / Gradle não encontra resources AppCompat paira testes
  • Como você traduz seu aplicativo paira Android?
  • Android Api 24 não consegue encontrair fonts
  • Qual blog de desenvolvimento do Android tem mais walkthroughs e tutoriais?
  • Como publicair o file aair paira o Apache Archiva com Gradle
  • Qual é o projeto Eclipse Andmore?
  • Força o Android paira usair 3G quando estiview na área local wifi sem access à networking
  • Custom FragmentDialog com cantos redondos e sem lairgura de canvas de 100%
  • Adicionair clickListner paira o button dentro de um cairdView preenchido com um reciclador.
  • Como chamair um método definido em um ListFragment de um adaptador?
  • Arrayadapter.getcount excepção de ponto nulo
  • 8 Solutions collect form web for “Forçando o emulador de Android a airmazenair alterações no sistema”

    No momento (com o Build Tools v26, se o Google não mudair as coisas com a frequência que faz), se você usair a -writable-system ao inicializair o emulador a pairtir da linha de command, isso permitirá a persistência da pairtição /system através de reboot. Isso é que você poderá escreview na pairtição do /system e se você reiniciair, as mudanças ainda serão mantidas.

    emulator -avd <AVD_NAME> -writable-system

    Isso também irá persistir suas alterações em um file de image qcow2 geralmente em .android/avd/<AVD_NAME>.avd/system.img.qcow2

    Você pode até copy este file system.img.qcow2 , limpair os dados do AVD usando a -wipe-data , colocair este file de volta no diretório, reiniciair e as alterações do sistema que você fez inicialmente continuairão sendo persistentes. (Aviso: pelo less por enquanto, porque o Google continua mudando as coisas)

    Atualização: a opção -nand foi apairentemente removida das viewsões mais recentes do QEMU, então o seguinte pode não funcionair mais.

    Atualização: veja a resposta aceita paira a maneira atual de fazer as coisas.


    A resposta de Yury é a mais comum, mas se você quiser poder fazer script (e é o que eu quero no final), você precisa encontrair a image do emulador no /tmp .

    Descobri que você pode ignorair o comportamento da QEMU. Isso é um pouco hackeado, mas funciona, então acabei fazendo isso:

    1. Copie system.img do diretório da plataforma paira o diretório AVD.
    2. Conviewta a quantidade de espaço que você precisa paira hexadecimal. Por exemplo, se você precisair de 500M, isso é 0x1f400000 .
    3. Execute o emulador no modo de leitura e gravação:

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

      (Se você colocair o emulador no modo detalhado, notairá que, por padrão, usairá initfile= vez de apenas file= )

    4. Faça suas alterações, elas são imediatamente salvas no sistema local. system.img

    5. Agora você pode apenas iniciair o emulador com o emulator -avd Galaxy_Nexus , e ele usairá suas mudanças

    Atualização: se scripting, QEMU não sincroniza as mudanças imediatamente paira a image, então, se você estiview reiniciando imediatamente depois de mudair algo, é provável que você perca dados. Estou procurando uma maneira de contornair isso …

    Próxima atualização: use adb -e emu kill paira pairair o emulador. reboot apenas fairá coisas ruins.

    Na viewdade, é uma pergunta muito boa. Eu tive os mesmos problemas. Aqui estão minhas descobertas. Na viewdade, eu uso o Ubuntu e descreviewei as etapas paira o Ubuntu. Se você usa o Windows, basta alterair os paths.

    1. Crie novo AVD, por exemplo example.avd
    2. Copie system.img de android-sdk-linux/platforms/android-10/images paira ~/.android/avd/example.avd
    3. Faça system.img como gravável e legível (nas properties ou simplesmente usando o terminal)
    4. Execute o AVD usando o command emulator -avd example
    5. Remonte seu sistema como rw usando adb shell mount -o rw,remount -t yaffs2 /dev/block/mtd0 /system (paira descobrir a pairtição use o command cat /proc/mtd )
    6. Faça suas mudanças …
    7. Agora, durante a execução do emulador, find o emulador tmp em /tmp/android-<your_computer_name> com nome estranho como: emulator-PQ7LgE e copie-o em ~/.android/avd/example.avd
    8. Exclua system.img e renomeie o emulador tmp copiado paira system.img
    9. Emulador próximo
    10. Exclua cache.img , userdata.img e userdata-qemu.img de ~/.android/avd/example.avd
    11. Execute o seu emulador mais uma vez

    Boa sorte!

    A solução # 2 é incrível.

    Aqui estão algumas dicas se você estiview usando o MS Win, pois os diretórios AVD do host estão localizados como abaixo, mas os nomes de path "curto" devem ser usados ​​como pairâmetro de file = path. A vairiante do path citado não funciona por algum motivo.

    Win XP: C: \ Documents and Settings \ (nome de user) \ .android \ avd \ … Short C: \ DOCUME ~ 1 \ (nome de user) \ ANDROI ~ 1 \ avd \ …

    Win 7 C: \ Users \ (nome de user) \ .android \ avd \ …

    Você pode criair um próprio file de morcego, diga "stairtrw.bat" conforme o exemplo a seguir:

     @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 

    Desta forma, você pode cairregair em um clique. Quando terminair de modificair, basta fechair a window de command atual paira matair o emulador.

    Demora muito tempo paira a maioria das coisas cairregair como o Emulator, o editor ADT, o browser de files DDG (você precisa clicair na linha do emulador lado esquerdo paira view a tree dos files na window direita) e assim por diante.

    Eu tive problemas paira encontrair o file system.img e o diretório AVD sobre o qual o FX publicou. No Mac você pode encontrá-los aqui:

    • system.img: ~/Librairy/Android/sdk/system-images/android-19/default/
    • directory AVD: ~/.android/avd/Nexus.avd/

    Eu não tenho reputação suficiente paira adicioná-lo como um comentário, então eu tive que publicá-lo assim. Desculpa.

    A resposta da FX não funciona paira mim com o Android API 19 e 21 no Windows, na sua forma. Com os pairâmetros dados

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

    o sistema crash ao montair a image. Ao analisair a saída do kernel, descobri que ele usa tamanho de página suspeita (2048) e dois valores de pairâmetro não-zero: tamanho extra e "apagair". Esses pairâmetros não são documentados em qualquer lugair, mas você pode vê-los no código-fonte do qemu . O que acabou trabalhando paira mim foi

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

    Com esses pairâmetros especificados, "apagair" também é ajustado paira 0.

    Também fiquei surpreso ao descobrir que, com esses pairâmetros, o sistema não conseguiu inicializair o ambiente graph, mas o AdB funciona.

    A melhor maneira de fazer isso é usair o seguinte command:

     emulator -avd <AVD> -pairtition-size 512 

    Novo ano, novas soluções.

    Basta copy o system.img paira sua pasta avd e renomeair system.img paira system-qemu.img

    Paira mim, copiando C:\Android\sdk\system-images\android-22\android-tv\airmeabi-v7a\system.img paira C:\Users\Neil Agairwal\.android\avd\Android_TV_1080p_API_22.avd\ e renomeando isso paira o sistema-qemu.img fez o truque.

    Reinicie seu avd depois disso.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.