我已使用this将我的应用程序更新到新的firebase,现在当我编译项目时,我得到以下异常。
这是我的 logcat:
11:57:54.533 27844-27844/com.example.dayshift_2.traveyy E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.dayshift_2.traveyy, PID: 27844
java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions
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)
我的 Build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.dayshift_2.traveyy"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/LICENSE'
exclude 'META-INF/LICENSE-FIREBASE.txt'
exclude 'META-INF/NOTICE'
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.facebook.android:facebook-android-sdk:4.+'
compile 'com.google.android.gms:play-services:9.0.0'
compile 'com.google.firebase:firebase-database:9.0.0'
compile 'com.google.firebase:firebase-auth:9.0.0'
compile 'com.android.support:support-v13:23.3.0'
compile 'com.roughike:bottom-bar:1.2.1'
}
apply plugin: 'com.google.gms.google-services'
不知道我从哪里得到这个例外。任何帮助将受到高度赞赏。 谢谢
答案 0 :(得分:138)
这对我有用:
然后将行compile 'com.android.support:multidex:1.0.1'
添加到您的依赖项中(如果不需要,只需删除multiDexEnabled true
)
将此属性添加到清单中的应用程序代码:android:name="android.support.multidex.MultiDexApplication"
如果您已在Android Manifest中定义了自定义应用程序类,请从MultiDexApplication
而不是Application
希望它有所帮助!
答案 1 :(得分:45)
使用最新的Google Play服务但无效。对我来说,这个程序正在运作:
更新了我的应用类:
public class App extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
更新了build.gradle
个文件:
defaultConfig {
...
multiDexEnabled true
}
包含的依赖项:
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
答案 2 :(得分:22)
修复人员非常简单。如果您在项目中使用了播放器服务和firebase,请确保不要导入google中的所有可用服务。只需导入实际需要的API。 例如:
HttpRequestMessage
这样做可以为你提供 noclassdeffounderror 。解决这个问题
删除播放服务并同步您的项目。如果您在应用中使用广告或地图等依赖关系,请定义特定的API。像:
compile 'com.google.firebase:firebase-messaging:9.2.0'
compile 'com.google.android.gms:play-services:9.2.0'
注意:最大值不要尝试使用 multiDexEnabled true 。这应该是你修复问题的最后一步。
希望这有用。
答案 3 :(得分:17)
我从
降级我的Google Play服务依赖关系compile 'com.google.android.gms:play-services:9.2.0'
到
compile 'com.google.android.gms:play-services:8.4.0'
为我解决了这个问题。
请参阅the following Stack Overflow link for further description。
请注意:升级到最新的Google Play服务时,compile 'com.google.android.gms:play-services:9.4.0'
它也解决了这个问题。
或者您可以有选择地导入您需要的某些服务,而不是导入所有Google Play服务。
答案 4 :(得分:13)
Step1:修复multidex
申请类:
public class StudyNApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
MultiDex.install(this);
}
}
成绩档案
defaultConfig {
...
multiDexEnabled true
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
Step2:修复java.lang.NoClassDefFoundError:com.google.firebase.FirebaseOptions
删除
compile 'com.google.android.gms:play-services:9.4.0'
添加两个lib:
compile 'com.google.android.gms:play-services-maps:9.4.0'
compile 'com.google.android.gms:play-services-location:9.4.0'
工作正常。
答案 5 :(得分:5)
不要忘记它。
android:name="android.support.multidex.MultiDexApplication"
答案 6 :(得分:3)
我通过添加此解决方案并将播放服务依赖性降低到8.4.0来解决 编译com.google.android.gms:play-services:8.4.0'
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(newBase);
MultiDex.install(this);
}
并将以下内容添加到清单
android:name="android.support.multidex.MultiDexApplication"
答案 7 :(得分:1)
当我将targetSDKVersion从22增加到23时,我遇到了同样的错误,我花了最少的一整天来解决问题。现在终于找到了在build.gradle文件中使用不同的play服务api的结果 资源: https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
我只添加了相关的Api,我的应用程序运行正常。
答案 8 :(得分:0)
我认为我已经在answer找到了解决此问题的方案,请看一看并感谢 @Gabriele Mariotti ,他写道:
在您的顶级build.gradle中,您必须添加:
buildscript {
// ...
dependencies {
// ...
classpath 'com.google.gms:google-services:3.0.0'
}
}
然后在你的模块build.gradle:
apply plugin: 'com.android.application'
android {
// ...
}
dependencies {
// ...
}
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
答案 9 :(得分:0)
app.controller('StoreController', function(){
this.products = gems;
});
在我同样的情况下,我更改了requestIdToken并且它有效。
答案 10 :(得分:0)
dependencies {
compile 'com.android.support:support-v4:25.0.1'
compile 'com.google.firebase:firebase-ads:9.0.2'
compile files('libs/StartAppInApp-3.5.0.jar')
compile 'com.android.support:multidex:1.0.1'
}
申请插件:'com.google.gms.google-services'
。
答案 11 :(得分:0)
尝试解决......
Gradle文件中的
multiDexEnabled true
compile' com.android.support:multidex:1.0.1'
清单文件
应用程序标记添加此行
机器人:名称=" android.support.multidex.MultiDexApplication"
答案 12 :(得分:0)
为您的应用配置多索 以解决此问题。
对于
minSdkVersion
21或以上,在模块级build.gradle文件中将multiDexEnabled
设置为 true ,如下图所示:
android {
defaultConfig {
//...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
//...
}
适用于
minSdkVersion
API 20或更低
修改module-level build.gradle
并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
//...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
如果您未覆盖 Application
类,请修改manifest
文件以设置android:name
应用程序标签如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication">
//...
</application>
</manifest>
2.1.1。如果您覆盖 Application
类扩展MultiDexApplication
public class MyApplication extends MultiDexApplication { //... }
2.1.2。或者,如果您覆盖 Application
类,但无法更改基类,则可以覆盖attachBaseContext()
方法并调用MultiDex.install(this)启用multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
了解更多mdex-gradle
希望这将有助于面临同样问题的其他人。
答案 13 :(得分:0)
在执行所有繁忙的解决方案之前,请尝试从Android Studio 清理项目或重建项目。
java.lang. NoClassDefFoundError
当您在项目中更改任何 Class 名称时,会抛出异常,但无法获得您在 Runtime 中所做的更改。
答案 14 :(得分:-1)
降低build.gradle
文件中的依赖关系:
从:
compile 'com.google.android.gms:play-services:9.4.0'
为:
compile 'com.google.android.gms:play-services:7.3.0'
这适用于我的情况,希望对你有同感。