我从最新版本的 Android Studio AVD 中选择了这个模拟器。
https://i.stack.imgur.com/pHbYX.png
我选择了最新版本的 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 模拟器一开始并没有与所有的谷歌应用程序一起标准......这似乎不太支持谷歌,并且可能意味着开发人员将不得不购买实际设备来开发 API 23 ?
我最近不得不在 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 版本。
以下是在 API 23-25 模拟器上对我有用的方法。解释是针对 API 24 提供的,但对其他版本几乎相同。
给读者的温馨建议:请在遵循这些步骤之前先复习一下,因为有些步骤是通过提供的脚本自动完成的。
在 Android Studio 的 AVD 管理器(在 v2.2.3 上测试)中,使用“Android 7.0 (Google APIs)”目标创建一个新的模拟器:下载适用于模拟器架构 (CPU/ABI) 的最新 Open GApps 包。在我的情况下,它是 x86_64,但它可以是其他东西,具体取决于您在设备创建向导期间选择的图像。有趣的是,架构似乎比正确的 Android 版本更重要(即 6.0 的 gapps 也适用于 7.0 模拟器)。使用以下路径提取 .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 GApps 使用 Lzip 压缩,可以使用以下工具打开Lzip 网站 1,2,或在 Mac 上使用自制软件:brew install lzip。然后例如 lzip -d gmscore-x86_64.tar.lz。我提供了一个批处理文件,它利用 7z.exe 和 lzip.exe 自动提取所有需要的 .apks(在 Windows 上):@echo off echo。 echo ################################ echo 提取间隙... echo ######### ####################### 7z x -y open_gapps-*.zip -oGAPPS echo 提取 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\核心\*.tar 回声。 echo ################################ echo 提取焦油... echo ######### ######################## 7z e -y -r *.tar *.apk 回显。 echo ################################ echo 清理... echo ######### ####################### rmdir /S /Q GAPPS del *.tar 回显。 echo ################################ echo 全部完成!按任意键关闭。 echo ################################ pause>nul 要使用它,请将脚本保存在文件中(例如 unzip_gapps .bat) 并将所有相关内容放在一个文件夹中,如下所示: 更新 su 二进制文件以便能够修改我们稍后将上传的文件的权限。可以在 SuperSU by Chainfire 包“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 将所有 .apk 文件放在一个文件夹中,并使用以下内容创建一个批处理文件3: START /BE:\...\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 的位置进行修改。执行上面的批处理文件(之后控制台应该是这样的):O:\123>START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 -no-boot-anim -writable-system O:\123>adb wait-for-device Hax 已启用 Hax ram_size 0x60000000 HAX 正在工作并且模拟器以快速 virt 模式运行。模拟器:监听端口上的控制台连接:5554 模拟器:此模拟器的序列号(用于 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 当模拟器加载时 - 关闭它,删除虚拟设备,然后使用相同的系统映像创建另一个。这修复了无响应的 Play 商店应用程序、“Google Play 服务已停止”和类似问题。它之所以有效,是因为在前面的步骤中,我们实际上已经修改了系统映像本身(查看在 android-sdk\system-images\android-24\google_apis\x86_64\system.img 上修改的日期)。这意味着从现在开始使用系统映像创建的每个设备都将安装 gapps!启动新的 AVD。如果加载时间过长,请关闭它,然后使用以下命令启动它:START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 adb wait-for-device adb shell "su --daemon & " AVD 启动后,您将看到下图 - 请注意角落的 Play 商店图标!
https://i.stack.imgur.com/UE9z1.png
- 我不确定是否需要所有这些命令,也许其中一些命令是矫枉过正的......它似乎工作 - 这才是最重要的。 :)
/system/app/SdkSetup.apk
。非常感谢,正在努力解决这个问题!
现在无需侧面加载任何执行任何脚本的包即可在模拟器上获取 Play 商店。从 Android Studio 2.4 开始,您现在可以创建一个预装了 Play 商店的 AVD。目前它仅在运行 Android 7.0 (API 24) 系统映像的 AVD 上受支持。
https://i.stack.imgur.com/bBXLJ.png
注意:兼容的设备由新的 Play Store 列表示。
Android 7.0 (Google Play)
的系统映像,而不仅仅是 Google API。目前它仅适用于 API 24,不适用于 API 25。安装系统映像后,它将出现在推荐选项卡下,而不是 x86 映像选项卡下。
想对最后一个答案发表评论,但没有登录只能做出答案:
要摆脱“只读错误”,只需在设备准备好后立即停止设备。我的脚本如下所示:
#!/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
adb wait-for-device
行之后立即添加 adb root
行,以防止出现 Read-only file system
错误。
以简单的方式解决:您应该创建一个新的模拟器,在第一次打开它之前遵循以下 3 个简单的步骤:
1- 使用记事本等文本编辑器转到“C:\Users[user].android\avd[your virtual device folder]”打开“config.ini”
2-改变
“PlayStore.enabled=false”到“PlayStore.enabled=true”
3-改变
“mage.sysdir.1 = 系统图像\android-30\google_apis\x86”
至
“image.sysdir.1 = 系统图像\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服务
您需要做的是更新设备的 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?
转到 http://opengapps.org/ 并下载您平台的 pico 版本和 android 版本。解压下载的文件夹得到
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk
然后,找到您的 emulator.exe。您可能会在 C:\Users\
运行命令:模拟器 -avd
注意:使用 -writable-system 以可写系统映像启动模拟器。
然后, adb root adb remount adb push
然后,重新启动模拟器 adb shell stop adb shell start
要验证运行, adb shell pm list packages 你会发现 com.google.android.gms google 包
截至目前,将 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 的确切路径,我们可以在 adb shell 中使用命令 pm list packages -f
]
只想为只需要 Expo 应用程序的 React Native 用户添加另一个解决方案。
安装 Expo 应用程序 打开你的项目 点击设备 -> 在 Android 上打开 - 在这个阶段,Expo 将安装 expo android 应用程序,您将能够打开它。
不定期副业成功案例分享