Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 添加Google Play Services 9.0.0后,Dex文件超过64k_Android_Firebase_Google Play Services - Fatal编程技术网

Android 添加Google Play Services 9.0.0后,Dex文件超过64k

Android 添加Google Play Services 9.0.0后,Dex文件超过64k,android,firebase,google-play-services,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' 在此之后,我通过下载google-services.json并将其添加到我的应

我遵循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'
在此之后,我通过下载google-services.json并将其添加到我的应用程序目录,从Firebase控制台设置中添加了google-services.json

现在我得到了这个错误:

错误:.dex文件中的方法引用数不能超过64K。 了解如何在上解决此问题

如果我按照说明让我的应用程序支持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)

应用插件:“com.google.gms.google服务”

使用MultiDex

MultiDex允许您使用一个APK中包含的多个DEX文件。几步


首先检查multidex是否真的有效,您可以通过将apk文件重命名为zip并提取它来实现这一点。应该有2个multiple class.dex文件

其次,如果更早地减少您必须使用proguard的方法,那么也可能发生这种情况,因此只需对proguard的使用进行注释,它就会起作用


否则,请将您的异常粘贴到此处

避免
64k Dex错误的一种可能方法是只包含应用程序需要从Google Play服务获得的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 fitness:9.0.0'
编译'com.google.android.gms:play services wearable:9.0.0'

已更新 我看了医生,上面说

依赖Play Services SDK的应用程序在访问Google Play Services功能之前,应始终检查设备是否有兼容的Google Play Services APK

所以你只需要检查谷歌播放服务是否可用。要做到这一点,您只需要谷歌操作,基本客户端库API

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

如使用中所述,有选择地将API编译到可执行文件中这是最适合您的方法(将其放在首位,而不是放在多索引中),因为多索引在继续之前有一些检查。

避免64K限制-Proguard将帮助您

在配置应用程序以启用64K或更多方法之前 参考资料,您应该采取措施减少 应用程序代码调用的引用,包括应用程序代码定义的方法 应用程序代码或包含的库。以下策略可以帮助您 避免达到dex参考极限:

查看应用程序的直接依赖项和可传递依赖项-确保应用程序中包含的任何大型库依赖项都以适当的方式使用 这超过了添加到应用程序中的代码量。A. 常见的反模式是包含一个非常大的库,因为 实用方法是有用的。减少应用程序代码依赖性可以 通常有助于避免dex参考限制

使用ProGuard删除未使用的代码-配置应用程序的ProGuard设置以运行ProGuard,并确保已为应用程序启用收缩功能 发布版本。启用收缩功能可确保您不会在未使用的情况下发货 用你的APK编码

使用这些技术可以帮助您避免 启用更多方法引用所需的生成配置更改 在你的应用程序中。这些步骤还可以减小APK的大小, 这对于带宽成本较高的市场尤为重要 高

因此,尽量避免使用多重索引


当您使用
compile'com.android.support:design:23.1.1'
时,您不需要使用
compile'com.android.support:appcompat-v7:23.1.1'
compile'com.android.support:support-v4:23.1.1'
所以从build.gradle文件中删除v7和v4有问题

检查您只需要此依赖项

dependencies {
     compile 'com.google.firebase:firebase-messaging:9.0.0'
}
//compile 'com.google.android.gms:play-services:9.0.0'
因此,您可以删除此依赖项

dependencies {
     compile 'com.google.firebase:firebase-messaging:9.0.0'
}
//compile 'com.google.android.gms:play-services:9.0.0'
如果还不够并且您有超过65536种方法
您可以使用

只需将这些行添加到
build.gradle

android {

    defaultConfig {
        ...

        // 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>

如果您使用的是自己的
应用程序
类,请将父类从
应用程序
更改为
多索引应用程序

我已在帖子中粘贴了我的异常。我的意思是在完成上述两个步骤之后!“评论proguard的使用”是什么意思?我该怎么做?我还生成了一个apk,只看到了一个classes.dex文件,然后ur multidex就不工作了。你能粘贴你的版本吗?Grad将它粘贴到原始Post尝试过这个,不起作用。给我一个错误。请参阅编辑后的文章。为什么你要在你的项目中包含所有的play服务库?因为添加Firebase云消息的说明告诉我。嗯,它有自己的依赖项,在指南Android dev websiteSearch for FGM Google中列出。我不确定你的意思。除了,我不知道我应该添加哪一个,因为Firebase说明中说要添加compile'com.google.android.gms:play services:9.0.0'@Cyogenos请共享该说明链接。这个:和这个:谢谢,这基本上解决了dex的问题。@GabrieleMariotti firebase需要安装Google Play APK才能使用firebase功能吗?然而,他在gradle.Up中有
firebase core
,如果你有这个设计,请投票支持关于不需要appcompat库的提示