我从最新版本的Android Studio AVD中选择了这个模拟器。
我选择了最新版本的Android API 23.因为它说'#34;使用Google API",我认为它实际上会包含所有Google应用,包括Play商店,以便我可以安装像主页。
我已经看到SO上的其他线程现在似乎已经过时(How to install Google Play app in Android Studio emulator?),这个提供了基于通用软件包安装Google应用程序的说明,但它只适用于Android 4.3 API 18:{{3 }}
我想要一个API 23.有没有办法在模拟器上安装Google Apps包?
官方的Android模拟器一开始并没有成为所有谷歌应用程序的标准,这似乎很奇怪...这似乎并不是谷歌的支持,并且可能意味着开发者必须购买为API 23开发的实际设备?
答案 0 :(得分:50)
我最近必须在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时,这可能需要几分钟时间。一旦启动,我们需要将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
<强>利润!强>
最后,使用以下命令重新启动emualator:
[pyoor@localhost platform-tools]$ ./adb shell stop && ./adb shell start
模拟器重新启动后,我们应该会在菜单启动器中看到Google Play包。将Google帐户与此AVD相关联后,我们现在可以在我们的模拟器下运行完整版Google Play。
答案 1 :(得分:48)
以下是适用于API 23-25 模拟器的方法。解释是针对API 24提供的,但对其他版本的工作方式几乎相同。
为读者提供热情的建议:请按照以下步骤进行操作,因为有些是通过提供的脚本自动完成的。
在Android工作室的AVD管理器中(在v2.2.3上测试),使用“Android 7.0(Google API)”目标创建一个新的模拟器:
下载模拟器架构(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
自动提取所有必需的.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
更新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 /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
请注意,应根据系统上Android SDK的位置修改路径E:\...\android-sdk\tools\emulator.exe
。
执行上述批处理文件(之后控制台应该如下所示):
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
当模拟器加载 - 关闭它时,删除虚拟设备,然后使用相同的系统映像创建另一个虚拟设备。这修复了无法响应的Play商店应用,“Google Play服务已停止”以及类似问题。它的工作原理是因为在前面的步骤中我们实际上修改了系统图像本身(看一下android-sdk\system-images\android-24\google_apis\x86_64\system.img
上的修改日期)。这意味着从现在开始使用系统映像创建的每个设备都将安装gapp!
启动新的AVD。如果加载时间过长,请关闭它,然后使用以下命令启动它:
START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24
adb wait-for-device
adb shell "su --daemon &"
AVD启动后,您将看到下图:注意角落里的Play商店图标!
3 - 我不确定是否需要所有这些命令,也许其中一些是矫枉过正的...它似乎有效 - 这才是最重要的。 :)
答案 2 :(得分:37)
现在没有必要侧面加载任何执行任何脚本的包以在模拟器上获得Play商店。从Android Studio 2.4开始,您现在可以创建一个预先安装了Play商店的AVD。目前,仅支持运行Android 7.0(API 24)系统映像的AVD。
注意:兼容的设备由新的Play商店列表示。
答案 3 :(得分:23)
想要对最后一个答案发表评论,但如果没有登录,则只能回答:
要摆脱“只读错误”,请在设备准备好后立即停止设备。我的脚本如下所示:
#!/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
答案 4 :(得分:4)
轻松解决: 您应该先创建一个新的模拟器,然后再打开它,并遵循以下3个简单步骤:
1-转到“ C:\ Users [用户] .android \ avd [您的虚拟设备文件夹]” ,使用文本编辑器打开“ 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”
答案 5 :(得分:3)
您需要做的是更新设备的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 Studio>工具> AVD管理器
重新下载设备的系统映像仅此而已。重新启动设备,您将安装Play商店。
在这里也得到了回答:How to install Google Play app in Android Studio emulator?
答案 6 :(得分:2)
转到http://opengapps.org/并下载您的平台和Android版本的pico版本。解压缩下载的文件夹以获得
的 1。 GmsCore.apk 强>
的 2。 GoogleServicesFramework.apk 强>
第3。 GoogleLoginService.apk 强>
的 4。 Phonesky.apk
然后,找到您的emulator.exe。您可能会在中找到它 的 C:\用户\&LT; YOUR_USER_NAME&GT; \应用程序数据\本地\的Android \ SDK \工具 强>
运行命令:
模拟器-avd&lt; YOUR_EMULATOR&#39; S_NAME&gt; -netdelay none -netspeed full -no-boot-anim -writable-system
注意:使用-writable-system启动具有可写系统映像的模拟器。
然后,
adb root
adb remount
adb push&lt; PATH_TO GmsCore.apk&gt; /系统/ PRIV-应用的
强>
adb push&lt; PATH_TO GoogleServicesFramework.apk&gt; /系统/ PRIV-应用的
强>
adb push&lt; PATH_TO GoogleLoginService.apk&gt; /系统/ PRIV-应用的
强>
adb push&lt; PATH_TO Phonesky.apk&gt; /系统/ PRIV-应用 强>
然后,重启模拟器
adb shell stop
adb shell start
验证运行,
adb shell pm list packages ,你会发现谷歌的 com.google.android.gms 包
答案 7 :(得分:1)
截至目前,将apks安装到/system
目录似乎正在使用adb push
命令。
某些隐藏服务在/system
模式下自动重新安装read-only
目录。
通过简单地从我的操作系统安装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
命令
[要获得apks的确切路径,我们可以使用命令
adb shell中的pm list packages -f
答案 8 :(得分:1)
这是我在linux上用于实例Nexus 5 API 24 x86 没有 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服务位置权限。
配置 - &gt;应用 - &gt;配置(齿轮图标) - &gt;应用权限 - &gt;位置 - &gt;(右上角) - &gt;显示系统 - &gt;启用Google Play服务
答案 9 :(得分:0)
只想为只需要Expo应用的React Native用户添加另一个解决方案。