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




자 마린 에뮬레이터 (7)

안드로이드 에뮬레이터로 작업 할 때 이것은 반복적 인 질문이지만, 에뮬레이터가 /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를 다시 시작하십시오.


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

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

Windows에서 안드로이드 API 19 및 21을 사용하면 FX의 대답이 저에게 맞지 않습니다. 주어진 매개 변수로

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

시스템이 이미지를 마운트하지 못합니다. 커널 출력을 살펴보면 의심스러운 페이지 크기 (2048)와 두 개의 0이 아닌 매개 변수 값, 즉 여분의 크기와 "지우기"를 사용한다는 것을 알게되었습니다. 이 매개 변수는 어디에서나 문서화되지는 않지만 qemu의 소스 코드 에서 볼 수 있습니다 . 나를 위해 일한 것은 결국

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

이러한 매개 변수를 지정하면 "지우기"도 0으로 설정됩니다.

또한이 매개 변수를 사용하면 시스템이 그래픽 환경으로 부팅 할 수 없지만 adb가 작동한다는 사실에 놀랐습니다.


사실 아주 좋은 질문입니다. 나는 똑같은 문제가 있었다. 여기 내 결과가있다. 사실, 우분투를 사용하고 우분투의 단계를 설명합니다. 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. 에뮬레이터를 다시 한 번 실행하십시오.

행운을 빕니다!


해결책 # 2는 놀랍습니다.

아래에 호스트 AVD 디렉토리가있는 것처럼 MS Win을 사용하는 경우 몇 가지 힌트가 있지만 "짧은"경로 이름을 file = path 매개 변수로 사용해야합니다. 인용 된 경로 변형은 어떤 이유로 작동하지 않습니다.

Win XP : C : \ Documents and Settings \ (사용자 이름) \ .android \ avd \ ... 짧은 C : \ DOCUME ~ 1 \ (사용자 이름) \ ANDROI ~ 1 \ avd \ ...

Win 7 C : \ Users \ (사용자 이름) \ .android \ avd \ ...

다음 예제에 따라 "startrw.bat"라고하는 자신의 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 편집기, DDMS 파일 브라우저 (오른쪽 창에서 파일 트리를 보려면 왼쪽 에뮬레이터 라인을 클릭해야 함) 등과 같은 많은 것들이로드되는 데 오랜 시간이 걸립니다.


업데이트 : 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 은 나쁜 일을 할 것입니다.


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

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

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





emulation