17

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

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

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

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

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

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

4

4 回答 4

53

Google Play 服务适用于 4.2.2 版本的 Android 模拟器,并且如Android 文档中所述得到官方支持:设置 Google Play 服务

更新

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

设置图像

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

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

在此处输入图像描述

创建虚拟设备:

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

注意 CPU/ABI 将固定为 ARM

在此处输入图像描述

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

于 2013-06-21T22:39:36.807 回答
4

我尝试了运行模拟器的大多数组合,但有无谷歌 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 等)只是邪恶的。

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

于 2013-04-14T21:26:59.010 回答
0

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

于 2013-04-14T15:51:33.240 回答
0

实现了 google API 的 Android 图像我注意到从 API 21 开始,有 ARM 和 x86 图像实现了谷歌 API,如果你使用 android 5 模拟没有问题,它可以在不提取 APK 的情况下工作

于 2015-10-29T17:55:42.853 回答