Android Studio模拟器不包含适用于API 23的Play商店
我从最新版本的Android Studio AVD中select了这个模拟器。
我select了最新版本的API API 23.因为它说“使用Google API”,我认为它实际上包含了所有的Google应用程序,包括Play Store,这样我就可以安装像Facebook这样的应用程序。
我已经看到了SO上的其他线程( 如何在Android Studio模拟器中安装Google Play应用程序? ),本文给出了基于通用包安装Google应用程序的说明,但仅适用于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 @<YOUR_DEVICE_NAME> -no-boot-anim
AVD创build时,这可能需要几分钟的时间。 一旦开始,我们需要重新安装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
利润!
最后,使用以下命令重新启动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 。
热心的读者build议:请按照以下步骤操作,其中一些通过提供的脚本自动完成。
-
在Android studio的AVDpipe理器(在v2.2.3上testing)中,创build一个新的“Android 7.0(Google APIs)”目标模拟器:
-
下载仿真器架构(CPU / ABI)的最新Open GApps软件包。 在我的情况下,它是
x86_64
,但它可以是在设备创build向导期间取决于您select的图像的东西。 有趣的是,架构似乎比正确的Android版本更重要(即gapps for 6.0也可以在7.0仿真器上工作)。 -
使用以下path解压缩
.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
。我提供了一个batch file,利用
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
二进制文件可以修改我们稍后上传的文件的权限。 通过Chainfire软件包“Recovery flashable ”zip
可以在SuperSU中find一个新的su
二进制文件。 获取压缩文件,将其解压到某个地方,在同一文件夹中创build一个包含以下内容的batch file,最后运行它: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
文件放在一个文件夹中,并用这些内容创build一个batch file3 :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
请注意,path
E:\...\android-sdk\tools\emulator.exe
应根据系统上Android SDK的位置进行修改 。 -
执行上面的batch file(控制台应该看起来像这样):
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 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
-
当模拟器加载时 – closures它,删除虚拟设备,然后使用相同的系统映像创build另一个虚拟设备 。 这修复了无响应的Play商店应用“Google Play服务已停止”以及类似问题。 它的工作原理是因为在之前的步骤中我们实际上已经修改了系统映像本身 (请参阅
android-sdk\system-images\android-24\google_apis\x86_64\system.img
修改的date )。 这意味着从现在开始用系统映像创build的每个设备都将安装gapps! -
开始新的AVD。 如果加载时间非常长,请closures它,然后使用以下命令启动它:
START /BE:\...\android-sdk\tools\emulator.exe @Nexus_6_API_24 adb wait-for-device adb shell "su --daemon &"
AVD开始后,您将看到下面的图像 – 注意angular落里的Play商店图标!
3 – 我不确定所有这些命令是否需要,也许其中一些是矫枉过正的…似乎工作 – 这是很重要的。 🙂
现在不需要加载任何执行任何脚本的软件包来获取模拟器上的Play商店。 现在从Android Studio 2.4开始,您可以创build一个预装了Play商店的AVD。 目前仅支持运行Android 7.0(API 24)系统映像的AVD。
官方来源
注:兼容设备由新的Play Store列表示。
想要评论最后的答案,但没有login,只能做出答案:
为了摆脱“只读错误”,准备就绪后立即停止设备。 我的脚本如下所示:
#!/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
到目前为止,安装apks到/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
命令,APK文件可以从任何运行Google Apps的真实Android设备中adb pull
[要得到apks的确切path,我们可以使用命令pm list packages -f
在adbshell]
这是我在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
这一个为我做了。
重要提示:为了阻止应用程序崩溃记得授予谷歌播放服务的位置权限。
configuration – >应用程序 – >configuration(齿轮图标) – >应用程序权限 – >位置 – >(右上angular菜单) – >显示系统 – >启用Google Play服务
转到http://opengapps.org/并下载您的平台和Android版本的微微版本。; 解压下载的文件夹即可
1. GmsCore.apk
2. GoogleServicesFramework.apk
3. GoogleLoginService.apk
4. Phonesky.apk
然后,find您的emulator.exe。 你可能会find它
C:\用户\ <YOUR_USER_NAME> \应用程序数据\本地\的Android \ SDK \工具
运行命令:
模拟器-avd <YOUR_EMULATOR'S_NAME> -netdelay none -netspeed full -no-boot-anim -writable-system
注意:使用-writable-system来启动模拟器,使用可写的系统映像。
然后,
adb根
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
然后,重新启动模拟器
亚行壳停止
adb shell启动
为了validation运行,
adb shell pm列表包 ,你会发现com.google.android.gms包的谷歌