Androidで始めるCrashlytic(Fabric.io)

調べるに当たったキッカケ

  • GoogleMap v1 を使っているプロジェクトで
    • クラッシュレポートが欲しかったから

の [Google Analytics といえば] あたりに記載した話で

現時点だと

classpath 'com.google.gms:google-services:3.0.0'

じゃないと Developer Consoleのクラッシュレポートに通知が来ない?

最新の導入ページだと、Firebaseのページにリダイレクトされて

Firebase ClashReport の情報が DeveloperConsoleのクラッシュレポート に反映されている挙動?

みたいな状態になっている為。


最近下位互換のステっぷりがG様激しいので、データ集計の観点から言うとどうなんだろうか?

とか思ってしまう。。 csvとかにエクスポートして別途集計作業とかやはりしているのかな・・

qiita.com

の話を見ると、GAの方に送って集計みたいな話もあるようですが・・

今一G様的にはどうしたいんでしょうね・・・


公式ドキュメント

Fabric — Fabric for Android documentation

導入手順

Crashlytics for Android - Fabric Install

を参照。

  • crashlyticsを導入すると
    • crashlytics
    • Beta
    • Answers

が入る。別途導入する必要はない

注意点

下記の記述にしないとdebugBuildで動かない

final Fabric fabric = new Fabric.Builder(this)
        .kits(new Crashlytics())
        .debuggable(BuildConfig.DEBUG)
        .build();
Fabric.with(fabric);

不便に感じた所

  1. “Fabric for Android Studio or “Fabric for IntelliJ 入れること前提の作り
  2. APIキーの生成が
    1. アカウントログイン
    2. ローカルでcode install(snipet?)上で、重複しないキーを生成
    3. 実行時にサーバーに登録

なので、Fabric Pluginがうまく認識できないと何もできなくなる*1

な話もあるけど、2−2の操作ができないはず。

Fabric.ioのWeb管理コンソールからID等が生成できないのはすごく悩んだ。。。

  • Pluginのアカウント情報の fabric.properties がプロジェクト直下に1個のため、debug/releaseで切り替えられない
    • 運用的に本番アカウントと、テストアカウントは別にしたいはずかと思うんですが・・・

現状だとAndroidManifest.xmlを release/debugで分けるしかないよな。。というのが所感

未確認機能

  • NDK ClashReport

  • build.gradle

apply plugin: 'io.fabric'

crashlytics {
  enableNdk true
  androidNdkOut 'obj'
  androidNdkLibsOut 'libs'
  baseManifestPath 'AndroidManifest.xml'
}
  • コマンド実行
./gradlew crashlyticsUploadSymbolsDebug

./gradlew crashlyticsUploadSymbolsRelease

等で

その他の機能

Answers

  • 結構リアルタイムに表示されている
  • Charlesあたりで見ると結構頻繁に通信しているかなと

  • 標準で用意されている Event Types

    • 専用の参照ブロック画面が用意されているイメージ

下記だと

  • Purchaseというブロック画面
    • putItemPrice / putCurrency 等呼び出す関数単位で一つの表になる*2
    • 一データ間の関連性はなし*3
    • GAと違い全文が見えない(後ろ省略)。ホバー表示で見える感じ
Answers.getInstance().logPurchase(new PurchaseEvent()
      .putItemPrice(BigDecimal.valueOf(13.50))
      .putCurrency(Currency.getInstance("USD"))
      .putItemName("Answers Shirt")
      .putItemType("Apparel")
      .putItemId("sku-350")
      .putSuccess(true));

カスタムイベントを作った場合は、新規ブロック画面が作られる

Beta

gradle assembleRelease crashlyticsUploadDistributionDebug
gradle assembleRelease crashlyticsUploadDistributionRelease
  • リリースページにそれなりの文言を設定したい場合は、下記のページを参照して記述を追加

  • uploadしたリンクは毎回生成し直さないとダメ

    • uploadしたapkごとにハッシュリンクが作成される
    • apkを同じバージョンであげていると特にわかりづらい*4
  • task等でファイル名を変更しているとuploadはできない

  • テストする端末で、invateメールを受信*5

  • リンクをクリック
  • Betaアプリが入っていなければDownload
    1. Betaアプリインストール後、ログインを行う
    2. 一番最新のものが表示されているはずだが、違う場合はメールリンクから起動し直す
  • Betaアプリが入っていればアプリ起動ランチャー画面へ

  • Betaを使うには、

    • minsdk-9となっているが単にBetaアプリがminsdk9でつくられているからだけなので、
    • ビルドやアップロード自体は minsdk8とかでも可能

その他の追加機能

Kit Min minSdkVersion
Answers 8
Beta 9
Crashlytics 8
Digits 14
MoPub 9
Twitter Kit 14

MoPub

試した所感

試しにMoPubを導入してみようとお思ったのですが、依存aarが4つぐらい入るので*6

overrideLibraryの記述が255文字余裕で超えるので、api9以上でのみ動かすみたいなコードは書けない

<uses-sdk tools:overrideLibrary="XXX"> 
  • 指定のminsdk以上なら使えるみたいな eclipse-ADTでは書けていたコードが無理になった

というのが現状かなと。

まあ、広告IDを取得する関係で

com.google.android.gms:play-services-ads:XXX

の依存が必須だからminsdk9になる流れもありますが・・・

参考リンク

qiita.com

TwitterKit

参考リンク

qiita.com qiita.com qiita.com

Digits

参考リンク

qiita.com

*1:gradle sync失敗/コンパイルエラー発生中とか、ボタンが非アクティブになる

*2:したがって全関数使う必要はないと思う・・・

*3:送信単位のデータまとまりでは参照できない。不便

*4:タイムスタンプはリンク作成画面でのみ表示されるので

*5:apkを上げる度に毎回リンクが違うので、毎回送信する必要があり

*6:これ導入するだけでVideoAdのaar等も入る