Объявления Firebase: java.lang.InstantiationError: com.google.android.gms.internal.zznv

Добавление AdMob в мое приложение для Android сводит меня с ума :o

Firebase уже запущен (auth, db, ...).

Я также добавил зависимость от Gradle для рекламы.
Я точно следовал инструкциям Google.
У меня есть две проблемы:

  1. Контейнер AdView в моем файле макета xml не может быть отображен в предварительном просмотре. В нем говорится:

Не удалось создать экземпляры следующих классов: com.google.android.gms.ads.AdView.

Сведения об исключении java.lang.NoClassDefFoundError: не удалось инициализировать класс com.google.android.gms.internal.zzeh на com.google.android.gms.internal.zzez. на com.google.android.gms.internal.zzez. на com.google.android.gms.internal.zzez. на com.google.android.gms.ads.BaseAdView. на com.google.android.gms.ads.AdView. at java.lang.reflect.Constructor.newInstance(Constructor.java:423)   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)

  1. Если я попытаюсь инициализировать рекламу в своем коде, произойдет сбой в этой строке кода:

MobileAds.initialize(getApplicationContext(), "ca-app-pub-XXXXXXXXXXXXXXXXXX");

E/UncaughtException: java.lang.InstantiationError: com.google.android.gms.internal.zznv на com.google.android.gms.internal.zzeh.(Неизвестный источник) на com.google.android.gms.internal.zzeh .(Неизвестный источник) на com.google.android.gms.internal.zzfb.zza(Неизвестный источник) на com.google.android.gms.ads.MobileAds.initialize(Неизвестный источник) на com.google.android.gms. ads.MobileAds.initialize(неизвестный источник) в de.philweb.myweightlog.MainActivity.onCreate(MainActivity.java:233)

Я пробовал все, что нашел на SO. Подобно MultiDex и добавлению AdsActivity в манифест, безуспешно. Теперь мне очень нужна ваша помощь :(

Спасибо, ребята, Фил

манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.philweb.myweightlog">

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyAppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
    <!-- ATTENTION: This was auto-generated to add Google Play services to your project for App Indexing.  See https://g.co/AppIndexing/AndroidStudio for more information.
    -->
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

</application>

this is my build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"

    defaultConfig {
        applicationId "de.philweb.myweightlog"
        minSdkVersion 16
        targetSdkVersion 22
//        multiDexEnabled true
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
//    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.0.1' //22.2.0'
    compile 'com.android.support:support-v4:25.0.1' //22.2.0'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-crash:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.google.firebase:firebase-database:10.0.1'
    compile 'com.google.firebase:firebase-ads:10.0.1'
    compile 'com.google.firebase:firebase-appindexing:10.0.1'
//    compile 'com.android.support:multidex:1.0.1'

    compile 'com.android.support:design:25.0.1'
    compile 'com.firebaseui:firebase-ui:1.0.0'

    compile "com.androidplot:androidplot-core:1.4.0"
    compile 'com.darwinsys:hirondelle-date4j:1.5.1'
    compile('com.mikepenz:materialdrawer:5.8.0@aar') {
        transitive = true
    }
}

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

person just4phil    schedule 05.01.2017    source источник
comment
Опубликуйте файл build.gradle вашего приложения.   -  person Bob Snyder    schedule 06.01.2017
comment
Вы видите эту проблему как в отладочной, так и в окончательной версиях? Если случайно это только для сборки релиза, и вы используете ProGuard, проблема может заключаться в том, что вам нужно добавить keep class com.google.android.gms.** { *; } в файл конфигурации ProGuard.   -  person John O'Reilly    schedule 06.01.2017
comment
я добавил build.gradle ...... у меня проблемы в режиме отладки ... я не экспортировал как сборку релиза и не использую proguard AFAIK :)   -  person just4phil    schedule 06.01.2017


Ответы (2)


Размер и количество включенных библиотек требуют Multidex. Вы говорите, что пытались включить его. Обратите внимание, что требуются три шага, включая изменение манифест.

Кроме того, при использовании библиотек Firebase версии 10.0.1 необходимо использовать интерфейс Firebase версии 1.0.1:

compile 'com.firebaseui:firebase-ui:1.0.1'

Документация пользовательского интерфейса Firebase содержит таблицу совместимых версий.

person Bob Snyder    schedule 07.01.2017
comment
спасибо чувак!! обновление firebase-ui уже помогло! теперь адмоб работает. я тоже попробую мультидекс, но, похоже, мне не придется - person just4phil; 07.01.2017
comment
хм... MultiDex не работает... но приложение теперь работает с admob..... E/UncaughtException: java.lang.StackOverflowError: размер стека 8 МБ в android.support.v7.app.AppCompatActivity.getResources(AppCompatActivity. ява: 552) - person just4phil; 07.01.2017
comment
StackOverflowError не относится к MultiDex. Если вы попытаетесь запустить свое приложение на устройстве, предшествующем Lollipop, я уверен, что вы увидите ошибки, связанные с более чем 65 000 ссылок на методы. Я создал тестовое приложение с вашими зависимостями, попытался запустить его на устройстве с API 19 и увидел ошибки. - person Bob Snyder; 07.01.2017
comment
ок, спасибо...приятно знать. тогда мне придется снова попробовать multidex. - person just4phil; 07.01.2017

<uses-permission android:name="android.permission.INTERNET"/>

поместите это в манифест.

person Simo    schedule 05.01.2017
comment
спасибо, но ничего не меняет.... (помимо этого: почему я могу синхронизировать свои данные с firebase-cloud-DB, когда нет доступа к Интернету????!) - person just4phil; 06.01.2017
comment
для admob см. эту ссылку - person Simo; 06.01.2017
comment
А данные, которые вы синхронизируете, могут быть переданы внутри компании. потому что невозможно получить доступ к данным в Интернете, когда у вас нет разрешения на доступ в Интернет. - person Simo; 06.01.2017
comment
@Simo: разрешение объединено с библиотеками Firebase. См. этот ответ: stackoverflow.com/a/39058748/4815718 - person Bob Snyder; 06.01.2017
comment
ну, как говорится в сообщении, разрешение объединено, поэтому приложение получает доступ к данным. У меня была аналогичная проблема, которая была решена простым добавлением разрешения. в любом случае продолжайте копать. - person Simo; 06.01.2017