2017-01-05 2 views
0

Ajout AdMob à mon application Android me rend fou: oannonces Firebase: java.lang.InstantiationError: com.google.android.gms.internal.zznv

Firebase est déjà en cours d'exécution (auth, db, ...).

J'ai ajouté la dépendance de gradle pour les annonces aussi.
J'ai suivi les instructions de Google exactement.
J'ai deux questions:

  1. Le conteneur AdView dans mon dossier de mise en page XML ne peut pas être rendue dans l'aperçu. Il dit:

The following classes could not be instantiated: com.google.android.gms.ads.AdView

Exception Details java.lang.NoClassDefFoundError: Could not initialize class com.google.android.gms.internal.zzeh   at com.google.android.gms.internal.zzez.  at com.google.android.gms.internal.zzez.  at com.google.android.gms.internal.zzez.  at com.google.android.gms.ads.BaseAdView.  at com.google.android.gms.ads.AdView.  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)

  1. Si je tente d'initialiser des annonces dans mon code, il se bloque dans ce code en ligne:

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

E/UncaughtException: java.lang.InstantiationError: com.google.android.gms.internal.zznv at com.google.android.gms.internal.zzeh.(Unknown Source) at com.google.android.gms.internal.zzeh.(Unknown Source) at com.google.android.gms.internal.zzfb.zza(Unknown Source) at com.google.android.gms.ads.MobileAds.initialize(Unknown Source) at com.google.android.gms.ads.MobileAds.initialize(Unknown Source) at de.philweb.myweightlog.MainActivity.onCreate(MainActivity.java:233)

J'ai essayé tout ce que j'ai trouvé sur SO. Comme MultiDex et en ajoutant AdsActivity à manifester, pas de succès. Maintenant, je vraiment besoin de votre aide :(

Merci les gars, phil

le manifeste:

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

c'est mon 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:[email protected]') { 
     transitive = true 
    } 
} 

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

Publiez le fichier build.gradle de votre application. –

+0

Voyez-vous ce problème dans les versions de débogage et de publication? Si, par hasard, c'est seulement pour la version finale, et que vous utilisez ProGuard, alors il se peut que vous deviez ajouter 'keep class com.google.android.gms. ** {*; } 'à votre fichier de configuration ProGuard. –

+0

j'ai ajouté le build.gradle ....... j'ai les questions dans le mode de débogage ... je n'ai pas exporté en tant que version buil et ne pas utiliser proguard AFAIK :) – just4phil

Répondre

0

La taille et le nombre de bibliothèques incluses requièrent Multidex. Vous dites que vous avez essayé de l'activer. Notez que three steps are required, y compris une modification du manifeste.

Aussi, lorsque vous utilisez la version 10.0.1 des libs Firebase, vous devez utiliser la version 1.0.1 de l'interface utilisateur Firebase:

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

Le Firebase UI docs contient une table des versions compatibles.

+0

merci l'homme !!la mise à niveau de Firebase-ui a déjà aidé! maintenant admob fonctionne. je vais essayer multidex, aussi, mais il semble que je ne devrais pas – just4phil

+0

hm ... MultiDex ne fonctionne pas ... mais l'application fonctionne maintenant avec admob ..... E/UncaughtException: java.lang.StackOverflowError: taille de la pile 8MB at android.support.v7.app.AppCompatActivity.getResources (AppCompatActivity.java:552) – just4phil

+0

Le 'StackOverflowError' n'est pas lié à MultiDex. Si vous essayez d'exécuter votre application sur un périphérique pré-Lollipop, je suis sûr que vous verrez des erreurs liées à plus de références à la méthode 65K. J'ai construit une application de test avec vos dépendances, essayé de l'exécuter sur un périphérique API 19, et vu les erreurs. –

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

pu t ceci dans le manifeste.

+1

merci, mais ne change rien .... cela: pourquoi puis-je synchroniser mes données avec firebase-cloud-DB quand il n'y a pas d'autorisation Internet ????!) – just4phil

+0

pour admob voir ce [link] (https://firebase.google.com/docs/admob/android/quick-start) – Simo

+0

Et sur les données que vous synchronisez sont peuvent être partagées en interne. car il n'est pas possible d'accéder aux données sur Internet lorsque vous n'êtes pas autorisé à accéder à Internet. – Simo