模拟器中的 Google Play 服务,实现 Google Plus 登录按钮等

Posted

技术标签:

【中文标题】模拟器中的 Google Play 服务,实现 Google Plus 登录按钮等【英文标题】:Google Play Services in emulator, implementing Google Plus login button etc 【发布时间】:2013-04-06 16:53:23 【问题描述】:

android 应用中集成 Google Plus 登录按钮时,我发现按钮在实际设备和模拟器中的显示方式存在一些差异。我知道 Google Plus 服务 APK 未安装在模拟器中,但这可以通过从设备中提取 APK 并使用 APK 将它们安装到模拟器中来解决。

我当前的“实现”只是在布局中包含登录按钮,通过使用以下 XML 代码引用按钮:

<com.google.android.gms.common.SignInButton
    android:id="@+id/sign_in_button"
    android:layout_
    android:layout_ />

根据此处https://developers.google.com/+/mobile/android/sign-in 中提到的指南,当我在设备上测试我的应用程序时,按钮显示为红色且闪亮。但是在模拟器上运行时,它只是一个普通的按钮(灰色背景,黑色文本),上面写着“使用 Google 登录”。

知道为什么结果不同吗?我确保我运行的是相同的 API 级别,并且资源似乎也被正确地拉入了模拟器,因为它显示了实际的登录按钮(但外观不同)。

更新:在logcat中找到了线索;消息“未找到登录按钮,请改用占位符。”几乎可以解释为什么我在模拟器上看到灰色沉闷的按钮。仍然需要弄清楚原因;可能是“从设备复制 google plus apk”黑客无法正常工作。

【问题讨论】:

Android API 级别在设备和模拟器上是否相同? 是的,正如我在问题中所写的那样。 【参考方案1】:

Google Play 服务可在 4.2.2 版本的 Android 模拟器上运行,并如 Android documentation: Setup Google Play Services 中所述受到官方支持。

更新

您现在可以将 Intel/x86 映像(HAXM 兼容)用于 API 19 和更新版本,对于 ARM,Google Play 服务可用于大多数映像。

设置图片

要为您的虚拟设备管理器获取正确的映像:

打开 Android SDK 管理器 打开群组 Android 4.2.2 (API 17) 检查 Google API 检查 ARM EABI v7a 系统映像

创建虚拟设备:

打开安卓虚拟设备管理器 创建新设备 输入 AVD 名称 将目标设置为 Google APIs (Google Inc.) - API 级别 17 保存您的虚拟设备并启动它...

注意 CPU/ABI 将被固定为 ARM

现在您应该可以在模拟器中使用 Google Play 服务了。值得注意的是,您需要在您的 Android 项目中将目标适当地设置为 Google API,以便 Google Play 服务正常工作。

【讨论】:

是否有计划使用英特尔凌动 x86 映像进行这项工作? ARM 模拟器几乎无法使用。 我同意 @jophde 的观点,即 ARM 仿真器运行缓慢,启动和执行操作需要 4 到 5 倍的时间。 我无法在模拟器中运行地图,请您帮帮我 @Richa 请提出另一个标记 google-maps 的问题 - ***.com/questions/tagged/google-maps @class 您能解释一下“值得注意的是,您需要在您的 Android 项目中将您的目标适当地设置为 Google API,以便 Google Play 服务正常工作。”?【参考方案2】:

我尝试了运行模拟器的大多数组合,但有无 Google API,这意味着我在 x86 和 arm 模式下都进行了测试。我发现无法让从我的 Galaxy Nexus 手机中提取的 apk 在模拟器上正常运行。

猜测这与让 Play 商店启动和运行有些相关,我决定也尝试一下,看看我是否有更多的运气。我没有;也无法正常工作。 Play 商店图标出现并且可以启动,但它会立即自行关闭。

但是起作用的是在此处下载并安装页面底部的 apk:

http://umut.tekguc.info/en/content/google-android-map-v2-step-step

安装完vending和gms包后,登录按钮在模拟器下就出现了。由于我还没有真正实现实际的登录功能,我不能确定它是否真的可以工作,但至少按钮现在在我的设备上的应用程序和模拟器中看起来是一样的。

您还需要下载 Google Play Services 软件(在 Android SDK 管理器中的“Extras”下查看),并在您的项目中安装库 google-play-services_lib(File-Import-Android-Existing Android Code Into Workspace ,然后浏览到例如 /opt/adt-bundle-linux/sdk/extras/google/google_play_services/libproject 并选择 google-play-services_lib)。

另一个有趣的消息是,这仅适用于“纯”Android 模拟器设置,不适用于“Google API”设置。后者似乎已经在模拟器中安装了这些应用程序的某些部分(不可见且无法正常工作),并且我还没有设法删除现有版本以安装如上所述工作的自定义 apk 文件。我测试了 adb remove、adb install、adb install -r,甚至从 /data 中删除目录也失败了。看起来很像谷歌试图让这变得困难。

我很失望谷歌让这件事变得如此艰难;谷歌可能有一些奇怪的许可理由将这些东西排除在模拟器之外,但如果他们真的希望人们在他们的 Android 应用程序中使用他们的服务,他们需要让这些服务在模拟器中可用。强迫人们总是在设备上开发(有其他优秀的模拟器可用)或让人们跳过箍(大量谷歌搜索、安装非官方/黑客版本的 apk 等)都是邪恶的。

接受我的回答之前的最后更新;尽管现在模拟器中显示了具有正确样式的正确按钮,但我仍然无法让“选择帐户”对话框出现在模拟器中。何时/如果我这样做,我将在这里分享正确的解决方案。

【讨论】:

我认为他们的座右铭是“不作恶”! :) 我在尝试安装 APK 时收到消息:“失败 [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE]”。 如您所说,只有使用“纯”Android 模拟器系统映像才能使用 adb 安装 Google Play 服务。但有了这样的系统映像,您就无法将 Google 帐户添加到手机!如果您检查 Google Play 服务与 GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity) 的兼容性,它会告诉您“您的设备不支持 Google Play 服务”:( 似乎可以在清晰的 AVD 系统映像(没有 G API)上安装 Google 服务和 Google Play,但无法使其正常工作。【参考方案3】:

检查 ldpi、mdpi、hdpi 等文件夹是否有不同的按钮图形。您的模拟器几乎肯定是与您的设备不同的 DPI。

【讨论】:

我觉得模拟器和手机的设置是一样的;我正在使用 Galaxy Nexus 模拟器设置并使用 Galaxy Nexus 手机进行测试。无论如何,模拟器上根本没有图形,只有一个普通的旧按钮,而手机上有“g+”标志和本地化文本。 根据 API 级别、屏幕分辨率和 DPI 应用了不同的样式。你看过那些吗?【参考方案4】:

i 注意到,从 API 21 开始,有 ARM 和 x86 图像实现了 Google API 也许如果您使用 android 5 模拟没有问题,它可以在不提取 APK 的情况下工作

【讨论】:

Google play 服务能用吗?我没有尝试在模拟器中使用 Play 商店,但是选择实现了 API 的图像允许我使用 Play 服务,也许您可​​以尝试在使用该 Google api 图像时使用 apk 文件安装 Play 商店?

以上是关于模拟器中的 Google Play 服务,实现 Google Plus 登录按钮等的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android模拟器中安装Google Play Service

Flutter 应用程序“没有 Google Play 服务将无法运行”

Android 模拟器上的 Google Play 服务和 Google Play 游戏应用

发布时出现“Google Play 服务正在更新”错误,而不是模拟器(Google Play 服务 12.6.73,华为设备)

Google Play 游戏服务 + 模拟器

模拟器中没有 Google Play 应用