具有 Google 云消息传递的应用引擎后端的必要渐变依赖关系是什么?
目前,当您将这样的模块添加到Android Studio项目时,它会添加以下依赖项:
编译“com . Google . Android . GMS:play-services:8 . 4 . 0”
但是,当您运行项目时,会出现以下错误:
错误:任务': app: transformClassesWithDexForDebug'执行失败。
com . Android . build . API . transform . transform exception:com . Android . ide . common . Process . Process exception:org . grad le . Process . internal . exec exception:Process ' command '/Library/Java/JavaVirtualMachines/JDK 1 . 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'
完整列表在这里。但这并没有奏效。我得到这个错误:
E/GMPM: GoogleService初始化失败,状态: 10,缺少用于初始化Google服务的预期资源:“R.string.google_app_id”。可能的原因是缺少google-services.json或com.google.gms.google服务gradle插件。
所以我不知所措。
有没有其他方法解决这个问题?奇怪的是,我的旧GAE GCM项目导入整个google play服务时工作正常。然而,在我的新项目中导入那些旧版本的google play服务不起作用。所以我不知道发生了什么。
编辑:更多信息:
我做了一些测试。
1)启动了新的Android Studio项目,添加了新的谷歌云模块App EngineJavaEndpoints Module。自动生成的build.grade(Module: 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项目,增加了新的谷歌云模块“应用程序引擎后端与谷歌云消息”。自动生成的构建级(模块:应用程序)如下所示:
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')
}
结果?和我收到的一样糟糕的错误!
所以看起来“编译”com.google.android.gms: play-services: 8.4.0这一行是问题所在。我把它换成了
“编译'com.谷歌.谷歌.机器人:播放服务-gcm:8.4.0'”
因为从理论上讲,这就是我对谷歌云消息的全部需求。当我运行它时,我得到了以下信息:
12-30 14:14:16.482 10573-10573/com.myapp.myappE/GMPM:GoogleService初始化失败,状态: 10,缺少用于初始化Google服务的预期资源:“R.string.google_app_id”。可能的原因是缺少google-services.json或com.google.gms.google服务gradle插件。12-30 14:14:16.482 10573-10573/com.myapp.myappE/GMPM:未设置调度程序。未记录错误/警告。12-30 14:14:16.502 10573-10623/com.myapp.myappE/GMPM:无法上传。应用程序测量禁用
看来我错过了这项谷歌服务。json文件之类的。我不知道Android Studio发生了什么,因为几个月前我用同样的方法制作了一个支持GCM的应用程序,而且这个应用程序编译起来没有问题。梯度。该应用程序的生成文件如下所示:
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.google.android.gms:play-services:8.4.0'
结果?相同的执行失败错误。
好吧,让我们在我的新项目中尝试旧的Play服务库:
'compile 'com.ganyo:gcm-server:1.0.2'
'compile 'com.google.android.gms:play-services:7.5.0'
结果?相同的执行失败错误。
我只是不明白为什么这不像以前那样开箱即用...
如果您确实到了需要在启用MultiDex的情况下运行的阶段,您需要执行三个步骤:
>
在Gradle中的defaultConfig中启用它,因为您已经尝试过:
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
将它包含在您的依赖项中:
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
将其添加到您的清单中:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.multidex.myapplication">
<application
...
android:name="android.support.multidex.MultiDexApplication">
...
</application>
</manifest>
https://developer.android.com/intl/es/tools/building/multidex.html#about
但是,请始终仔细查看您已经拥有的依赖项,因为它通常不需要。
初步测试表明,到目前为止,这是可行的。
我在这里查看了谷歌GCM示例项目:https://github.com/googlesamples/google-services/tree/master/android/gcm
并编辑了我的gradle文件。这是它们现在的样子:
APP:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.me.myapp"
minSdkVersion 13
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.google.android.gms:play-services-gcm:8.4.0'
testCompile 'junit:junit:4.12'
compile project(path: ':backend', configuration: 'android-endpoints')
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
}
apply plugin: 'com.google.gms.google-services'
项目:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
classpath 'com.google.gms:google-services:2.0.0-alpha3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
我还按照这个指南(参见步骤2)生成了一个google-services.json文件,并将其放入app/ directory中。
现在应用程序可以编译并运行了(至少到目前为止)。
我真的很生气,自动生成的gradle文件不能开箱即用,我不得不在一些示例应用程序中寻找它们。几个月前还不是这样。你一添加GCM模块它就工作了。
如果其他人对未来的项目有任何提示/建议,请告诉我。=D
因此,这应该被认为是Android Studio的一个问题,因为简单地添加一个模块“带有谷歌云消息的应用引擎后端”每次都会破坏即使是最简单的应用程序的构建,因为完整的Google Play服务依赖关系“com . Google . Android . GMS:Play-Services:8 . 4 . 0”足够大,足以超过65K DEX方法本身的限制。这个问题实际上记录在“设置Google Play服务”中。
正如你所发现的,解决方案是手动编辑你的构建.gradle,并只添加GCM的导入。但是,手动添加“google-services.json”的要求是正常的,因为您需要在 developers.google.com 上为您的项目生成它。添加“多DexEnabled true”不是一个好的解决方案,因为它会不必要地增加您的APK大小,并且您仍然会得到重复的依赖项。
我在Android问题跟踪器上创建了一个条目,以修复Android Studio中应用引擎 GCM 后端模块的依赖关系。请随时为此问题加注星标,以提高可见性和更新。
null
我试图从gradle构建中排除嵌套的传递依赖项。依赖结构看起来像 org.apache.beam:beam-sdks-java-core:2.33.0-自定义 我按照gradle exclude的公认解决方案排除了依赖性,但它对我不起作用。 这不排除依赖项。当我将其更改为时,依赖项仍然没有被排除。 关于如何排除这种依赖关系的任何建议?它在旧版本中拉动。
问题内容: 我在ivaven.xml中添加了一个依赖项(让我们将其命名为A),它在maven Central中具有一个pom文件。Ivy使用ibiblio解决了Maven依赖关系。添加到ivy.xml的依赖项(A)具有传递的依赖项(B)。到目前为止,到目前为止很好。常春藤无法解决传递性依赖项(B)的依赖项(C)。 我在ivy.xml中定义了A,如下所示: 在B的pom文件中,在编译和测试范围中都定
我正在重构一个具有相当多依赖项的JavaWeb应用程序。我想使用,将作为底层日志实现。但是,该应用程序包含一些Spring依赖项。Spring使用JCL(Jakarta common logging)进行日志记录,因此它引入了,作为一个可传递的依赖项。这是一个潜在的问题,因为这意味着可能会使用作为日志实现,而Spring可能会以不希望的方式在某个地方进行日志记录。 根据slf4j文档,解决方案是首
我正在从一个使用Android-Maven-Plugin的Maven项目中构建一个Android应用程序。在这个项目中,我使用了新的beta版数据绑定库。 它包含在Android SDK的本地m2repository中(extras/Android/m2repository)。这个存储库中的库打包为AAR类型。 附注:对于我自己的本地构建,我有几个解决方案(例如重新打包为jar),但我更喜欢一个更
一些stackoverflow帖子暗示我的类路径中有spring-asm的冲突版本。通过gradle依赖分析,我看到我没有spring-asm的多个版本,但我有spring-core的多个版本(版本3.1.4和5.0.2) 我试图排除3.1.4版本,但无法使其工作。我试图在依赖级别和配置级别都排除它。 即使有了上述更改,我仍然在依赖分析输出中发现Spring-Core:3.1.4.Release。