android - 添加Google Play Services 9.0.0后Dex文件超过64k

标签 android firebase google-play-services

我按照 Firebase 指南添加 FCM,因此我将以下依赖项添加到我的应用程序 gradle:

compile 'com.google.android.gms:play-services:9.0.0'
apply plugin: 'com.google.gms.google-services'

这是我的项目 gradle:

classpath 'com.google.gms:google-services:3.0.0'

在此之后,我从 Firebase 控制台设置中添加了 google-services.json,方法是下载它并将其添加到我的应用程序目录中。

现在我收到这个错误:

错误:.dex 文件中方法引用的数量不能超过 64K。 在 https://developer.android.com/tools/building/multidex.html 了解如何解决此问题

如果我按照说明让我的应用程序支持 multidex,我的应用程序会在启动后立即崩溃。

这是将 multidex 添加到我的应用程序后的错误:

    05-20 01:25:32.253 19812-19812/com.cryogenos.pearsonvisionlimousine W/dalvikvm: VFY: unable to resolve static field 8723 (common_google_play_services_unknown_issue) in Lcom/google/android/gms/R$string;05-20 01:25:32.253 19812-19812/com.cryogenos.pearsonvisionlimousine W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x416b5e30)05-20 01:25:32.253 19812-19812/com.cryogenos.pearsonvisionlimousine E/AndroidRuntime: FATAL EXCEPTION: mainProcess: com.cryogenos.pearsonvisionlimousine, PID: 19812java.lang.NoClassDefFoundError: com.google.android.gms.R$stringat com.google.android.gms.common.internal.zzah.<init>
(Unknown Source)
at com.google.firebase.FirebaseOptions.fromResource(Unknown Source)
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1609)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1574)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:5643)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5206)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5143)
at android.app.ActivityThread.access$1500(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1418)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5883)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:688)
at dalvik.system.NativeStart.main(Native Method)

我手机的 google play 服务是 9.0.0+。 我已更新到最新的播放服务和 SDK 管理器中的存储库。

编辑:

我的应用程序 build.gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "com.cryogenos.pearsonvisionlimousine"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 3
    versionName "2.1"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.android.gms:play-services:9.0.0'
compile 'com.mcxiaoke.volley:library:1.0.19'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:multidex:1.0.0'
compile 'com.google.firebase:firebase-messaging:9.0.0'
}

应用插件:'com.google.gms.google-services'

最佳答案

避免 64k Dex 错误 的一种可能方法是仅包含您的应用需要来自 Google Play 服务的那些 API。

Selectively compiling APIs into your executable

From version 6.5, you can instead selectively compile Google Play service APIs into your app. For example, to include only the Google Fit and Android Wear APIs, replace the following line in your build.gradle file:

compile 'com.google.android.gms:play-services:9.0.0'

with these lines:

compile 'com.google.android.gms:play-services-fitness:9.0.0'
compile 'com.google.android.gms:play-services-wearable:9.0.0'

已更新 好吧,我读了文档,上面写着

Apps that rely on the Play Services SDK should always check the device for a compatible Google Play services APK before accessing Google Play services features

因此您只需要检查 Google Play 服务是否可用。为此,您只需要 Google Actions、Base Client Library API

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

关于android - 添加Google Play Services 9.0.0后Dex文件超过64k,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37338398/

相关文章:

google-drive-api - Google Drive Auth 总是返回 0

android - 在 android 项目中使用 google Place picker

android - 使用 Google 登录 Android 获取用户的出生日期和性别

java - ImageView 尺寸看起来比实际尺寸小

Firebase 托管导致通过 www 的不安全连接

java - 无法从 firestore 获取数据

firebase - Flutter-Firestore :- Unable to upload image to firestore. 其表示未找到引用对象

ios - GeoFire 查询用户位置

java - 在 Android 上拍照时发生崩溃。为什么?

android - Ant 无法在 Ubuntu 上构建