【问题标题】:Android Studio emulator does not come with Play Store for API 23Android Studio 模拟器不附带 API 23 的 Play 商店
【发布时间】:2016-03-21 09:38:28
【问题描述】:

我从最新版本的 Android Studio AVD 中选择了这个模拟器。

我选择了最新版本的 android API 23。因为上面写着“with Google APIs”,所以我认为它实际上会包含所有 Google 应用程序,包括 Play Store,这样我就可以安装 Facebook 等应用程序。

我在 SO 上看到了其他似乎已经过时的线程 (How to install Google Play app in Android Studio emulator?),这个提供了基于通用包安装 Google 应用程序的说明,但它仅适用于 Android 4.3 API 18:http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2

我想要一个用于 API 23 的。有没有办法在模拟器上安装 Google Apps 包?

这似乎很奇怪,官方的 android 模拟器一开始并没有与所有 google 应用程序一起标准......这似乎不太支持 google,并且可能意味着开发人员必须购买实际设备来开发对于 API 23?

【问题讨论】:

  • 谢谢伊薇特女士。我认为为 android 社​​区找到这个问题的答案很重要。那里有许多 android 开发者无法访问实际的 android 设备,我想知道当他们无法访问所有工具时,他们将如何为 android 开发。
  • 我没有足够的信誉在上面发表评论。 Re: 只读 /system 分区,请确保在调用 emulator.exe 时传递“-writable-system”参数。例如:START /B emulator.exe @Nexus_7-2012_API_22 -no-boot-anim -writable-system
  • @pjl - 谢谢你的评论!我已将其添加到我的答案中。
  • Google 表示他们正在努力为模拟器添加对 Play 商店的支持。同时,您可以选择一些解决方法。使用 Amazon Appstore 是一种选择,但不是唯一的选择。见here

标签: android android-studio android-emulator


【解决方案1】:

我最近不得不在 API 23 模拟器上执行此操作,并关注 this guide。它适用于 API 23 模拟器,所以你应该没有问题。

注意:所有功劳归链接博客文章 (pyoor) 的作者所有。我只是在这里发布它,以防链接因任何原因而中断。

....

下载 GAPPS 包

接下来,我们需要下载与我们的 Android AVD 版本匹配的相应 Google Apps 包。在这种情况下,我们将使用“gapps-lp-20141109-signed.zip”包。您可以从 BasketBuild here 下载该文件。

