以下是适用于API 23-25模拟器的方法。对于其他版本,解释以API 24为例,但几乎完全相同。
致谢:
Jon Doe、
zaidorx、
pjl。
给读者的提示:在按照这些步骤之前,请先仔细查看一下这些步骤,因为其中一些步骤是通过提供的脚本自动完成的。
- 在Android Studio的AVD管理器中(已测试版本为2.2.3),创建一个新的模拟器,目标为"Android 7.0 (Google APIs)" :
![AVD screen after creating the emulator.](https://istack.dev59.com/lJyhs.webp)
- 下载适用于模拟器架构(CPU / ABI)的最新Open GApps包。在我的情况下,它是
x86_64
,但根据您在设备创建向导期间选择的映像,它也可能是其他内容。有趣的是,架构似乎比正确的Android版本(即6.0的gapps也适用于7.0模拟器)更重要。 - 从以下路径(相对于
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上使用Homebrew:
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
),并将所有相关内容放在一个文件夹中,如下所示:
![What it should look like...](https://istack.dev59.com/03zVQ.webp)
更新su
二进制文件,以便能够修改稍后上传的文件的权限。可以在Chainfire的SuperSU软件包“可恢复闪存”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 Store应用程序,“Google Play Services已停止”和类似的问题。它有效是因为在之前的步骤中我们实际上已经修改了系统镜像本身(查看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 Store图标!
![First boot with Play Store installed.](https://istack.dev59.com/UE9z1.webp)
3 - 我不确定是否需要所有这些命令,也许其中一些是过度的...但它似乎起作用了-这就是最重要的。:)