[android] Android Studio 에뮬레이터는 API 23 용 Play 스토어와 함께 제공되지 않습니다.

최신 버전의 Android Studio AVD에서이 에뮬레이터를 선택했습니다.

Google API

Android API 23의 최신 버전을 선택했습니다. “with Google APIs”라고되어 있기 때문에 실제로 Facebook과 같은 앱을 설치할 수 있도록 Play Store를 포함한 모든 Google 앱을 포함 할 것이라고 생각했습니다.

나는 지금 구식 인 것처럼 보이는 다른 스레드를 보았습니다 ( Android Studio 에뮬레이터에 Google Play 앱을 설치하는 방법? ), 이것은 범용 패키지를 기반으로 Google 앱을 설치하는 지침을 제공하지만 Android 4.3 API 18까지만 올라갑니다. http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

API 23 용으로 만들고 싶습니다. 에뮬레이터에 Google Apps 패키지를 설치하는 방법이 있습니까?

공식 안드로이드 에뮬레이터가 처음에 모든 구글 앱에 표준으로 제공되지 않는다는 것이 이상해 보입니다 … 이것은 구글을별로 지원하지 않는 것 같고 잠재적으로 개발자가 API 23 용으로 개발하기 위해 실제 장치를 구입해야한다는 것을 의미합니다. ?



답변

최근에 API 23 에뮬레이터에서이 작업을 수행해야했으며이 가이드를 따랐습니다 . API 23 에뮬레이터에서 작동하므로 문제가 없어야합니다.

참고 : 모든 크레딧은 링크 된 블로그 게시물 (pyoor)의 작성자에게 있습니다. 어떤 이유로 든 링크가 끊어지는 경우를 대비하여 여기에 게시하고 있습니다.

….

GAPPS 패키지 다운로드

다음으로 Android AVD 버전과 일치하는 적절한 Google Apps 패키지를 가져와야합니다. 이 경우 ‘gapps-lp-20141109-signed.zip’패키지를 사용합니다. 여기 BasketBuild 에서 해당 파일을 다운로드 할 수 있습니다 .

[pyoor@localhost]$ md5sum gapps-lp-20141109-signed.zip
367ce76d6b7772c92810720b8b0c931e gapps-lp-20141109-signed.zip

Google Play를 설치하려면 다음 4 개의 APK를 AVD (./ system / priv-app /에 있음)에 푸시해야합니다.

GmsCore.apk, GoogleServicesFramework.apk, GoogleLoginService.apk, Phonesky.apk

[pyoor@localhost]$ unzip -j gapps-lp-20141109-signed.zip \
system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk \
system/priv-app/GoogleLoginService/GoogleLoginService.apk \
system/priv-app/Phonesky/Phonesky.apk \
system/priv-app/GmsCore/GmsCore.apk -d ./

에뮬레이터에 APK 푸시

APK를 추출한 후 다음 명령을 사용하여 AVD를 시작하겠습니다.

[pyoor@localhost tools]$ ./emulator @<YOUR_DEVICE_NAME> -no-boot-anim

AVD가 생성 될 때 처음에는 몇 분 정도 걸릴 수 있습니다. 시작되면 패키지를 장치에 푸시 할 수 있도록 AVD 시스템 파티션을 읽기 / 쓰기로 다시 마운트해야합니다.

[pyoor@localhost]$ cd ~/android-sdk/platform-tools/
[pyoor@localhost platform-tools]$ ./adb remount

다음으로 APK를 AVD로 푸시합니다.

[pyoor@localhost platform-tools]$ ./adb push GmsCore.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push GoogleServicesFramework.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push GoogleLoginService.apk /system/priv-app/
[pyoor@localhost platform-tools]$ ./adb push Phonesky.apk /system/priv-app

이익!

마지막으로 다음 명령을 사용하여 에뮬레이터를 재부팅합니다.

[pyoor@localhost platform-tools]$ ./adb shell stop && ./adb shell start

에뮬레이터가 다시 시작되면 메뉴 실행기에 Google Play 패키지가 표시됩니다. Google 계정을이 AVD와 연결하면 이제 에뮬레이터에서 완전히 작동하는 Google Play 버전이 실행됩니다.