[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 时可能需要几分钟时间。启动后,我们需要将 AVDs 系统分区重新挂载为读/写,以便我们可以将包推送到设备上。

[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 版本。

【讨论】:

  • 我收到“只读文件系统”错误,并且没有安装这些 apk 文件。
  • 不幸的是,BasketBuild 似乎不再可用。 s.basketbuild.com 表示它至少从 9 月 3 日开始下降,没有 ETA 上升。您是否为 Google 应用推荐了其他来源?
  • 如果出现“只读文件系统”错误,请运行命令:“adb remount”。然后再次尝试“adb push ...”命令。
  • 所有链接都失效了
  • 任何无法获得差距的人:f.lomakuit.com/download/gapps-lp-20141109-signed.zip
【解决方案2】:

以下是在 API 23-25 模拟器上为我工作的方法。该解释是针对 API 24 提供的,但对其他版本几乎相同。

学分Jon Doezaidorxpjl

给读者的温馨建议:请在执行之前先复习一下这些步骤,因为有些步骤是通过提供的脚本自动完成的。


  1. 在 Android Studio 的 AVD 管理器(在 v2.2.3 上测试)中,创建一个具有“Android 7.0 (Google APIs)”目标的新模拟器:

  2. 下载最新的Open GApps 包,用于模拟器的架构(CPU/ABI)。在我的情况下,它是x86_64,但它可能是其他东西,具体取决于您在设备创建向导期间选择的图像。有趣的是,架构似乎比正确的 Android 版本更重要(即 6.0 的 gapps 也适用于 7.0 模拟器)。

  3. 使用以下路径(相对于open_gapps-x86_64-7.0-pico-201#####.zip)提取.apk 文件:

    .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 GApps 使用 Lzip 压缩,可以使用 Lzip 网站上的工具1,2 或在 Mac 上使用自制软件打开:brew install lzip。然后例如lzip -d gmscore-x86_64.tar.lz

    我提供了一个批处理文件,它利用 7z.exelzip.exe 自动提取所有必需的 .apks(在 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 二进制文件,以便能够修改我们稍后将上传的文件的权限。可以在 Chainfire 的 SuperSU"Recovery flashable" zip 中找到新的 su 二进制文件。获取 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 上的修改日期)。这意味着从现在开始使用系统映像创建的每台设备都将安装 gapps!

  8. 启动新的 AVD。如果加载时间过长,请关闭它,然后使用以下命令启动它:

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

    AVD 启动后,您将看到下图 - 请注意角落的 Play 商店图标!


3 - 我不确定是否需要所有这些命令,也许其中一些命令过于矫枉过正......它似乎有效 - 这很重要。 :)

【讨论】:

  • Open Gapps 似乎包含 .lz 文件(如 gsfcore-all.tar.lz),而不是 .xz 文件。我尝试了多种工具,但没有一个能够解压缩 .lz 文件,因此我可以获取 APK。有什么建议吗?
  • @Chad Schultz 这是工具download.savannah.gnu.org/releases/lzip 的链接,如果您在 Windows 上下载“lzip-1.11-w32.zip”并使用以下命令将其转换为 .tar 文件并使用另一个最后提取它的工具。
  • @Dev-iL PlayStore 安装在我的模拟器上,但没有打开。我正在使用 Nexus 5 的 x86_64 API 23 系统映像。有什么想法吗?
  • 这在最新的 25/7.1 模拟器上对我有用。唯一奇怪的是/system/app/SdkSetup.apk 在我的图像中不存在。非常感谢,正在努力解决这个问题!
  • 您如何准确地“使用相同的系统映像创建另一个”?
【解决方案3】:

现在无需侧载执行任何脚本的任何包即可在模拟器上获取 Play 商店。从 Android Studio 2.4 开始,您现在可以创建一个预装了 Play 商店的 AVD。目前仅在运行 Android 7.0 (API 24) 系统映像的 AVD 上受支持。

Official Source

注意:兼容的设备由新的 Play 商店列表示。

【讨论】:

  • 注意:您需要安装一个标有 Target:Android 7.0 (Google Play) 的系统映像,而不仅仅是 Google API。目前它仅适用于 API 24,不适用于 API 25。安装系统映像后,它将显示在“推荐”选项卡下,而不是 x86 映像选项卡下。
  • Linux 上的 Android Studio 2.3.3 现在支持 Play 商店 AVD - 但还值得注意的是,目前 Play 商店似乎仅适用于 x86 目标,因此您仍需要使用另一个如果您想在 ARM AVD 上获取 Play 商店,请使用该方法。
  • 现在除了 24 之外,还有适用于 API 25、26 和 27 的图像。
【解决方案4】:

想对最后一个答案发表评论,但没有登录只能做出答案:

要消除“只读错误”,只需在设备准备好后立即停止。我的脚本如下所示:

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

【讨论】:

  • 这个帮我解决了只读文件系统错误。因为我在 Windows 中工作,所以我只是忽略了脚本的第一行,并用这个“START /B /tools/emulator @Nexus_6P_API_23 -no-boot-anim”替换了第二行,用 .bat 扩展名保存并运行它从命令行。
  • 如果你有 adb shell stop stop 把 adb root 放在开头:必须是 root 错误。
  • adb root 应紧跟在adb wait-for-device 行之后,以防止出现Read-only file system 错误。
  • 一旦我像这样将 -writable-system 添加到我的模拟器命令中,这就会起作用,~/android-sdk/tools/emulator @Nexus_5X_API_23 -no-boot-anim -writable-system
【解决方案5】:

轻松解决: 您应该创建一个新的模拟器,在第一次打开它之前按照以下 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"

【讨论】:

    【解决方案6】:

    这是我在 linux 上用于实例 Nexus 5 API 24 x86 WITHOUT 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
    

    这个是为我做的。

    重要提示:为了防止应用崩溃,请记住授予 Google Play 服务位置权限。

    配置->应用->配置(齿轮图标)->应用权限->位置->(右上角菜单)->显示系统->启用Google Play服务

    【讨论】:

      【解决方案7】:

      您需要做的是更新设备的config.ini文件并重新下载系统映像。

      更新.ini文件中的以下值

      • Windows:C:\Users\USER\.android\avd\DEVICE_ID\config.ini
      • Linux:~/.android/avd/DEVICE_ID/config.ini
      PlayStore.enabled = true
      image.sysdir.1=system-images\android-27\google_apis_playstore\x86\
      tag.display=Google Play
      tag.id=google_apis_playstore
      

      然后从 Android Studio > Tools > AVD Manager 重新下载设备的系统映像

      就是这样。重新启动您的设备,您将安装 Play 商店。

      这里也有回答:How to install Google Play app in Android Studio emulator?

      【讨论】:

      • 当我点击下载时,我收到此错误“所有包都无法下载!,以下包不可用:-包 id system-images; android-23; google_apis_playstore; x86”
      【解决方案8】:

      转到http://opengapps.org/ 并下载您平台的 pico 版本和 android 版本。解压下载的文件夹得到
      1. GmsCore.apk
      2. GoogleServicesFramework.apk
      3. GoogleLoginService.apk
      4. Phonesky.apk

      然后,找到您的 emulator.exe。您可能会在
      C:\Users\\AppData\Local\Android\sdk\tools

      中找到它

      运行命令:
      emulator -avd -netdelay none -n​​etspeed full -no-boot-anim -writable-system

      注意:使用 -writable-system 以可写系统映像启动您的模拟器。

      然后,
      adb root
      adb 重新挂载
      adb push /system/priv-app
      adb push /system/priv-app
      adb push /system/priv-app
      adb push /system/priv-app

      然后,重启模拟器
      adb shell stop
      adb shell 启动

      要验证运行,
      adb shell pm list packages 你会发现 com.google.android.gms google 包

      【讨论】:

        【解决方案9】:

        到目前为止,将 apk 安装到 /system 目录似乎可以使用 adb push 命令。

        某些隐藏服务在read-only 模式下自动重新挂载/system 目录。

        通过简单地从我的操作系统安装 system.img 文件并复制文件,我能够在普通虚拟机(即非 Google-Api 虚拟机)中安装 Play 商店。

        # 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
        

        可以使用adb pull 命令从任何运行 Google Apps 的真实 Android 设备中提取 APK 文件

        [ 要获取 apk 的确切路径,我们可以使用命令 pm list packages -f 在 adb shell 内]

        【讨论】:

        • 我已经安装了 linux 并使用 google api 将 apk 复制到 6.0 system.img,但是当我创建一个新的模拟器时,它没有 google play 服务或 google play store。我会用非 google apis rom 再试一次。
        【解决方案10】:

        只想为只需要 Expo 应用的 React Native 用户添加另一个解决方案。

        1. 安装Expo 应用程序
        2. 打开你的项目
        3. 点击设备 -> 在 Android 上打开 - 在此阶段,Expo 将安装 expo android 应用程序,您将能够打开它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-30
          • 2021-02-25
          • 1970-01-01
          • 2019-06-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多