O emulador do Android Studio não vem com a Play Store para API 23

92

Selecionei este emulador da versão mais recente do Android Studio AVD.

API do Google

Selecionei a versão mais recente da API do Android 23. Como diz "com APIs do Google", pensei que incluiria todos os aplicativos do Google, incluindo a Play Store, para que eu pudesse instalar aplicativos como o Facebook.

Eu vi outros tópicos no SO que parecem estar desatualizados agora ( Como instalar o aplicativo Google Play no emulador do Android Studio? ), Este dá instruções para instalar aplicativos do Google com base em pacotes universais, mas só vai até o Android 4.3 API 18: http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

Eu gostaria do API 23. Existe uma maneira de instalar o pacote do Google Apps no emulador?

Parece estranho que o emulador oficial do Android não venha padrão com todos os aplicativos do Google em primeiro lugar ... Isso não parece muito favorável ao Google e poderia significar que os desenvolvedores teriam que comprar dispositivos reais para desenvolver para API 23 ?

Simon
fonte
Obrigado Sra. Yvette. Acho importante obter uma resposta a essa pergunta para a comunidade Android. Existem muitos desenvolvedores de Android por aí sem acesso a dispositivos Android reais e eu me pergunto como eles farão o desenvolvimento para Android quando não tiverem acesso a todas as ferramentas.
Simon
1
Não tenho crédito suficiente para comentar acima. Re: a partição do sistema / somente leitura, certifique-se de passar o argumento "-writable-system" ao chamar o emulator.exe. Por exemplo: START / B emulator.exe @ Nexus_7-2012_API_22 -no-boot-anim -writable-system
pjl
@pjl - obrigado por este comentário! Eu adicionei à minha resposta.
Dev-iL de
O Google diz que está trabalhando para adicionar suporte para Play Store ao emulador. Enquanto isso, existem algumas soluções alternativas que você pode escolher. Usar a Amazon Appstore é uma opção, mas não é a única opção. Veja aqui .
inesquecívelidSupportsMonica

Respostas:

56

Tive que fazer isso recentemente no emulador API 23 e segui este guia . Ele funciona para o emulador API 23, então você não deve ter problemas.

Observação: todo o crédito vai para o autor da postagem do blog vinculada (pyoor). Só estou postando aqui para o caso de o link quebrar por algum motivo.

....

Baixe o pacote GAPPS

Em seguida, precisamos obter o pacote apropriado do Google Apps que corresponda à nossa versão AVD do Android. Neste caso, usaremos o pacote 'gapps-lp-20141109-signed.zip'. Você pode baixar esse arquivo do BasketBuild aqui .

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

