java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
Posted
技术标签:
【中文标题】java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions【英文标题】: 【发布时间】:2016-09-22 02:49:03 【问题描述】:我在我的谷歌开发者控制台上遇到了这个奇怪的错误。所以我用谷歌云测试实验室来看看到底发生了什么。结果我的应用在几乎所有设备上都失败了
FATAL EXCEPTION: main
Process: com.blackcurrantapps.iamin, PID: 16706
at com.google.firebase.FirebaseApp.zzbu(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1591)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1562)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:4871)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:4466)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4406)
at android.app.ActivityThread.access$1500(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1270)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5102)
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:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
这是测试的屏幕截图。
现在有趣的部分来了,我什至根本不在我的应用中使用 Firebase。当我在整个应用程序的路径中查找时,没有提到“Firebase”这个词。我确实使用谷歌云服务、登录和谷歌应用引擎。
这是我的 build.gradle 文件:
buildscript
repositories
maven url 'https://maven.fabric.io/public'
dependencies
classpath 'io.fabric.tools:gradle:1.+'
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
android
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig
applicationId "com.blackcurrantapps.iamin"
minSdkVersion 16
targetSdkVersion 23
versionCode 11
versionName "Fixed Check in Bug"
multiDexEnabled = true
buildTypes
release
shrinkResources true
// minifyEnabled true
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
packagingOptions
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
dexOptions
javaMaxHeapSize "4g"
repositories
maven url "https://oss.sonatype.org/content/repositories/snapshots/"
maven url "https://oss.sonatype.org/content/groups/public/"
maven url "https://jitpack.io"
maven url 'https://maven.fabric.io/public'
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
compile('com.mikepenz:materialdrawer:4.5.8@aar')
transitive = true
compile 'com.mikepenz:google-material-typeface:1.2.0.1@aar' //Google Material Design Icons
compile 'com.mikepenz:fontawesome-typeface:4.4.0.1@aar'
compile('com.vincentbrison.openlibraries.android:dualcache:2.2.2@jar')
transitive = true;
compile project(':htmlDialog')
compile('com.twitter.sdk.android:twitter:1.8.0@aar')
transitive = true;
compile 'com.android.support:palette-v7:23.4.0'
compile 'com.android.support:multidex:1.0.1'
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile 'com.google.android.gms:play-services-maps:9.0.0'
compile 'com.google.android.gms:play-services-gcm:9.0.0'
compile 'com.google.android.gms:play-services-identity:9.0.0'
compile 'com.google.android.gms:play-services-base:9.0.0'
compile 'com.google.android.gms:play-services-plus:9.0.0'
compile 'com.google.android.gms:play-services-analytics:9.0.0'
compile 'com.google.android.gms:play-services-location:9.0.0'
compile 'com.android.support:cardview-v7:23.4.0'
compile 'com.rengwuxian.materialedittext:library:2.1.3'
compile 'com.twotoasters.jazzylistview:library:1.2.1'
compile 'com.twotoasters.jazzylistview:library-recyclerview:1.2.1'
compile 'com.pnikosis:materialish-progress:1.7'
compile 'com.getbase:floatingactionbutton:1.10.1'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.squareup.okhttp:okhttp:2.6.0'
compile 'me.dm7.barcodescanner:zbar:1.8.3'
compile 'net.glxn.qrgen:android:2.0'
compile 'com.edmodo:cropper:1.0.1'
compile 'com.github.PhilJay:MPAndroidChart:v2.1.6'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.pavelsikun:material-seekbar-preference:0.12.1+'
compile project(path: ':backend', configuration: 'android-endpoints')
谁能帮帮我?
【问题讨论】:
【参考方案1】:感谢您发布问题 Sanket。我是 Firebase 测试实验室(前身为 Cloud Test Lab)的 PM。想让您知道这是我们这边的一个错误,现在应该修复。
您的应用目前正在使用最新最好的 Google Play 服务。上周我们更新了我们的设备以使用它们,然后我们发现了一个让我们恢复到旧版本的错误。现在,我们在我们的设备上重新部署了最新的 Play 服务,因此重新运行您的测试应该可以工作。如果没有,请告诉我,我们会调查并修复它。
【讨论】:
这不仅仅是谷歌云测试,实际用户设备也没有更新最新的谷歌播放服务(9.0)。我将我的应用程序恢复到(8.4.4)并且一切正常。以后您是否建议将 Google Play 服务版本保持在比最新版本低一级以避免此类问题? 我在实际设备上运行应用程序时也遇到以下错误:找不到类 'com.google.firebase.FirebaseOptions',从方法 com.google.firebase.FirebaseApp 引用。我找到了适合我的解决方案。我正在导入整个 google play services 9.0.1 库。临时解决方法是仅导入您的应用实际需要的 API。您可以获取完整的 API 列表here。
【讨论】:
谢谢...这很有帮助。 我不认为这是一个解决方案。我做的完全一样。【参考方案3】:您必须使用 com.google.firebase:firebase-ads:9.0.2 AdMob 关于 Android 依赖项,
compile 'com.google.firebase:firebase-ads:9.0.2'
并删除您的
play-services (com.google.android.gms: play-services:9.0.2)
它对我有用!
【讨论】:
【参考方案4】:不确定这是否有帮助,但我在使用 Android sdk 19 时遇到了同样的问题,这让我发疯了。我不使用 Firebase(至少不是故意的) 我不知道为什么,但是当我在 gradle 配置中设置“minifyEnabled true”时错误停止了。
我看到您的发布部分中已将您的评论删除。
【讨论】:
那是因为我还没有学会正确使用proguard。我的错。【参考方案5】:您可以尝试以下代码 sn-p:
defaultConfig
multiDexEnabled true
dependencies
compile 'com.android.support:multidex:1.0.0'
public class Controller extends Application
@Override
protected void attachBaseContext(Context newBase)
super.attachBaseContext(newBase);
MultiDex.install(this);
【讨论】:
【参考方案6】:只需将 google play-service 依赖降级为compile 'com.google.android.gms:play-services:8.3.0'
即可解决问题。
【讨论】:
【参考方案7】:我希望现在还为时不晚。 Firebase 造成了麻烦,所以我将其排除在外。 我刚刚在模块 gradle 上添加了这个:
configurations
all*.exclude group: 'com.google.firebase', module: 'firebase-common'
【讨论】:
这到底是做什么的? 基本上不包括firebase包。【参考方案8】:以我为例:使用 FCM 和谷歌地图
//for FCM
compile 'com.google.firebase:firebase-messaging:9.4.0'
//for Map
compile 'com.google.android.gms:play-services:9.4.0'
我已修复: 已删除
compile 'com.google.android.gms:play-services:9.4.0'
使用过
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
效果很好。
【讨论】:
【参考方案9】:如果这可以帮助其他人,我使用它解决了这个问题,虽然这与 Firebase 没有任何联系,但它实际上解决了我的崩溃
将compile 'com.android.support:multidex:1.0.1'
添加到app/build.gradle。
将android:name="android.support.multidex.MultiDexApplication"
添加到AndroidManifest.xml中的应用标签中。
如果您使用的是自定义 Application 类,请跳过 AndroidManifest.xml 并让您的 Application 类扩展 MultiDexApplication 而不是 Application。
【讨论】:
为我工作,即使没有第 1 步,我只是从 MultiDexApplication 类扩展了我的 Application cals 并且它工作(Kit-Kat 4.4)【参考方案10】:原来我对MultiDex
的使用是错误的,这导致了这个错误。
这确实应该在官方文档中的某个地方提到。
如何正确地做:
在 Gradle.build 中(应用级别)
dependencies
compile 'com.android.support:multidex:1.0.1'
在清单中, 添加
<application
android:name=".Global"
...
在应用程序类中,
public class Global extends MultiDexApplication
...
【讨论】:
【参考方案11】:在 Android 4.4 中,解决方案类似这样(https://***.com/a/38707231/3377472):
-我有 Google Play 服务修订版 33
1) 配置 build.gradle 和依赖项
启用multidex支持并添加multidex库
android
compileSdkVersion 23
buildToolsVersion '23.0.3'
defaultConfig
applicationId "packagename"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
//------- Enabling multidex support----------.
multiDexEnabled true
dexOptions
javaMaxHeapSize "3g"//use 3Gb of ram to launch android
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
productFlavors
dependencies
compile 'com.android.support:multidex:1.0.1' // 1.0.0
// if you are using google maps
compile 'com.google.android.gms:play-services-maps:9.2.0'
compile 'com.google.android.gms:play-services-location:9.2.0'
2) 编辑 Manifest,并添加这个 android:name
<application
android:name="android.support.multidex.MultiDexApplication"
...
.....
activity
android:name="packagename.Application"
....
...
</activity>
3)应用类
-我的应用类是:
import android.support.multidex.MultiDex;
public class Application extends AppCompatActivity
@Override
protected void attachBaseContext(Context base)
super.attachBaseContext(base);
MultiDex.install(this);
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
//this is the solution
MultiDex.install(this);
setContentView(R.layout.layout_example);
----
----
【讨论】:
非常感谢 在我的例子中,从 MultiDexApplication 类扩展 Application 类解决了这个问题。不需要调用 MultiDex.install(this);【参考方案12】:如果您使用的是 google play 服务,请确保添加特定服务。例如 使用地图时:
compile 'com.google.android.gms:play-services-maps:x.x.x
而不是
compile 'com.google.android.gms:play-services:9.6.1'
这将减少代码的大小并且编译不需要使用“multidex”功能。 如果碰巧你已经包含了
multiDexEnabled true
在您的代码中尝试删除它和不必要的库引用
【讨论】:
以上是关于java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions的主要内容,如果未能解决你的问题,请参考以下文章