Google Analytics API v4 для Android: сбой приложения при запуске

Я установил все для google Analytics API v4, как указано здесь: https://developers.google.com/analytics/devguides/collection/android/v4/ и здесь: http://www.javacodegeeks.com/2014/04/working-with-google-analytics-api-v4-for-android.html< /а>

я сделал все шаги.

Я запускаю свое приложение, но происходит сбой

Вот мой global_tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="TypographyDashes">

    <!-- The apps Analytics Tracking Id -->
    <string name="ga_trackingId">UA-XXXXXX-15</string>

    <!-- Percentage of events to include in reports -->
    <string name="ga_sampleFrequency">100.0</string>

    <!-- Enable automatic Activity measurement -->
    <bool name="ga_autoActivityTracking">true</bool>

    <!-- catch and report uncaught exceptions from the app -->
    <bool name="ga_reportUncaughtExceptions">true</bool>

    <!-- How long a session exists before giving up -->
    <integer name="ga_sessionTimeout">-1</integer>

    <!-- If ga_autoActivityTracking is enabled, an alternate screen name can be specified to substitute for the full length canonical Activity name in screen view hit. In order to specify an alternate screen name use an <screenName> element, with the name attribute specifying the canonical name, and the value the alias to use instead. -->
    <screenName name="com.example.test.MainActivity">MainActivity</screenName>
</resources>

Вот мой AndroidManifest.xml

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

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

    <uses-feature android:name="android.hardware.camera"></uses-feature>

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />



    <application
        android:name=".Global"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="com.example.test.MESSAGE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

        </activity>

        <activity
            android:name=".SelectedImageActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait">

        </activity>

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <!-- Google Analytics Version v4 needs this value for easy tracking -->
        <meta-data android:name="com.google.android.gms.analytics.globalConfigResource"
            android:resource="@xml/global_tracker" />

        <activity
            android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:screenOrientation="portrait" />
    </application>

</manifest>

Вот мой AnalyticsApplication.java

 public enum TrackerName {
    APP_TRACKER,
    GLOBAL_TRACKER,
    E_COMMERCE_TRACKER,
}
HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {
        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE);
        Tracker t = null;
        if(trackerId==TrackerName.GLOBAL_TRACKER){
            t= analytics.newTracker("UA-66XXXXX-1");
        }
        mTrackers.put(trackerId, t);
    }
    return mTrackers.get(trackerId);
}

}

Вот мой класс MainActivity:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        //Get a Tracker (should auto-report) 2
        Tracker tracker = ((AnalyticsApplication) getApplication()).getTracker(AnalyticsApplication.TrackerName.GLOBAL_TRACKER);
        tracker.setScreenName("MainActivity");

///////////////////////////////////////////////////////////

@Override
    protected void onStart() {
        super.onStart();
        GoogleAnalytics.getInstance(this).reportActivityStart(this);
    }

    @Override
    protected void onStop() {
        super.onStop();
        GoogleAnalytics.getInstance(this).reportActivityStop(this);
    }

Моя Build Gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Сборка Gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 16
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/main.jar')

     compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.commit451:NativeStackBlur:1.0.1'
    compile 'com.google.android.gms:play-services-ads:7.3.0'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.github.bumptech.glide:glide:3.6.1'
    compile 'com.android.support:support-v4:21.0.0'
  }

Мой Logcate:

01-10 22:29:13.627  11614-11620/? E/jdwp﹕ Failed sending reply to debugger: Broken pipe
01-10 22:29:13.791  11614-11614/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.ClassCastException: com.example.test.Global cannot be cast to com.example.test.AnalyticsApplication
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: com.example.test.Global cannot be cast to com.example.test.AnalyticsApplication
            at com.example.test.MainActivity.onCreate(MainActivity.java:52)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method) 



Ответы (1)


В своем манифесте вы сообщили:

<application 
    android:name=".Global"

Судя по трассировке стека, AnalyticsApplication — это ваш класс Application, поэтому должно быть так:

<application 
    android:name=".AnalyticsApplication"
person thetonrifles    schedule 10.01.2016
comment
@OtmanElOuah, какое сообщение об ошибке вы видите сейчас в трассировке стека? - person thetonrifles; 12.01.2016
comment
Приложение снова взломано, я вижу ошибку MainActivity tracker.setScreenName(MainActivity); - person ZikManxx; 12.01.2016
comment
@OtmanElOuah Хорошо, это означает, что на ваш первоначальный вопрос дан ответ, и ответ должен быть принят, поскольку сбоя, о котором вы сообщили, больше не происходит. Если у вас есть другой вопрос, не стесняйтесь задать еще один. - person thetonrifles; 17.01.2016