답변

아래는 API 23-25 에뮬레이터 에서 나를 위해 일한 방법입니다 . API 24에 대한 설명이 제공되지만 다른 버전에서도 거의 동일하게 작동합니다.

크레딧 : Jon Doe , zaidorx , pjl .

독자를위한 따뜻한 조언 : 일부는 제공된 스크립트를 통해 자동화되므로 단계를 따르기 전에 단계를 살펴 보시기 바랍니다.


  1. Android 스튜디오의 AVD 관리자 (v2.2.3에서 테스트 됨)에서 ‘Android 7.0 (Google API)’대상으로 새 에뮬레이터를 만듭니다.
    에뮬레이터를 만든 후 AVD 화면.

  2. 에뮬레이터 아키텍처 (CPU / ABI) 용 최신 Open GApps 패키지를 다운로드합니다 . 제 경우에는 x86_64였지만 장치 생성 마법사 중에 선택한 이미지에 따라 다른 것일 수 있습니다. 흥미롭게도 아키텍처는 올바른 Android 버전보다 더 중요해 보입니다 (즉, 6.0의 간격은 7.0 에뮬레이터에서도 작동합니다).

  3. .apk다음 경로 (에 상대적 open_gapps-x86_64-7.0-pico-201#####.zip) 에서 파일을 추출합니다 .

    .zip\Core\gmscore-x86_64.tar.lz\gmscore-x86_64\nodpi\priv-app\PrebuiltGmsCore\
    .zip\Core\gsfcore-all.tar.lz\gsfcore-all\nodpi\priv-app\GoogleServicesFramework\
    .zip\Core\gsflogin-all.tar.lz\gsflogin-all\nodpi\priv-app\GoogleLoginService\
    .zip\Core\vending-all.tar.lz\vending-all\nodpi\priv-app\Phonesky\
    

    Open GApp은 Lzip 웹 사이트 1 , 2 에있는 도구를 사용하여 열 수있는 Lzip 압축을 사용하거나 homebrew :를 사용하여 Mac 에서 열 수 있습니다 brew install lzip. 그런 다음 예를 들어 lzip -d gmscore-x86_64.tar.lz.

    필요한 모든 항목을 자동으로 사용 7z.exe하고 lzip.exe추출 하는 배치 파일을 제공하고 있습니다 .apk(Windows).

    @echo off
    echo.
    echo #################################
    echo Extracting Gapps...
    echo #################################
    7z x -y open_gapps-*.zip -oGAPPS
    
    echo Extracting Lzips...
    lzip -d GAPPS\Core\gmscore-x86_64.tar.lz
    lzip -d GAPPS\Core\gsfcore-all.tar.lz
    lzip -d GAPPS\Core\gsflogin-all.tar.lz
    lzip -d GAPPS\Core\vending-all.tar.lz
    
    move GAPPS\Core\*.tar
    
    echo.
    echo #################################
    echo Extracting tars...
    echo #################################
    
    7z e -y -r *.tar *.apk
    
    echo.
    echo #################################
    echo Cleaning up...
    echo #################################
    rmdir /S /Q GAPPS
    del *.tar
    
    echo.
    echo #################################
    echo All done! Press any key to close.
    echo #################################
    pause>nul
    

    이를 사용하려면 스크립트를 파일 (예 :)에 저장하고 unzip_gapps.bat아래에 설명 된대로 관련된 모든 항목을 하나의 폴더에 넣습니다.
    어떻게 생겼는지 ...

  4. su나중에 업로드 할 파일의 권한을 수정할 수 있도록 바이너리를 업데이트하십시오 . 새로운 su바이너리는 SuperSU by Chainfire 패키지 “Recovery flashable”zip 에서 찾을 수 있습니다 . zip을 가져 와서 어딘가에 압축을 푼 다음 동일한 폴더에 다음 내용으로 배치 파일을 만들고 마지막으로 실행합니다.

    adb root
    adb remount
    
    adb push eu.chainfire.supersu_2.78.apk /system/app/
    adb push x64/su /system/xbin/su
    adb shell chmod 755 /system/xbin/su
    
    adb shell ln -s /system/xbin/su /system/bin/su
    adb shell "su --daemon &"
    adb shell rm /system/app/SdkSetup.apk
    
  5. 모든 .apk파일을 하나의 폴더에 넣고 다음 내용으로 배치 파일을 만듭니다 3 :

    START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system
    adb wait-for-device
    adb root
    adb shell stop
    adb remount
    adb push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore
    adb push GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework
    adb push GoogleLoginService.apk /system/priv-app/GoogleLoginService
    adb push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
    adb shell su root "chmod 777 /system/priv-app/**"
    adb shell su root "chmod 777 /system/priv-app/PrebuiltGmsCore/*"
    adb shell su root "chmod 777 /system/priv-app/GoogleServicesFramework/*"
    adb shell su root "chmod 777 /system/priv-app/GoogleLoginService/*"
    adb shell su root "chmod 777 /system/priv-app/Phonesky/*"
    adb shell start
    

    E:\...\android-sdk\tools\emulator.exe시스템에서 Android SDK의 위치에 따라 경로 를 수정해야합니다 .

  6. 위의 배치 파일을 실행합니다 (나중에 콘솔은 다음과 같아야합니다).

    O:\123>START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system
    
    O:\123>adb wait-for-device
    Hax is enabled
    Hax ram_size 0x60000000
    HAX is working and emulator runs in fast virt mode.
    emulator: Listening for console connections on port: 5554
    emulator: Serial number of this emulator (for ADB): emulator-5554
    
    O:\123>adb root
    
    O:\123>adb shell stop
    
    O:\123>adb remount
    remount succeeded
    
    O:\123>adb push PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/
    [100%] /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
    
    O:\123>adb push GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework/
    [100%] /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
    
    O:\123>adb push GoogleLoginService.apk /system/priv-app/GoogleLoginService/
    [100%] /system/priv-app/GoogleLoginService/GoogleLoginService.apk
    
    O:\123>adb push Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
    [100%] /system/priv-app/Phonesky/Phonesky.apk
    
    O:\123>adb shell su root "chmod 777 /system/priv-app/**"
    
    O:\123>adb shell su root "chmod 777 /system/priv-app/PrebuiltGmsCore/*"
    
    O:\123>adb shell su root "chmod 777 /system/priv-app/GoogleServicesFramework/*"
    
    O:\123>adb shell su root "chmod 777 /system/priv-app/GoogleLoginService/*"
    
    O:\123>adb shell su root "chmod 777 /system/priv-app/Phonesky/*"
    
    O:\123>adb shell start
    
  7. 에뮬레이터가로드되면 닫히고 가상 장치를 삭제 한 다음 동일한 시스템 이미지를 사용하여 다른 장치를 만듭니다 . 응답하지 않는 Play 스토어 앱, ‘Google Play 서비스가 중지되었습니다’및 이와 유사한 문제가 해결됩니다. 이전 단계에서 우리가 실제로 있기 때문에 그것은 작동 시스템 이미지 자체를 수정 합니다 (한 번 봐 걸릴 수정 날짜 에를 android-sdk\system-images\android-24\google_apis\x86_64\system.img). 즉, 지금부터 시스템 이미지로 생성 된 모든 장치에는 간격이 설치됩니다!

  8. 새 AVD를 시작합니다. 로드하는 데 비정상적으로 오래 걸리는 경우 닫고 대신 다음을 사용하여 시작하십시오.

    START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24
    adb wait-for-device
    adb shell "su --daemon &"
    

    AVD가 시작되면 아래 이미지가 표시됩니다. 모서리에있는 Play 스토어 아이콘을 확인하세요.

Play 스토어가 설치된 첫 번째 부팅.


3- 이 모든 명령이 필요한지 확신 할 수 없으며 일부 명령은 과도합니다. 작동하는 것 같습니다. 그게 중요합니다. 🙂


답변

이제 에뮬레이터에서 Play 스토어를 가져 오기 위해 스크립트를 실행하는 패키지를 사이드로드 할 필요가 없습니다. 이제 Android Studio 2.4부터 Play 스토어가 사전 설치된 AVD를 만들 수 있습니다. 현재 Android 7.0 (API 24) 시스템 이미지를 실행하는 AVD에서만 지원됩니다.

공식 출처

Play 스토어를 통한 AVD

참고 : 호환되는 기기는 새로운 Play 스토어 열로 표시됩니다.


답변

마지막 답변에 대해 댓글을 달고 싶었지만 로그인 없이는 답변 만 할 수 있습니다.

“읽기 전용 오류”를 제거하려면 준비가 완료된 후 즉시 장치를 중지하십시오. 내 스크립트는 다음과 같습니다.

#!/bin/bash 
~/bin/AndroidSdk/tools/emulator @Nexus_6P_API_23 -no-boot-anim &
adb wait-for-device
adb shell stop
adb remount
adb push GmsCore.apk /system/priv-app
adb push GoogleServicesFramework.apk /system/priv-app
adb push GoogleLoginService.apk /system/priv-app
adb push Phonesky.apk /system/priv-app
adb shell start


답변

해야 할 일은 config.ini장치 의 파일을 업데이트 하고 시스템 이미지를 다시 다운로드하는 것입니다.

C:\Users\USER\.android\avd\DEVICE_ID\config.ini(Windows) 또는 ~/.android/avd/DEVICE_ID/config.ini(Linux) 에서 다음 값을 업데이트하십시오.

PlayStore.enabled = true
image.sysdir.1=system-images\android-27\google_apis_playstore\x86\
tag.display=Google Play
tag.id=google_apis_playstore

그런 다음 Android 스튜디오> 도구> AVD 관리자 에서 기기의 시스템 이미지를 다시 다운로드합니다.

그게 다입니다. 기기를 다시 시작하면 Play 스토어가 설치됩니다.

이것은 또한 여기에서 답변되었습니다 : Android Studio 에뮬레이터에 Google Play 앱을 설치하는 방법?


답변

쉬운 방법으로 해결 :
처음으로 열기 전에 새 에뮬레이터를 만들어야합니다. 다음 3 단계를 따르세요.

1- “C : \ Users [user] .android \ avd [your virtual device folder] “로 이동 하여 메모장과 같은 텍스트 편집기로 “config.ini” 를 엽니 다.

2- 변경

“PlayStore.enabled = false”

“PlayStore.enabled = true”

3- 변경

“mage.sysdir.1 = system-images \ android-30 \ google_apis \ x86”

…에

“image.sysdir.1 = system-images \ android-30 \ google_apis_playstore \ x86”


답변

다음은 Linux에서 GoogleApis 없이 Nexus 5 API 24 x86 인스턴스를 위해 사용한 스크립트 입니다.

#!/bin/sh

~/Android/Sdk/tools/emulator @A24x86 -no-boot-anim -writable-system & #where A24x86 is the name i gave to my instance
~/Android/Sdk/platform-tools/adb wait-for-device
~/Android/Sdk/platform-tools/adb root
~/Android/Sdk/platform-tools/adb shell stop
~/Android/Sdk/platform-tools/adb remount
~/Android/Sdk/platform-tools/adb push ~/gapps/PrebuiltGmsCore.apk /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/GoogleServicesFramework.apk /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/GoogleLoginService.apk /system/priv-app/GoogleLoginService/GoogleLoginService.apk
~/Android/Sdk/platform-tools/adb push ~/gapps/Phonesky.apk /system/priv-app/Phonesky/Phonesky.apk
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/PrebuiltGmsCore /system/priv-app/GoogleServicesFramework"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleLoginService /system/priv-app/Phonesky"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/PrebuiltGmsCore/PrebuiltGmsCore.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleServicesFramework/GoogleServicesFramework.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/GoogleLoginService/GoogleLoginService.apk"
~/Android/Sdk/platform-tools/adb shell "chmod 777 /system/priv-app/Phonesky/Phonesky.apk"
~/Android/Sdk/platform-tools/adb shell start

이것은 나를 위해 그것을했다.

중요 : 앱 충돌을 방지하려면 Google Play 서비스에 위치 권한을 부여해야합니다.

구성-> 앱-> 구성 (톱니 바퀴 아이콘)-> 앱 권한-> 위치-> (오른쪽 상단 메뉴)-> 시스템 표시-> Google Play 서비스 활성화