添加Google Play服务9.0.0后,Dex文件超过了64k [英] Dex file exceeded 64k after adding Google Play Services 9.0.0

查看:423
本文介绍了添加Google Play服务9.0.0后,Dex文件超过了64k的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我按照Firebase指南添加了FCM,所以我在应用程序gradle中添加了以下依赖项:

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

这个到我的项目gradle:

$ p $ classpath'com。 google.gms:google-services:3.0.0'

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

现在我收到了这个错误:

错误:.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:无法解析Lcom / google / android / gms / R $ string中的静态字段8723(common_google_play_services_unknown_issue); 05-20 01:25:32.253线程退出时出现未捕获的异常(组= 0x416b5e30)05-20 01:25:32.253 19812-19812 / com.cryogenos.pearsonvisionlimousine E / AndroidRuntime:致命异常:mainProcess:com.cryogenos.pearsonvisionlimousine,PID:19812java.lang.NoClassDefFoundError:com.google.android.gms.R $ stringat com。 。google.android.gms.common.internal.zzah< INIT> 
(未知来源)
来自com.google.firebase.FirebaseOptions.fromResource(未知来源)
来自com.google.firebase.FirebaseApp.zzbu(未知来源)
来自com .google.firebase.provider.FirebaseInitProvider.onCreate(未知源)
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。在android.app.ActivityThread.handleBindApplication(ActivityThread.java:5143)
在android.app.ActivityThread.access $ b $(ActivityThread.java:156)
at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1418)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper。循环(Looper.java:157)
在android.a (本地方法)$ b $在java.lang.reflect.Method.invoke(Method.java:515)
在java.lang.reflect.Method.invokeNative(本地方法)
在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:

$ p $ 应用程序插件:'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion22.0.1

defaultConfig {
applicationIdcom.cryogenos.pearsonvisionlimousine
minSdkVersion 19
targetSdkVersion 23
versionCode 3
versionName2.1
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile ('proguard-android.txt'),'proguard-rules.pro'
}
}
}

依赖关系{
编译fileTree(dir :'libs',include:['* .jar'])
testCompile'junit:junit:4.12'
compile'c​​om.android.support:appcompat-v7:23.1.1'
编译'com.google.android.gms:play-services:9.0.0'
compile'c​​om.mcxia oke.volley:library:1.0.19'
compile'c​​om.android.support:design:23.1.1'
compile'c​​om.android.support:multidex:1.0.0'
编译'com.google.firebase:firebase-messaging:9.0.0'
}

apply plugin:'com.google.gms.google-services'

解决方案

避免 64k Dex error 只包含您的应用程序需要的来自Google Play服务的API。


选择性地将API编译到您的可执行文件


从版本6.5,您可以选择性地将Google Play服务API编译到您的应用中。例如,要仅包含Google Fit和Android Wear API,请在您的build.gradle文件中替换以下行:

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


包含以下行:

编译'com.google.android.gms:play-services
:$ 9.0 $'b $ b'编译'com.google.android.gms:play-services-wearable:9.0.0'


已更新
那么我阅读了文档,其中说明了
$ b


在使用Google Play服务功能之前,请始终检查设备是否存在兼容的Google Play服务APK。

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

compile'c​​om.google.android.gms:play-services-base:9.0.0'



happyCoding;


I was following the Firebase guide to adding FCM, and so I added the following dependencies to my app gradle:

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

And this one to my project gradle:

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

After this, I added the google-services.json from the Firebase console settings by downloading it and adding it to my app directory.

Now I'm getting this error:

Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html

If I follow the instructions and have my application to support multidex, my application crashes as soon as it launches.

Here is the error after adding multidex to my app:

    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)

My phone's google play services is 9.0.0+. I have updated to the latest play services and the repository in SDK manager.

EDIT:

My app 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'
}

apply plugin: 'com.google.gms.google-services'

解决方案

One possible way to avoid 64k Dex error is by including only those APIs which your app needs from Google Play Services.

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'

UPDATED Well I read the doc, which says

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

So you only need to check Google Play Service is available or not. And to do this you only need Google Actions, Base Client Library API.

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

happyCoding;

这篇关于添加Google Play服务9.0.0后,Dex文件超过了64k的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