使用 Google Cloud Messaging 的 App Engine 后端有哪些必要的 gradle 依赖项?

2024-02-21

使用 Google Cloud Messaging 的 App Engine 后端有哪些必要的 gradle 依赖项?

目前,当您将类似的模块添加到 Android Studio 项目时,它会添加以下依赖项:

'编译'com.google.android.gms:play-services:8.4.0'

但是,当您运行该项目时,您会收到此错误:

错误:任务执行失败 ':app:transformClassesWithDexForDebug'。

com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:处理'命令 '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' 以非零退出值 2 完成

有人建议使用这个:

defaultConfig {
        multiDexEnabled true
}

但这实际上对我不起作用。

所以看来我必须只指定 GAE + GCM 所需的库。到目前为止我有:

compile 'com.google.android.gms:play-services-auth:8.4.0'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.android.gms:play-services-base:8.4.0'

完整列表在这里 https://developers.google.com/android/guides/setup。但这没有用。我收到这个错误:

E/GMPM:GoogleService 初始化失败,状态:10,缺少 预期资源:'R.string.google_app_id' 用于初始化 Google 服务。可能的原因是缺少 google-services.json 或 com.google.gms.google-services gradle 插件。

所以我很茫然。

还有其他方法可以解决这个问题吗?奇怪的是我的旧 GAE + GCM 项目在导入整个 google play 服务时运行良好。然而,在我的新项目中导入旧版本的 Google Play 服务不起作用。所以我不确定发生了什么事。

编辑:更多信息:

我做了一些测试。

1)开始新的Android Studio项目,添加新的谷歌云模块“App Engine Java Endpoints Module”。自动生成的 build.grade (模块:app)如下所示:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

结果?编译并运行完美 - 没有问题!

2)开始新的Android Studio项目,添加新的谷歌云模块“App Engine Backend with Google Cloud Messaging”。自动生成的 build.grade (模块:app)如下所示:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.google.android.gms:play-services:8.4.0'
    compile project(path: ':backend', configuration: 'android-endpoints')
}

结果?我也遇到过同样的糟糕错误!

所以看起来“compile 'com.google.android.gms:play-services:8.4.0”行就是问题所在。我把它替换为

'编译'com.google.android.gms:play-services-gcm:8.4.0''

因为从理论上讲,这就是我对谷歌云消息传递所需要的全部。当我运行它时,我得到这个:

12-30 14:14:16.482 10573-10573/com.myapp.myapp E/GMPM:GoogleService 初始化失败,状态:10,缺少 预期资源:'R.string.google_app_id' 用于初始化 Google 服务。可能的原因是缺少 google-services.json 或 com.google.gms.google-services gradle 插件。 12-30 14:14:16.482 10573-10573/com.myapp.myapp E/GMPM:调度程序不 放。不记录错误/警告。 12-30 14:14:16.502 10573-10623/com.myapp.myapp E/GMPM:正在上传 不可能。应用程序测量已禁用

所以看起来我缺少这个 google-services.json 文件或其他东西。我不明白 Android Studio 发生了什么,因为几个月前我用同样的方式制作了一个支持 GCM 的应用程序,并且编译没有问题。该应用程序的 gradle.build 文件如下所示:

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(path: ':gcm-backend', configuration: 'android-endpoints')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.ganyo:gcm-server:1.0.2'
    compile 'com.google.android.gms:play-services:7.5.0'
    compile 'com.android.support:support-v4:22.2.0'
}

所以看起来 Android Studio 停止添加“compile 'com.ganyo:gcm-server:1.0.2”依赖项。

所以我运行了一个项目

'compile 'com.ganyo:gcm-server:1.0.2'
'compile 'com.google.android.gms:play-services:8.4.0'

结果?相同的执行失败错误。

好吧,让我们在我的新项目中尝试旧的播放服务库:

'compile 'com.ganyo:gcm-server:1.0.2'
'compile 'com.google.android.gms:play-services:7.5.0'

结果?相同的执行失败错误。

我只是不明白为什么这不能像以前那样开箱即用......


因此,这应该被视为 Android Studio 的一个问题,因为仅仅添加一个模块“App Engine Backend with Google Cloud Messaging”就会破坏每次构建,即使是最简单的应用程序,因为完整的 Google Play 服务依赖项“com.google” .android.gms:play-services:8.4.0' 足够大,足以超出其本身的 65K DEX 方法限制。这个问题实际上记录在'设置 Google Play 服务 https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project'.

正如您所发现的,解决方案是手动编辑 build.gradle 并仅添加 GCM 'com.google.android.gms:play-services-gcm:8.4.0' 的导入。不过,手动添加“google-services.json”的要求是正常的,因为您需要在developers.google.com上为您的项目生成它。添加“multiDexEnabled true”并不是一个好的解决方案,因为它不必要地增加了 APK 的大小,并且最终仍然会出现重复的依赖项。

