Mac 기준으로 작성
이 글은 android emulator에서 로컬 도메인을 이용해 local 서버에 접근하려는 사람에게 필요한 글이다.
로컬 도메인이 아닌 localhost로 접근하는 것은 10.0.2.2 주소로 접근하면 된다.
emulator를 쓰기 가능한 상태로 실행하고 emulator 내부의 hosts 파일을 수정해야 한다.
그러기 위해선 device가 Google Play가 아닌 Google APIs 이미지인 것으로 실행해야 한다.
Google Play는 디버그 버전이 아닌 프로덕션 버전이므로 root접근 권한이 없어 내부의 파일 수정이 불가능하다.
물론 Google Play를 쓰지 않으므로 다른 앱을 설치할 수 없어 사용이 불가능하다. (한글 입력을 위해서 Gboard란 앱이 필요한데 설치할 수 없어 한글 사용도 불가능하다.)
이러한 점 때문에 난 현재는 로컬 도메인을 사용하지 않는다.
하지만 누군가는 필요할 것이라고 생각해 작성해둔다.
device생성 시 입력된 이름을 알아야 하는데 모르면 'emulator -list-avds' 명령으로 찾거나 android avd manager에서 찾아야 한다.
적용 순서
1. 터미널을 이용해 에뮬레이터를 쓰기 가능한 시스템으로 실행
emulator -avd 에뮬레이터이름 -writable-system
Android Studio에서 실행해도 언제나 쓰기 가능한 시스템으로 실행하도록 하려면 추가로 설정 필요하다.
2. adb의 경로가 환경변수에 추가되어 있지 않으면 adb가 있는 경로로 이동해야 함
cd /Users/사용자이름/Library/Android/sdk/platform-tools
3. 루트 권한으로 재실행
./adb root
4. 에뮬레이터와 다시 연결
./adb remount
5. 에뮬레이터에 있는 hosts파일을 데스크탑에 복사
./adb -e pull /system/etc/hosts ~/Desktop
-e 옵션실행되어 있는 에뮬레이터만 하나만 인식하여 명령을 실행하는데 에뮬레이터가 여러개 실행되어 있으면 에러가 발생한다.
여러 에뮬레이터 사용 중에 하려면 ./adb devices 명령을 실행했을 때 왼쪽의 emulator-5554 와 같은게 나오는데 이것이 에뮬레이터의 시리얼 번호인데 -s 옵션으로 명시해서 사용 가능하다. ( ./adb -s emulator-5554 명령어 <-> ./adb -e 명령어 )
6. 파일을 열어 필요한 내용 입력(로컬 서버 ip는 시스템 환경셜정-네트워크에 나와있는 ip 주소를 쓰면 된다.)
로컬서버ip 로컬도메인
7. 수정한 hosts파일을 다시 에뮬레이터로 붙여넣기
./adb -e push ~/Desktop/hosts /system/etc/
8. 적용 되어있는지 hosts 파일의 내용 확인
./adb shell cat /etc/hosts
9. 정상적으로 작동하는지 ping으로 확인
./adb shell ping 로컬도메인
emulator에 local domain 적용 참고
Google Play 와 Google APIs 차이