当前位置: 首页 > 知识库问答 >
问题:

具有 Google 云消息传递的应用引擎后端的必要渐变依赖关系是什么?

厉钊
2023-03-14

具有 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'

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

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

共有3个答案

长孙宜
2023-03-14

如果您确实到了需要在启用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

    但是,请始终仔细查看您已经拥有的依赖项,因为它通常不需要。

  • 万俟丁雷
    2023-03-14

    初步测试表明,到目前为止,这是可行的。

    我在这里查看了谷歌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

    翟俊哲
    2023-03-14

    因此,这应该被认为是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 后端模块的依赖关系。请随时为此问题加注星标,以提高可见性和更新。

     类似资料:
    • 我试图从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。