Получение исключения java.lang.NoClassDefFoundError: com.google.firebase.FirebaseOptions после обновления до новой firebase
Я обновил свое приложение до новой firebase, используя this, и теперь, когда я компилирую свой проект, я получаю следующее исключение.
Вот мой 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)
My 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'
Не знаю, откуда я получаю это исключение. любая помощь будет высоко оценена.
Спасибо вам
Ответы
Ответ 1
Это сработало для меня:
- Если вы еще этого не сделали, обновите "Службы Google Play" до версии 30 из Android SDK Manager > Дополнительно.
![Android SDK Manager > Extras > Сервисы Google Play]()
-
Затем добавьте строку compile 'com.android.support:multidex:1.0.1'
к вашим зависимостям (или просто удалите multiDexEnabled true
, если это не требуется)
-
Добавьте этот атрибут в тег приложения в манифесте: android:name="android.support.multidex.MultiDexApplication"
Если у вас уже есть собственный класс приложения, определенный в Android Manifest, расширьте его от MultiDexApplication
вместо Application
Надеюсь, что это помогло!
Ответ 2
Использование последних сервисов 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'
}
Ответ 3
Так просто исправить парней. Если вы используете игровые сервисы и firebase в своем проекте, убедитесь, что вы не импортируете все доступные службы в google. Просто импортируйте API, что вам действительно нужно.
Например:
compile 'com.google.firebase:firebase-messaging:9.2.0'
compile 'com.google.android.gms:play-services:9.2.0'
Таким образом, это может дать вам noclassdeffounderror. Чтобы исправить это
удалить игровые сервисы и синхронизировать ваш проект. Если у вас есть зависимость, например, использование объявлений или карт в вашем приложении, определите конкретный API. как:
compile 'com.google.android.gms:play-services-maps:9.2.0'
Примечание. Максимум не пытайтесь использовать multiDexEnabled true. Это должен быть ваш последний шаг, чтобы что-то исправить.
Надеюсь, что это будет полезно.
Ответ 4
Я понизил свою зависимость от игрового сервиса google от
compile 'com.google.android.gms:play-services:9.2.0'
к
compile 'com.google.android.gms:play-services:8.4.0'
который решил эту проблему для меня.
Подробнее см. следующую ссылку "Переполнение стека" .
Обратите внимание: При обновлении до последней игровой службы google compile 'com.google.android.gms:play-services:9.4.0'
она также решила эту проблему.
Или вы можете выборочно импортировать определенные службы, которые вам нужны, вместо импорта всех сервисов Google Play.
Ответ 5
Шаг 1: Fix 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'
}
Шаг2: Исправьте 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'
Он работал нормально.
Ответ 6
Не забывайте об этом.
android:name="android.support.multidex.MultiDexApplication"
Ответ 7
Я решил, добавив это и снизив зависимость play-сервиса до 8.4.0 compile '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"
Ответ 8
Я столкнулся с той же ошибкой, когда я увеличил targetSDKVersion с 22 до 23 Я потратил минимум целый день, чтобы решить проблему. Теперь, наконец, я нахожу результат, который использует различные игровые сервисы api в файле build.gradle
Источник:
https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
Я добавил только соответствующий Api, и мое приложение работает нормально.
Ответ 9
Я думаю, что нашел решение для этой проблемы в этом ответе, пожалуйста, дайте ему посмотреть и спасибо @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'
Ответ 10
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(**R.string.default_web_client_id**))
.requestEmail()
.build();
В моем же случае я изменил requestIdToken, и он сработал.
Ответ 11
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'
.
Ответ 12
попытайтесь решить...
в Gradle файле
multiDexEnabled true
compile 'com.android.support:multidex:1.0.1'
Файл манифеста
тег приложения добавить эту строку
Android: name= "android.support.multidex.MultiDexApplication"
Ответ 13
Настройте приложение для multidex, чтобы решить эту проблему.
Для minSdkVersion
21 или выше установите multiDexEnabled
в true в файле build.gradle на уровне модуля, как показано ниже:
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
Extend 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
Надеюсь, что это поможет другим, кто сталкивается с одной проблемой.
Ответ 14
Снизьте свою зависимость в файле build.gradle
:
от
compile 'com.google.android.gms:play-services:9.4.0'
в
compile 'com.google.android.gms:play-services:7.3.0'
Это сработало в моем случае, надейтесь на то же самое для вас.