AndroidStudioでプラグインは使わずにFabricを導入してみた。

#前提
fabricを検証してみようという流れになって、ドキュメントを探したのだけど、あまりなかった。
さらに日本語のブログも情報が古く、ほとんど参考にならない。
また、fabricのサイトの構成がすごく見にくく、情報に行き着くのに時間がかなりかかった。

上記の理由からfabric（に同梱されているCrashlytics）が動くまで対応したことをメモ書きしておく。

#Fabricとは

Twitter社が出した、Twitter APIが含まれているライブラリ。
CrashlyticsやMoPubなど他のライブラリも同梱されている。
iOS/Android共にライブラリが用意されており、簡単に導入できる（らしいが正直に言うとAndroidは結構大変だった。）

#環境

* Max OS X 10.10.3
* AndroidStudio 1.2 Beta 3
* 実装するアプリケーションはAndroid StudioのHello Worldプロジェクト

#アカウントを用意する

[fabric](https://get.fabric.io/?locale=ja)のサイトへアクセスし、
「Get Started with Fabric」ボタンをクリックして、「名前」「メールアドレス」を入力する。
まだ登録してから時間が必要らしく、登録完了まで1時間ほどタイムラグがあった。

登録完了メールが届いたら、メールのリンクからfabricのアカウント登録ページに遷移し、そこで名前やパスワード、プロジェクト名を入力する。

そうするとこのようなページに遷移する。
![select_ide.png](https://qiita-image-store.s3.amazonaws.com/0/20058/9efeda91-8f0d-0735-d6e5-949fc169c21e.png)

pluginを利用したいのであれば、ここからダウンロードする。
ただし、今回はpluginを使わないので使い方は省略します。というより使えたことがなくて、説明しようがない。
今回はAndroidStudioを選択し、プラグインのダウンロードが勝手に始まるので、キャンセルしてClick to continueで進めていくと

**何もできない。**

毎回このpluginのページに飛ばされて、それ以上進めない。
iOS側を先にやってApi Key/Build Secretを取得することは可能。
ただ、Androidだけでしかもplugin使わないとここで詰まります。Twitterさんなんとかして！
ということで、このままオワリでもいいのですが、自力で解決するのを諦め、Twitterさんにメール。
そしたらプロジェクトのApi Key/Build Secretを教えてもらったのでこれで対応してみる。
(Androidだけ設定する予定だったので新しいアカウントで対応していたから進めないのを知っていただけで、新規でこの状態だったらたぶん使うの見送ってた。）

#Api Key/Build Secretを設定する

app(デフォルトの場合）配下にfabric.propertiesというファイルを作成する。
そのファイルを以下のように編集する。

```properties:app/fabric.properties
apiSecret=[TwitterからもらったBuild Secret]
apiKey=[TwitterからもらったApi Key]
```

#FabricのGradleプラグインを設定する

Gradleでコマンド一発でFabricと連携したいので、Gradleのプラグインを導入します。

```groovy:build.gradle
buildscript {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'io.fabric.tools:gradle:1.+'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url 'https://maven.fabric.io/public' }
    }
}

```

app/build.gradleにpluginを適応する。'com.android.application'の下に追加する。

```groovy:app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
```

すでに一度でもdashboardが開くことができた人は

[Organizations](https://fabric.io/settings/organizations)から対象のProjectを選択し、
Project名の下にある、API Key/Build Secretをクリックすると出て来ます。（すごく小さいので注意。）


# Dashboardを見えるようにする

最初にbuild.gradleのdependenciesに設定を追加する。

```groovy:app/build.gradle
buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}

apply plugin: 'io.fabric'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.github.shiraji.myapplication"
        minSdkVersion 9
        targetSdkVersion 21
        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.crashlytics.sdk.android:crashlytics:2.2.3@aar') {
        transitive = true;
    }
    compile('com.twitter.sdk.android:twitter-core:1.0.0@aar') {
        transitive = true;
    }
    compile('com.mopub.sdk.android:mopub:3.3.0@aar') {
        transitive = true;
    }
}


```

## Crashlyticsの設定を埋め込む

さらに、Crashlyticsの設定をApplicationクラスに追加します。

```java:MyApplication
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(getApplicationContext(), new Crashlytics());
    }
}
```

カスタムApplicationを持っていないアプリでは、最初にlaunchされるActivity内で以下のように設定します。

```java:MainActivity.java
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Fabric.with(this, new Crashlytics());
        setContentView(R.layout.activity_main);
    }

```

これでアプリを実行するとDashboardが見えるようになります。

# Crashlyticsに落ちてないけど情報を送る

Fabricとはもう関係ないけど、落ちてないけど、情報だけ送りたい場合は以下のコードで送ることができる。

```java
Crashlytics.logException(new Exception("ここに何か書くとさらに良いかも？"));
```

Non-Fatalとして送られるので、DashboardでFatalのみのフィルタかけている場合は注意。

# 最後に
会社でこのツールを使っていく感じになりつつあるので、ドキュメントを随時更新していこうかと思います。
でもTwitterさんが整理されたドキュメント作ってくれたらそれも必要ないのだけどね！！！