我从最新版本的Android Studio AVD中选择了这个模拟器.
我选择了最新版本的Android API 23.因为它说"使用Google API",我认为它实际上会包含所有Google应用程序,包括Play商店,以便我可以安装像Facebook这样的应用程序.
我看到的SO其他线程这似乎现在已经过时(如何安装谷歌Play应用程序在Android Studio中模拟器?),这个人给了安装基于通用包谷歌应用程序的指令,但只到Android 4.3的API 18:http://wiki.rootzwiki.com/Google_Apps#Universal_Packages_2
我想要API 23的那个.有没有办法在模拟器上安装Google Apps包?
看起来很奇怪,官方的Android模拟器并没有首先标准所有的谷歌应用程序...这似乎不支持谷歌,并可能意味着开发人员将不得不购买实际的设备来开发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 @-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.
以下是适用于API 23-25仿真器的方法.解释是针对API 24提供的,但对于其他版本几乎完全相同.
致谢:Jon Doe,zaidorx,pjl.
为读者提供热情的建议:请按照以下步骤进行操作,因为有些是通过提供的脚本自动完成的.
在Android studio的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\
请注意,打开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
要使用它,请将脚本保存在文件中(例如unzip_gapps.bat
)并将所有相关内容放在一个文件夹中,如下所示:
更新su
二进制文件,以便能够修改我们稍后上传的文件的权限.su
可以通过Chainfire软件包"Recovery zip
flashable "在SuperSU中找到新的二进制文件.获取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
请注意,E:\...\android-sdk\tools\emulator.exe
应根据系统上Android SDK的位置修改路径.
执行上面的批处理文件(之后控制台应如下所示):
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
).这意味着从现在开始使用系统映像创建的每个设备都将安装gapps!
启动新的AVD.如果加载需要非常长的时间,请将其关闭,然后使用以下命令启动它:
START /B E:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24
adb wait-for-device
adb shell "su --daemon &"
AVD启动后,您将看到下面的图片 - 注意角落里的Play商店图标!
3 - 我不确定是否需要所有这些命令,也许其中一些是矫枉过正的...它似乎有效 - 这才是最重要的.:)
现在没有必要侧面加载执行任何脚本的任何包来获得模拟器上的Play商店.从Android Studio 2.4开始,您现在可以创建一个预先安装了Play商店的AVD.目前,仅支持运行Android 7.0(API 24)系统映像的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