Para instalar o Google Play, precisaremos enviar os seguintes 4 APKs para nosso AVD (localizado em ./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 ./

Envie APKs para o emulador

Com nossos APKs extraídos, vamos lançar nosso AVD usando o seguinte comando.

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

Isso pode levar vários minutos na primeira vez que o AVD é criado. Uma vez iniciado, precisamos remontar a partição do sistema AVDs como leitura / gravação para que possamos enviar nossos pacotes para o dispositivo.

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

Em seguida, envie os APKs para nosso 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

Lucro!

E, finalmente, reinicie o emualador usando os seguintes comandos:

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

Assim que o emulador for reiniciado, devemos ver o pacote do Google Play aparecer no inicializador de menu. Depois de associar uma conta do Google a este AVD, agora temos uma versão totalmente funcional do Google Play em execução em nosso emulador.

Andy Shephard
fonte
29
Recebo o erro "Sistema de arquivos somente leitura" e nenhum desses arquivos apk está instalado.
wmac
6
Infelizmente, BasketBuild parece não estar mais disponível. s.basketbuild.com indica que está fora do ar desde pelo menos 03/09, sem HEC disponível. Existe outra fonte que você recomenda para os aplicativos do Google?
Chad Schultz
1
Se você obteve o erro "Sistema de arquivos somente leitura", execute o comando: "adb remount". Em seguida, tente os comandos "adb push ..." novamente.
Shangwu
4
Todos os links estão inativos
Mooing Duck
1
qualquer pessoa que não consiga obter gapps: f.lomakuit.com/download/gapps-lp-20141109-signed.zip
Manny265
51

Abaixo está o método que funcionou para mim em emuladores API 23-25 . A explicação é fornecida para API 24, mas funciona quase de forma idêntica para outras versões.

Créditos : Jon Doe , zaidorx , pjl .

Conselho caloroso para os leitores: apenas repasse as etapas antes de segui-las, pois algumas são automatizadas por meio dos scripts fornecidos.


  1. No gerenciador AVD do Android Studio (testado na v2.2.3), crie um novo emulador com o alvo "Android 7.0 (APIs do Google)": Tela AVD após a criação do emulador.

  2. Baixe o pacote Open GApps mais recente para a arquitetura do emulador (CPU / ABI). No meu caso, foi x86_64, mas pode ser outra coisa, dependendo da sua escolha de imagem durante o assistente de criação de dispositivo. Curiosamente, a arquitetura parece mais importante do que a versão correta do Android (ou seja, os gapps para 6.0 também funcionam em um emulador 7.0).

  3. Extraia os .apkarquivos usando os seguintes caminhos (relativos a 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\

    Nota que o Open GAPPS usar a compressão lzip, que pode ser aberto usando a ferramenta encontrada no site da lzip 1 , 2 , ou no Mac usando homebrew: brew install lzip. Então, por exemplo lzip -d gmscore-x86_64.tar.lz.

    Estou fornecendo um arquivo em lote que utiliza 7z.exee lzip.exeextrai todos os .apks necessários automaticamente (no 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

    Para usar isso, salve o script em um arquivo (por exemplo unzip_gapps.bat) e coloque tudo o que for relevante em uma pasta, conforme demonstrado abaixo: Qual deve ser a aparência ...

  4. Atualize o subinário para poder modificar as permissões dos arquivos que enviaremos posteriormente. Um novo subinário pode ser encontrado no pacote SuperSU by Chainfire "Recovery flashable"zip . Obtenha o zip, extraia-o em algum lugar, crie um arquivo em lote com o seguinte conteúdo na mesma pasta e, finalmente, execute-o:

    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. Coloque todos os .apkarquivos em uma pasta e crie um arquivo em lote com este conteúdo 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

    Observe que o caminho E:\...\android-sdk\tools\emulator.exedeve ser modificado de acordo com a localização do Android SDK em seu sistema.

  6. Execute o arquivo em lote acima (o console deve ter a seguinte aparência):

    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. Quando o emulador carregar - feche-o, exclua o dispositivo virtual e crie outro usando a mesma imagem do sistema . Isso corrige o aplicativo Play Store que não responde, "Google Play Services parou" e problemas semelhantes. Funciona porque nas etapas anteriores nós modificamos a própria imagem do sistema (dê uma olhada na Data de modificação em android-sdk\system-images\android-24\google_apis\x86_64\system.img). Isso significa que todos os dispositivos criados a partir de agora com a imagem do sistema terão gapps instalados!

  8. Inicie o novo AVD. Se demorar muito para carregar, feche-o e inicie-o usando:

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

    Depois que o AVD iniciar, você verá a imagem abaixo - observe o ícone da Play Store no canto!

Inicialize primeiro com a Play Store instalada.


3 - Não tenho certeza se todos esses comandos são necessários, e talvez alguns deles sejam exageros ... parece funcionar - que é o que conta. :)

Diabo
fonte
2
Em vez de arquivos .xz, Open Gapps parece conter arquivos .lz (como gsfcore-all.tar.lz). Tentei várias ferramentas, nenhuma das quais é capaz de descompactar os arquivos .lz para que eu possa acessar os APKs. Alguma sugestão?
Chad Schultz,
2
@Chad Schultz aqui está o link para a ferramenta download.savannah.gnu.org/releases/lzip se você estiver no Windows, baixe "lzip-1.11-w32.zip" e use o seguinte comando para convertê-lo em um arquivo .tar e usar outro ferramenta para finalmente extraí-lo.
f4b
1
@Dev-iL PlayStore é instalado no meu emulador, mas não abre. Estou usando um x86_64 API 23 System Image do Nexus 5. Alguma ideia?
ARK
3
Isso funcionou para mim no emulador 25 / 7.1 mais recente. A única coisa estranha era que /system/app/SdkSetup.apknão existia na minha imagem. Muito obrigado, estava ficando louco tentando resolver isso!
wilsonpage
1
Como você exatamente "cria outro usando a mesma imagem do sistema"?
gavsiu
41

Agora não há necessidade de carregar nenhum pacote ou executar qualquer script para obter o Play Store no emulador. A partir do Android Studio 2.4, agora você pode criar um AVD com Play Store pré-instalado. Atualmente, é compatível apenas com AVDs que executam imagens do sistema Android 7.0 (API 24).

Fonte Oficial

AVD com Play Store

Nota: os dispositivos compatíveis são indicados pela nova coluna Play Store.

Prerak Sola
fonte
6
Nota: você precisa instalar uma imagem do sistema que diga Target:, Android 7.0 (Google Play)não apenas APIs do Google. Atualmente, está disponível apenas para API 24, não API 25. Depois de instalar a imagem do sistema, ela aparecerá na guia Recomendado, não na guia Imagens x86.
antoine
2
O Android Studio 2.3.3 no Linux agora oferece suporte a AVDs da Play Store - mas também é importante notar que a Play Store parece estar disponível apenas em destinos x86 no momento, então você ainda precisará usar outro método se quiser obter o Play Armazene em um ARM AVD.
NullColaShip
Agora também existem imagens para APIs 25, 26 e 27 além de 24.
arekolek
25

Queria comentar a última resposta, mas sem login só é possível fazer uma resposta:

Para se livrar do "erro somente leitura", pare o dispositivo imediatamente após estar pronto. Meu script é o seguinte:

#!/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
Jon Doe
fonte
1
Este me ajuda a resolver o erro do sistema de arquivos somente leitura. como estou trabalhando no Windows, simplesmente ignorei a primeira linha do script e substituí a segunda por este "START / B / tools / emulator @ Nexus_6P_API_23 -no-boot-anim", salvei com a extensão .bat e executei da linha de comando.
Zaidorx
1
Isso é incrível, acabei de remover as primeiras duas linhas, iniciei o emulador por conta própria e executei o arquivo BAT ... funcionou perfeitamente
Im Rick James
coloque adb root no começo se você tiver o adb shell stop stop: deve ser o erro de root.
nutella_eater
adb roota linha deve ser adicionada imediatamente após a adb wait-for-devicelinha para evitar Read-only file systemerros.
efkan
1
Isso funcionou depois que eu adicionei -writable-system ao comando do meu emulador como este, ~ / android-sdk / tools / emulator @ Nexus_5X_API_23 -no-boot-anim -writable-system
reassembler
2

Aqui está o script que usei no linux para uma instância Nexus 5 API 24 x86 SEM GoogleApis.

#!/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

Este fez isso por mim.

IMPORTANTE: para impedir que o aplicativo falhe, lembre-se de conceder as permissões de localização dos serviços do Google Play.

Configuração-> Aplicativos-> Configuração (ícone de engrenagem) -> Permissões do aplicativo-> Localização -> (menu superior direito) -> Mostrar sistema-> Ativar serviços do Google Play

Richard
fonte
2

Vá para http://opengapps.org/ e baixe a versão pico da sua plataforma e versão do Android. Descompacte a pasta baixada para obter
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk

Em seguida, localize seu emulator.exe. Você provavelmente o encontrará em
C: \ Usuários \ <YOUR_USER_NAME> \ AppData \ Local \ Android \ sdk \ tools

Execute o comando:
emulator -avd <YOUR_EMULATOR'S_NAME> -netdelay none -netspeed full -no-boot-anim -writable-system

Nota: Use -writable-system para iniciar seu emulador com a imagem do sistema gravável.

Em seguida,
adb root
adb remount
adb push <PATH_TO GmsCore.apk> / system / priv-app
adb push <PATH_TO GoogleServicesFramework.apk> / system / priv-app
adb push <PATH_TO GoogleLoginService.apk> / system / priv-app
adb push <PATH_TO Phonesky.apk> / system / priv-app

Em seguida, reinicie o emulador
adb shell stop
adb shell start

Para verificar a execução,
adb shell pm lista os pacotes e você encontrará o pacote com.google.android.gms para google

Saini Arun
fonte
1

A partir de agora, a instalação dos apks no /systemdiretório parece estar funcionando usando o adb pushcomando.

Algum serviço oculto estava remontando automaticamente o /systemdiretório no read-onlymodo.

De qualquer forma, consegui instalar a Play Store em uma máquina virtual normal (ou seja, máquina virtual não Google-Api) simplesmente montando o system.imgarquivo do meu sistema operacional e copiando os arquivos.

# To be executed as root user in your Unix based OS
mkdir sys_temp
mount $SDK_HOME/system-images/android-23/default/x86/system.img sys_temp -o loop
cp Phonesky.apk GmsCore.apk GoogleLoginService.apk GoogleServicesFramework.apk ./sys_temp/priv-app/
umount sys_temp
rmdir sys_temp

Os arquivos APK podem ser extraídos de qualquer dispositivo Android real executando o Google Apps usando o adb pullcomando

[Para obter o caminho exato dos apks, podemos usar o comando pm list packages -fdentro do shell adb]

harish2704
fonte
Não estou convencido de que haja algum serviço "misterioso" em execução ... ao contrário, havia um bug no emulador (ou nas imagens do sistema) que parece ter sido corrigido, o que permitiu que várias cópias de apks existissem no /systemdiretório. Percebi que apkcolocar cada um dos s em uma pasta correta não resulta em erros de gravação. Atualizei minha resposta - você poderia tentar se funciona para você agora?
Dev-iL
Estou enfrentando o mesmo problema, não consegui passar o sistema de arquivos somente leitura quando push apks, acho que a única maneira é editar a imagem do sistema android do emulador e depois como editar a imagem do android do windows 8, obrigado. Preciso instalar o serviço google play mais recente e o jogo google play no emulador do Android 6.0.
noname.cs
2
Eu instalei o linux e copiei o apks para um system.img 6.0 com o google apis, mas quando criei um novo emulador, ele não tinha o serviço google play ou a loja google play. Vou tentar novamente com apis rom não google.
noname.cs
1

Resolvido de maneira fácil: você deve criar um novo emulador, antes de abri-lo pela primeira vez, siga estas 3 etapas fáceis:

1- vá para C: \ Usuários [usuário] .android \ avd [pasta do seu dispositivo virtual] abra "config.ini" com um editor de texto como o bloco de notas

2- mudança

"PlayStore.enabled = false" para "PlayStore.enabled = true"

3- mudança

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

para

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

Sharif Yazdian
fonte
1

O que você precisa fazer é atualizar o config.iniarquivo do dispositivo e baixar novamente a imagem do sistema.

Atualize os seguintes valores em C:\Users\USER\.android\avd\DEVICE_ID\config.ini(no Windows) ou ~/.android/avd/DEVICE_ID/config.ini(no Linux)

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

Em seguida, baixe novamente a imagem do sistema para o dispositivo em Android Studio> Ferramentas> AVD Manager

Isso é tudo. Reinicie o dispositivo e você terá a Play Store instalada.

Isso também foi respondido aqui: Como instalar o aplicativo Google Play no emulador do Android Studio?

Aamnah
fonte
0

Só quero adicionar outra solução para usuários React Native que precisam apenas do aplicativo Expo.

  1. Instale o aplicativo Expo
  2. Abra seu projeto
  3. Clique em Dispositivo -> Abrir no Android - Neste estágio, a Expo irá instalar o aplicativo expo para Android e você poderá abri-lo.
chenop
fonte