[Qiita] AndroidのGoogle Analytics SDKをv2からv4に移行する

※この記事は以前Qiitaに投稿されていた古い記事です

はじめに

今自分が触っているアプリのAndroidのGoogle Analytics SDKをv2からv4に上げることにしたのですが、v2とv4ではパッケージ名も使い方も違っていて少し調べる必要があったので、移行したときに何を変更したのかメモとして書いておきます。
まぁ、v2はかなり古いSDKなので、未だにこれを使っている人はあんまりいないとは思いますが。。

古いjarを消し去る

今まで使っていたGoogle Analytics SDK v2のjarは不要なので、最初に消し去ります。

アプリのbuild.gradleにGoogle Play Servicesを追記

Google Analytics SDKはGoogle Play Servicesの中に入っているので、build.gradleにGoogle Play Servicesを追記します。
Google Play Servicesのバージョンは、なるべく最新のものを使ったほうが良いと思います。

compile 'com.google.android.gms:play-services:8.3.0'

importする

コードを書けばAndroid Studioが自動でimportしてくれるとは思いますが、一応書いておきます。
v2とv4でパッケージ名が変わってました。

import com.google.analytics.tracking.android.GoogleAnalytics;
import com.google.analytics.tracking.android.Tracker;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;

インスタンスの取得

インスタンスの取得はgetTrackerをnewTrackerに変えるだけです。

Tracker mTracker = GoogleAnalytics.getInstance(context).getTracker(TRACKER_ID);
Tracker mTracker = GoogleAnalytics.getInstance(context).newTracker(TRACKER_ID);

スクリーンビューの送信

スクリーンビューを送信するには、TrackerにsetScreenNameして、HitBuilders.ScreenViewBuilderをbuildしたものをsendメソッドに渡して送信します。

mTracker.sendView("screen_name");
mTracker.setScreenName("screen_name");
mTracker.send(new HitBuilders.ScreenViewBuilder().build());

カスタム速度の送信

カスタム速度を送信するには、HitBuilders.TimingBuilderを使います。

mTracker.sendTiming(category, time, variable, null);
mTracker.setScreenName("screen_name");
mTracker.send(new HitBuilders.TimingBuilder()
        .setCategory(category)
        .setValue(time)
        .setVariable(variable)
        .build()
);

イベントの送信

カスタム速度を送信するには、HitBuilders.EventBuilderを使います。

mTracker.sendEvent(category, action, label, value);
mTracker.send(new HitBuilders.EventBuilder()
     .setCategory(category)
     .setAction(action)
     .setLabel(label)
     .setValue(value)
     .build()
);

HitBuilders.AppViewBuilderとHitBuilders.ScreenViewBuilderの違い

HitBuilders.AppViewBuilderとHitBuilders.ScreenViewBuilder、スクリーンビューを取るにはどちらを使えば良いのか迷ったので調べてみたところ、

This class is deprecated.
This class has been deprecated in favor of the new ScreenViewBuilder class. The two classes are semantically similar but the latter is consistent across all the Google Analytics platforms.

とリファレンスに書いてありました。
HitBuilders.AppViewBuilderは非推奨になって、すべてのGoogle Analyticsのプラットフォーム間で一貫性のある新しいHitBuilders.ScreenViewBuilderクラスを作ったのでこっちを使ってね、みたいな感じだと思います。
なので、HitBuilders.ScreenViewBuilderを使えば良いようです。

起動時にハマった(゚д゚)

Error Code:
 2
Output:
 UNEXPECTED TOP-LEVEL EXCEPTION:
 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
  at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:502)
  at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
  at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
  at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
  at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
  at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
  at com.android.dx.command.dexer.Main.run(Main.java:277)
  at com.android.dx.command.dexer.Main.main(Main.java:245)
  at com.android.dx.command.Main.main(Main.java:106)

どうやらGoogle Play Services 8.3にしたことによって、dexのメソッドの総数が65,535を超えてしまったようです。
multidexをtrueにして、dependenciesにmultidexを追加して、

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        ...
        minSdkVersion 14
        targetSdkVersion 21
        ...

        // Enabling multidex support.
        multiDexEnabled true
    }
    ...
}

dependencies {
  compile 'com.android.support:multidex:1.0.0'
}

AndroidManifext.xmlのapplication要素のnameをMultiDexApplicationに変えます。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.multidex.myapplication">
    <application
        android:name="android.support.multidex.MultiDexApplication">
        ...
    </application>
</manifest>

ビルド通った!

おわりに

Google Analytics SDKとは関係無いところでハマりましたが、移行自体は意外とすんなり終わりました。
もしまだ移行していない方がいたら、ぜひ移行してみてください。
以上、お疲れさまでした。

参考



コメント

人気の投稿

【Android開発】Ubuntuで高速なAndroidエミュレータを使ってみる【Linux】

【Androidアプリ開発】AndroidでのOAuth認証が簡単に実装できるOAuthHelperを作ってみた

【Android開発】AppCompatのSearchViewのテキストカラーやアイコンを変更する