我创建了一个修复 Android Studio 中 App Engine GCM 后端模块的依赖项。请随意为此问题加注星标以提高可见性和更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Google Cloud Messaging 的 App Engine 后端有哪些必要的 gradle 依赖项? 的相关文章

  • Android-ListView-performItemClick

    当我尝试使用时遇到一些困难执行项目单击ListView 的功能 我想要做的就是以编程方式在列表的第一项中执行单击 我怎样才能做到这一点 我在文档中查找了该函数 但我并不真正理解它的参数 我尝试过类似的事情 myListView perfor
  • 无法禁用 Firestore 中的离线数据

    从我的数据中删除数据后Firestore Database 这需要我的Android app一段时间后才意识到数据已被删除 我认为这是由于自动数据缓存而发生的 我的应用程序与离线使用无关 我想禁用此功能 我已将其添加到我的自定义中Appli
  • ImageView Android 内存

    我原来的后续question https stackoverflow com questions 5339883 android app ram usage 有没有一种方法可以在 Android 应用程序中使用 ImageViews 而不使
  • 在 Android 中从互联网链接获取数据

    我正在制作一个带有 URL 的应用程序 asp 扩展名 我们向其传递所需的参数并使用 POST 方法获取一些字符串结果 关于如何实现这一目标有什么建议吗 UPDATED 实际上我有一个 net 链接 它接受一些 POST 参数并给我一个结果
  • 在 Android 上检测已接听的拨出电话

    我知道这个问题已经被问过很多次了 但没有答案 但我仍然希望有人终于解决了这个问题 问题 我有一台运行 Android 2 3 的未 root 设备 我需要创建一项服务 打电话 等待呼叫被应答 接听电话后挂断电话 有超时 和其他许多人一样 我
  • Android 测试 java.lang.NoClassDefFoundError 由于 Fest-Android 出现错误

    我目前正在我的项目中实现 Android 版 Fest 但我似乎遇到了依赖问题 如果我在不包含 Fest 库的情况下运行测试 测试将正常运行 一旦我添加了 Fest 库 测试就不再运行 相反 会抛出异常 我的项目使用以下依赖项 compil
  • android新手需要了解“?android:attr/actionBarSize”

    我正在经历拉尔斯 沃格尔的教程 http www vogella com articles AndroidFragments article html在使用 Fragments 时 我遇到了以下代码 android layout margi
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • 按钮上方带有文本的单选按钮

    我是 Android 新手 我需要在我的活动中添加单选按钮 但我需要将文本放在项目符号按钮的顶部 请提供任何帮助 我发现了以下内容 尽管我不明白 drawable in 选择器和 style Tab 样式是什么 顶部带有文本的单选按钮 ht
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • Android TabLayout:均匀分布

    我正在查看 Google IO 中使用的 Google 类 称为 SlidingTabLayout 在该类中 有一个名为 setDistributeEvenly 的方法 它允许所有这些选项卡在屏幕上均匀分布 每个选项卡具有相同的大小 中心对
  • 拥有可重用对话框的最佳方法是什么?

    在 Android 中创建可重用对话框的最佳方法是什么 阅读通过对话框开发指南 http developer android com guide topics ui dialogs html 我知道我可以使用AlertDialog Buil
  • 谷歌的Json解析Gson库:JsonElement和JsonObject有什么区别?

    public abstract class JsonElement extends Object 表示 Json 元素的类 它可以是 JsonObject JsonArray JsonPrimitive 或 JsonNull public
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • 尝试重新打开已关闭的对象:sqlitequery

    所以本质上我查询数据库两次 我不明白这个错误真正来自哪里 因为我没有在任何地方关闭数据库 返回错误的代码是这样运行的 我查了一下 刚刚看到一个像我这样的案例 BeaconHandler pullAllDB new BeaconHandler
  • 如何根据受保护的 String doInBackground 方法中 AsyncTask 的结果调用 Toast.makeText() ?

    我从 AsyncTask 中的数据库中获取数据 如果它为空 我想吐司一个警告文本 我在 AsyncTask 中尝试过 但我了解到它不是在工作线程中调用的 这是我的 doInBackground 方法 protected String doI
  • 当应用程序从最近的应用程序中滑动时,前台服务会被终止,通知也会被删除

    我有一个foreground service有通知 当应用程序从最近的应用程序托盘中滑出时 服务将被终止 通知也会被删除 这是我的服务的代码VoiceService class Override public IBinder onBind
  • 如何在 Android 应用程序退出之前进行一些清理?

    当我的 Android 应用程序终止时 是否有某种 onTerminate 方法可以进行一些清理 我想清除一些 SharedPreferences 我有一个活动 它保持几个数字的运行平均值 并将其存储在 SharedPreference 中
  • Android:在surfaceview上实现admob

    我有一个使用 SurfaceView 的小游戏形式的活动 下面是代码片段 我很困惑如何在 SurfaceView 上实现 admob 请建议 public class DroidzActivity extends Activity priv

随机推荐