android - 하지 - 자 마린 에뮬레이터




/ system에 변경 사항을 저장하도록 Android 에뮬레이터 강제 설정 (6)

안드로이드 에뮬레이터로 작업 할 때 이것은 반복적 인 질문이지만, 에뮬레이터가 /system 영구적 인 변경 사항을 적용하도록하는 방법이 있습니까?

에뮬레이터는 QEMU를 기반으로하므로 이론적으로 system 이미지가 userdata (예를 들어)와 동일한 방식으로 작동하도록 할 수 있어야하지만 QEMU가 어떻게 처리하는지 익숙하지는 않습니다. 어떤 포인터?


새해 새로운 솔루션.

system.img를 avd 폴더에 복사하고 system.img의 이름을 system-qemu.img로 변경하십시오.

나를 위해 C:\Android\sdk\system-images\android-22\android-tv\armeabi-v7a\system.imgC:\Users\Neil Agarwal\.android\avd\Android_TV_1080p_API_22.avd\ 하고 이름을 변경하십시오. 그것은 시스템 - qemu.img 에 트릭을했다.

이 후에 avd를 다시 시작하십시오.


FX가 게시 한 system.img 파일과 AVD 디렉토리를 찾는 데 어려움이있었습니다. Mac에서는 다음 위치에서 찾을 수 있습니다.

  • system.img : ~/Library/Android/sdk/system-images/android-19/default/
  • AVD 디렉토리 : ~/.android/avd/Nexus.avd/

코멘트로 추가 할만큼 충분한 평판이 없으므로 이렇게 게시해야합니다. 죄송합니다.


사실 아주 좋은 질문입니다. 나는 똑같은 문제가 있었다. 여기 내 결과가있다. 사실, 우분투를 사용하고 우분투의 단계를 설명합니다. Windows를 사용하는 경우 경로 만 변경하면됩니다.

  1. 새 AVD 만들기 (예 : example.avd
  2. android-sdk-linux/platforms/android-10/images 에서 ~/.android/avd/example.avd system.img를 복사하십시오.
  3. system.img를 쓰기 가능 및 읽기 가능하게 만듭니다 (속성에서 또는 단순히 터미널을 사용).
  4. 명령 emulator -avd example 사용하여 AVD 실행
  5. adb 쉘 mount -o rw,remount -t yaffs2 /dev/block/mtd0 /system 사용하여 시스템을 rw로 다시 마운트하십시오 (파티션 사용 명령 cat /proc/mtdmount -o rw,remount -t yaffs2 /dev/block/mtd0 /system )
  6. 변경하십시오 ...
  7. 이제 에뮬레이터를 실행하는 동안 /tmp/android-<your_computer_name> 에 tmp 에뮬레이터를 찾아서 : emulator-PQ7LgE 와 같은 이상한 이름 emulator-PQ7LgE ~/.android/avd/example.avd 복사하십시오.
  8. system.img 삭제하고 복사 된 tmp 에뮬레이터의 이름을 system.img 로 바꿉니다.
  9. 에뮬레이터 닫기
  10. ~/.android/avd/example.avd 에서 cache.img , userdata.imguserdata-qemu.img 를 삭제 cache.img .
  11. 에뮬레이터를 다시 한 번 실행하십시오.

행운을 빕니다!


이를 수행하는 가장 좋은 방법은 다음 명령을 사용하는 것입니다.

<path-to-emulator-executable> -avd <AVD> -partition-size 512

현재 (Build Tools v26에서, Google이 일을 자주 변경하지 않으면) 명령 행에서 에뮬레이터를 부팅하는 동안 -writable-system 지시문을 사용하면 /system 파티션에 지속성을 부여 할 수 있습니다 재부팅을 통해. 즉, /system 파티션에 쓸 수 있으며 재부트하면 변경 사항이 유지됩니다.

emulator -avd <AVD_NAME> -writable-system

이는 또한 .android/avd/<AVD_NAME>.avd/system.img.qcow2 에있는 qcow2 이미지 파일에 대한 변경 사항을 유지합니다.

system.img.qcow2 파일을 복사하고 -wipe-data 지시문을 사용하여 AVD에서 데이터를 -wipe-data 파일을 디렉토리에 다시 놓고 다시 부팅하면 처음에 변경 한 시스템이 계속 유지됩니다. (경고 : 적어도 현재는 구글이 변화하는 것을 유지한다)


업데이트 : QEMU의 최신 버전에서 -nand 옵션이 제거 된 것이므로 더 이상 작동하지 않을 수 있습니다.

업데이트 : 현재 수행중인 방법에 대한 대답을 확인하십시오.

Yury의 답은 공통적 인 대답이지만, 필자가 원하는대로 스크립트 작업을 원한다면 /tmp 디렉토리에서 에뮬레이터 이미지를 찾을 수 있어야합니다.

QEMU의 동작을 무시할 수 있음을 발견했습니다. 이것은 약간 hackish지만, 작동, 그래서 내가 이것을 끝내 :

  1. system.img 를 플랫폼 디렉토리에서 AVD 디렉토리로 복사하십시오.
  2. 필요한 공간을 16 진수로 변환하십시오. 예를 들어 500M이 필요하면 0x1f400000 입니다.
  3. 에뮬레이터를 읽기 - 쓰기 모드로 실행하십시오.

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

    에뮬레이터를 자세한 정보 표시 모드로 설정하면 기본적으로 initfile= 대신 initfile= 사용한다는 것을 알 수 있습니다.

  4. 변경을하면 즉시 로컬 시스템에 저장됩니다.

  5. 이제 emulator -avd Galaxy_Nexusemulator -avd Galaxy_Nexus 시작할 수 있습니다. 그러면 변경 사항이 적용됩니다.

업데이트 : 스크립팅의 경우 QEMU는 이미지에 즉시 변경 사항을 동기화하지 않으므로 무언가를 변경 한 후 즉시 재부팅하면 데이터가 손실 될 가능성이 있습니다. 이 문제를 해결할 방법을 찾고 있는데 ...

다음 업데이트 : adb -e emu kill 을 사용하여 에뮬레이터를 중지하십시오. reboot 은 나쁜 일을 할 것입니다.





emulation