Crashlyticsのbeta配信機能を使ってみた

つい先日Crashlyticsからβ配信機能がリリースされた。
Crashlytics May Update | Crashlytics Blog
http://www.crashlytics.com/blog/crashlytics-may-2014-update/

順次リリースということだったが、今日やっと私の環境でも使えるようになったので、記録を残しておく

Screen_Shot_2014-06-05_at_23_41_16

β配信する

β配信の方法は、まずここを見ろと言われる

? Why don’t I see my APK to distribute? – Support for Crashlytics
http://support.crashlytics.com/knowledgebase/articles/370373-why-don-t-i-see-my-apk-to-distribute

Crashlyticsプラグインにドラッグアンドドロップすれば配信できるよ!って書いてあるけど、そんな面倒な方法誰が使うんだろう。
build toolsをお使いの方はこちらというところに進むと…
こんな感じで各ビルドツールでの使用方法が書かれている。

Can I use Beta with an Android build tool? – Support for Crashlytics
http://support.crashlytics.com/knowledgebase/articles/370217-can-i-use-beta-with-an-android-build-tool

すでにCrashlyticsを使っていて、Gradleを使っている場合は何も準備は必要なくて

./gradlew clean assembleRelease crashlyticsUploadDistributionRelease

とコマンドを叩くだけでCrashlyticsに配信される。
Crashlyticsのこの行き届いた感がたまらない…!
jenkinsのスクリプト変更するだけでいいじゃないですかー。やだべんり。

コマンド実行するとこんな感じでapkがCrashlyticsサーバにアップロードされた。

Screen Shot 2014-06-05 at 23.47.12

β配信先を追加する

β配信先はメールアドレスを指定する。Crashlyticsユーザであればそのユーザのアイコンが表示される。

Screen_Shot_2014-06-05_at_23_52_58

無事追加された。
ちなみにCrashlyticsユーザでないメールアドレスも追加できました。

Screen_Shot_2014-06-05_at_23_55_40

上部に書かれている「invite」や「accepted」などはそのユーザの状態を表しているようだ。

配信されたβバージョンを使う

こんな感じのメールを受信していた
2014-06-06 00.02.552014-06-06 00.03.08

let me inをクリックするとブラウザが起動する

2014-06-06 00.03.52

Downloadからapkをダウンロードする

2014-06-06 00.05.00

ダウンロードしたapkをインストールすると…
あれ…、私のアプリじゃない!!(゜o゜;

hockeyappみたいに本体アプリにアップデート機能を組み込むんだろうなあって思ったが、まずはCrashlyticsのβ配信アプリをダウンロードさせるみたいだ。

2014-06-06 00.06.11

インストール後に名前を入力してやっとアプリのダウンロードまでこぎつけた。
あとはインストールして普通にアプリを使うことができる。

アップデートを配信する

新しいβを配信した時にユーザにどう通知されるのかが気になったので調べた。
同じバージョンのものを2回アップロードしてみたらこんな風になった。

Screen Shot 2014-06-06 at 0.14.13

アップロードはされているみたい…。
端末の方を見るが、何も音沙汰はない。
そこで一つのバージョンを選択してみると

Screen Shot 2014-06-05 at 23.47.12

どこかで見た画面が表示された。
どうやらCrashlyticsサーバへアップロードはコマンドで自動化できるが、実際の配信は手動でやる必要がありそうだ。
ちょっとめんどい。

さらにここからすでにアプリをインストールしている端末にinviteを送ってみたが、特に端末に通知はなかった。
メールが届いたが、これが通知になるのだろう。(アプリをインストールしたんだから、そいつが通知だしてほしかった…)
これはないなー。いまどきメール見ないからなかなか気づけないよ><

2014-06-06 00.15.58

端末でβ配信アプリを起動すると新しいapkにアップデートできるようになってた。

Gradle Pluginでresourcesディレクトリからファイルを読み込む

いままではこういう風に書いていたんだけど

public MyPlugin extends Plugin<Project> {
  @Override
  void apply(Project project) {
    URL url = ClassLoader.getResources("resource.file")
    assert url != null // fail
  }
}

返ってくるURLはnullになってしまう。

こう書けばOK

public MyPlugin extends Plugin<Project> {
  @Override
  void apply(Project project) {
    URL url = Thread.currentThread().getContextClassLoader().getResource("resource.file")
    assert url != null
  }
}

ぼくのびるどはにゃあとなくプラグインを作りました

前回「ぼくのびるどはにゃあとなく」というタイトルで、ビルド完了したことを開発者に知らせるテクニックを紹介しました。

ぼくのビルドはにゃあとなく | 明日の鍵
http://blog.tomorrowkey.jp/2014-05-15/my-build-system-crow-meow/

なかなか評判がよさそうだったので、導入の敷居を下げるべくGradle Pluginにしてmaven centralにアップロードしました。

ソースコード

tomorrowkey/notifier-plugin
https://github.com/tomorrowkey/notifier-plugin

導入方法

詳しくはGithubのREADMEをご覧ください。

/build.gradle

プロジェクトのルートディレクトリのbuild.gradleにプラグインの参照を追加します。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'jp.tomorrowkey.gradle.notifier:notifier-plugin:0.0.1'
    }
}

/app/build.gradle

ビルドするモジュールのbuild.gradleにプラグインを適用します。

apply plugin: 'notifier-plugin'

/notifier.groovy

どのような通知を使用するかはnotifier.groovy というファイルをプロジェクトのルートディレクトリに作成してください。
人によって通知方法は異なると思うので、このファイルは.gitignoreに追加すると、個別に設定できていいんじゃないでしょうか。

voice {
    enabled = false
    name = 'Alex'
}

notificationCenter {
    enabled = true
}

sound {
    enabled = true
    url='file:///Users/tomorrowkey/Desktop/meow.mp3'
}

助かりました

今回初めてGradle Pluginを作りました。
@__gfx__ さんのGradle Plugin Templateを使うことによって爆速で開発できました!
ありがとうございます!

gfx/gradle-plugin-template
https://github.com/gfx/gradle-plugin-template

また、今回初めてmaven centralへのアップロードに挑戦しました!
Yokomarkさんのこの記事のおかげで爆速でアップロードできました!
ありがとうございます!

Java – Android のライブラリプロジェクトを爆速で Maven Central にデプロイする – Qiita
http://qiita.com/KeithYokoma/items/e9ee24e7f6a62623f2fb

ぼくのビルドはにゃあとなく

potatotips7で「ぼくのビルドはにゃあとなく」というタイトルでLTしました。

私以外の発表スライドはこちらから見れます…
potatotips 7 · potatotips/potatotips Wiki
https://github.com/potatotips/potatotips/wiki/potatotips-7


http://www.slideshare.net/tomorrowkey/ss-34718053

時間がない人向けに簡単に説明すると

Gradleビルドの完了をフックして、ネコの鳴き声を再生するというデモでした。
これを使えばいつもマルチタスクで忙しいあなたもビルド完了に気づくことができます!

※ネコの鳴き声は別途ダウンロードしてきてください。

ネコの鳴き声が嫌だったらビープ音にすることもできるので、職場でネコの鳴き声が聞こえるなんて恥ずかしい!!って人でも安心です。

ぜひご活用ください。

LOG_TAGを生成するプラグインを作りました

LOG_TAG フィールドを生成するAndroid Studio用のプラグインを作りました。

JetBrains Plugin Repository :: Inject LOG_TAG Plugin
http://plugins.jetbrains.com/plugin/7393?pr=androidstudio

初めて作ったプロダクトが公開されるってとてもテンションあがりますよね!
本当は2週間前には完成していたのですがjetbrains.com への登録や、プラグインの登録や、実際にIntelliJ IDEAから見えるようになるまでの時間などで、作りました!って言えてませんでした。やっと吐き出せた感じです。

目次

  • LOG_TAGって?
  • インストール方法
  • 使い方
  • ソースコード

LOG_TAGって?

Androidアプリを作っていてログ出力するときにString型のTagを渡す必要があります。
人によって使用する値は違いますが、私はクラスの名前を使用します。

毎回クラス名を入力するのは面倒なので、クラスの定義のすぐ下にLOG_TAGという定数を定義して、それを使うようにしています。
このプラグインはLOG_TAGを生成するために作りました。

インストール方法

このプラグインはIndelliJ IDEAとAndroid Studioで使用することができます。

PreferenceのPluginsを表示します。

Screen Shot 2014-02-11 at 11.56.23

[Browse repositories…] を押すとJetBrains Plugins Repositoy に登録されているプラグインが表示されます。

Screen Shot 2014-02-11 at 11.58.46

右上の検索ボックスに”LOG_TAG”と入力するとプラグインが表示されます。

Screen Shot 2014-02-11 at 11.59.50

プラグインを選択した状態で左上の”Download and Install Plugin”ボタンを押せばインストールすることができます。

使い方

class内にキャレットを起きます。
Screen Shot 2014-02-05 at 19.56.37

メニューから[Code] > [Generate] を選択します。キーマップがMac OS X 10.05+であればショートカットはCommand+Nです。
Code

[Inject LOG-TAG]を選択します。
Screenshot_2014_02_05_19_58

コードが自動的に生成されます。
Screen Shot 2014-02-05 at 19.59.04

自動的にインデントしてくれませんが、その辺はフォーマッタに任せます。

ソースコード

ソースコードをGitHubに公開しました。

tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin

バグ報告や追加機能の提案はこちらにお願いします。
Issues · tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin/issues

Plugin SDKにソースコードをアタッチする

プラグインを作るための環境構築を紹介したページにはIntelliJのソースコードをSDKにアタッチするという項目があります。

Check out the sources of IntelliJ IDEA Community Edition as described in Check Out & Build Community Edition

In the Sourcepath tab of the SDK settings, press the “Add…” button and specify the directory > into which you have checked out the sources of the Community Edition

Android StudioをSDKに設定した場合は、Android Studioのソースコードを参照したいので、その方法を調べました。

ソースコードを参照してみる

ソースコードをアタッチしていない状態でソースコードを参照してみます。

このプロジェクトは前回作ったサンプルコードです。

Screen Shot 2014-02-08 at 15.03.40

Notifications.Bus.notify()の実装がどうなっているのか参照してみましょう。
notify()と書かれたところにキャレットを合わせた状態で、

[右クリック] > [Go to] > [Declaration (Command+B)]

を選択します。

Screen Shot 2014-02-08 at 15.04.22

Notificationsクラスが表示されましたが、インターフェイスのみで実装は見ることはできません。(デコンパイラをインストールしていたら見れるかもしれません)
今回のゴールは、この実装が見れるようになることです。

Android Studioのソースコードのダウンロード

SDKにアタッチするためのソースコードをダウンロードします。
Android Studioのソースコードはここで見ることができます。

platform/tools/idea – Git at Google
https://android.googlesource.com/platform/tools/idea/

以下のコマンドを実行することによりソースコードをダウンロードできます。

git clone https://android.googlesource.com/platform/tools/idea

そんなに大きくないので5分ほどあればダウンロード完了します。

ソースコードをアタッチする

プラグイン開発に使用するIntelliJを起動します。

Screen Shot 2014-02-08 at 15.07.12

このような画面になっていると思います。
プロジェクトが開かれている場合は[File] > [Close Project]をしてこの画面を表示してください。

Project Structureを開きます。

[Configure] > [Project Defaults] > [Project Structure]

IDEA AI-133.988757 を選択している状態で、[Edit…]ボタンを押します。

Screen Shot 2014-02-08 at 15.08.56

[Sourcepath]を選択すると以下のような画面になります。

Screen Shot 2014-02-08 at 15.09.26

[+]ボタンを押した後に、先程ダウンロードしたAndroid Studioのソースコードの場所を指定します。
これで設定完了です。

ソースコードを参照する

最初と同じようにNotifications.Bus.notify() の実装を見てみましょう。

Screen Shot 2014-02-08 at 15.26.34

無事実装を見ることができました。

Gistのショートコードを生成するChrome extensionを作りました。

ブログでのソースコード表示方法をGistに変更しました。

使用しているプラグインはこれです。
WordPress › Embed GitHub Gist « WordPress Plugins
http://wordpress.org/plugins/embed-github-gist/

GistのIDとファイル名を以下のように指定するとブログに表示することができます。

[gist id=546764 file=file.txt]

GitHubのシンタックスハイライトで綺麗に表示されるのですが、Gistに貼って、このフォーマットに変換して、ブログに貼り付けるという作業が面倒でした。

Chrome extensionを作りました!

そこで、このショートコードを作ってくれるChrome extensionを作りました。
自分用に作りましたがChrome Web Storeで公開しています。

Chrome Web Store – Make a Gist shortcode for WordPress
https://chrome.google.com/webstore/detail/make-a-gist-shortcode-for/icleionmfaopbknneajlmjhccoeainae

使い方

適当なGistページを表示すると各ファイルの右上に新しいアイコンが表示されます。

make-a-shortcode-for-wordpress-button

このボタンを押すとプロンプトでショートコードが表示されるので、コピーして使います。

the-shortcode-on-prompt

課題

  • 自動的にコピーできるようにしたい。
  • アイコンめんどい。誰か描いて下さい。

ソースコード

大したことはしていませんが、ソースコードも公開しています。
変更したいところがあればPRお待ちしております。

tomorrowkey/make-gist-shortcode
https://github.com/tomorrowkey/make-gist-shortcode

IntelliJ Pluginの実行でAndroid Studioを起動する方法

Android Studio向けにプラグインを作ろうと思いますが、IntelliJでプラグインを作り実行するとIntelliJが起動してしまいます。
Android StudioはIntelliJをベースに作られたIDEですが、意外と互換性のない部分もあり、Android Studio向けにプラグインを作るのであれば、実行されるのはAndroid Studioであった方が嬉しいですよね。
今回はどうやったらPluginをAndroid Studioで起動することができるか調べてみました。

※普通のIntelliJ Pluginの作り方はこちら

目次

  • SDKの追加
  • プロジェクトの作成
  • プラグインの作成
  • 実行設定
  • 実行

SDKの追加

Project Structureを表示します。

Screen Shot 2014-02-05 at 18.43.41

IntelliJ Plugin開発をしたことがあるのであれば、このようになっていると思います。
IDEA IC-133.696 はIntelliJ用のSDKなので、Android Studio用のSDKを追加します。
[New…] > [IntelliJ Platform Plugin SDK]を選択します。
IntelliJ Pluginを作る場合はIntelliJのアプリケーションを選択しましたが、Android Studio Pluginを作るときにはAndroid Studioのアプリケーションを選択します。
OSXであれば/Applications/Android Studio.app です。

するとJavaのバージョンを選択するダイアログが表示されます。

Screen Shot 2014-02-05 at 19.22.18

ここでは必ず1.6を選択してください。
Java 1.7(つまりJava7)でコンパイルしたプラグインはAndroid Studioでは使えません。
以下の様なエラーが発生します。

Unsupported major.minor version 51.0 · Issue #2 · ligi/GradleDependenciesHelperPlugin
https://github.com/ligi/GradleDependenciesHelperPlugin/issues/2

OKボタンを押すと無事SDKが追加されます。

Screen_Shot_2014-02-05_at_18_50_08

IDEA IA~ というSDKが追加されていればOKです。

プロジェクトの作成

プロジェクト作成時には、Android Studio用のSDKを選択します。

Screen_Shot_2014-02-05_at_18_52_36-2

プラグインの作成

適当にプラグインを作ります。

Screen Shot 2014-02-05 at 19.03.27

実行設定

IntelliJ Pluginを作る時と同様に新しい実行設定を作成します。
ここでAndroid Studioが起動するように実行オプションを追記します。

Screen_Shot_2014-02-05_at_19_05_35-2

“VM Options” に以下の新しいオプションを追加します。

-Didea.platform.prefix=AndroidStudio

これを忘れると何食わぬ顔でIntelliJが起動するので注意しましょう。

実行

準備は整ったので実行します。

Screen Shot 2014-02-05 at 19.09.11

無事Android Studioが起動し、プラグインも正常に動作しました。

IntelliJ IDEA Pluginの作り方

IntelliJ PluginのHello, World.ということで、Hello Pluginというプラグインを作ってみましょう。
ボタンを押すとHello!というNotificationが表示されるプラグインです。

目次

  • IntelliJ IDEAのダウンロード
  • SDKの設定
  • プロジェクトの作成
  • Actionの作成
  • Notificationの表示
  • 実行設定
  • プラグインの実行
  • Tips

IntelliJ IDEAのダウンロード

Android StudioはIntelliJ IDEAをベースとしたIDEです。
Android Studioではプラグインを作ることができないので、IntelliJ IDEAを使います。

使用するIntelliJのライセンス形態は以下のリンクが詳しいです。

IntelliJ IDEA製品群、ライセンス形態について #jbugj
http://www.slideshare.net/yusukey/intellij-idea-jbugj

03日目 IntelliJの購入方法 #intellij – marsのメモ
http://d.hatena.ne.jp/masanobuimai/20121203

プラグインの開発はIntelliJ IDEA Community Editionでも可能です。
ダウンロードサイトはこちらです。

IntelliJ IDEA :: Download Latest Version of IntelliJ IDEA
http://www.jetbrains.com/idea/download/index.html

今回は以下のバージョンを使います。
IntelliJ IDEA 13.0.2 Build #IC 133.696

インストールは特に迷うことなくすんなりできると思います。

SDKの設定

インストールが完了し、初めて起動するとこのような画面が表示されます。

Screen Shot 2014-02-04 at 19.11.09

まずはSDKの設定を行います。
[Configure] > [Project Defaults] > [Project Structure] を開くとSDK設定画面になります。

Screen Shot 2014-02-02 at 15.00.35

Project SDKがNo SDKとなっているので、[New…] > [IntelliJ Platform Plugin SDK]を選択して新しくSDKを設定します。
ファインダーが表示さるので、”IntelliJ IDEA 13 CE.app”を選択します。

Screen_Shot_2014-02-02_at_15_07_17-2

SDKの設定が完了しました。

プロジェクトの作成

Screen Shot 2014-02-02 at 10.51.35

早速[Create New Project]からプラグインプロジェクトを作成しましょう。

Screen Shot 2014-02-02 at 15.13.23

1つずつ入力していきましょう。
プラグインを作るのでプロジェクトの種類は”IntelliJ Platform Plugin”を選択します。
Project nameには”HelloPlugin”と入力します。
Project locationはプロジェクトを置いておきたい適当な場所を指定しましょう。
Project SDKには先ほど設定したSDKを指定します。

Screen Shot 2014-02-02 at 15.15.20

[Finish]を押すとプロジェクトが作成されます。

Screen Shot 2014-02-02 at 15.19.42

Actionの作成

プラグインのエントリポイントはActionです。とりあえずActionを作成しましょう。
/HelloPlugin/src ディレクトリを選択した状態で[File] > [New…] > [Action] を選択します。

Screen Shot 2014-02-02 at 11.03.07

たくさんの入力項目が表示されました。
1つずつ埋めていきましょう。

Screen Shot 2014-02-02 at 11.05.20

Action ID はプラグインを一意に識別できる値を入力します。”HelloPluginAction”と入力します。
Class Name にはActionクラスを継承したクラスの名前を入力します。パッケージ名+クラス名(例えばcom.example.HelloPluginActionなど)と入力したいところですが、そう入力するとOKボタンを押せないのでパッケージ名は省略して”HelloPluginAction”と入力します。あとでこの値は変更できます。
Name にはActionの名前を入力します。”Hello Plugin”と入力します。
Groups は”Tools Menu”を選択します。これを選択するとToolsメニューに”Hello Plugin”という項目が追加されます。
このアクションはメニューから起動することができますが、Keyboard Shortcutsでショートカットを設定することにより、簡単に起動することができます。”Command + Shift + H”を設定しました。

Screen Shot 2014-02-02 at 15.22.35

アクションが作成されました。

Notificationの表示

ユーザがPluginの機能を呼び出すと、ActionクラスのactionPerformedメソッドが呼ばれます。
Hello PluginはActionが呼ばれるとNotificationが表示されるプラグインなので、ここにNotificationを表示するコードを書きましょう。

Notificationオブジェクトを作成し、Notifications.Bus#notify()を呼び出すことでNotificationが表示されます。
これでHello Pluginの完成です。

実行設定

プラグインを実行するには[Run] > [Run…] > [Edit Configurations…] を選択し、実行の設定をします。

Screen Shot 2014-02-02 at 15.32.18

左上の[+] > [Plugin]を選択して新しく実行設定を作成します。

Screen Shot 2014-02-02 at 15.35.03

Nameに実行設定の名前を入力します。
Use classpath of moduleにHelloPluginが選択されていることを確認します。

Screen Shot 2014-02-02 at 15.37.13

これで実行設定が完了しました。
早速実行してみましょう。

プラグインの実行

[Run]から先ほど作成した設定を選択するとプラグインが実行されます。
いままで使っていたIntelliJとは別の新しいIntelliJが起動します。

Screen Shot 2014-02-02 at 15.43.58

プラグインの動作確認するにはプロジェクトが必要なので、適当なプロジェクトを開きます。

プロジェクトを開いた状態でおもむろにメニューのToolsを開くと”Hello Plugin”というメニューがあります。
どうやらインストールには成功しているようです。

Tools-2

“Hello Plugin”を選択するとノーティフィケーションが表示されました。
表示されている内容はtitleとcontentです。

Screen Shot 2014-02-02 at 15.58.30

さらにショートカットから呼び出しもやってみましょう。
Actionを作るときに指定した”Command + Shift + H”を押してみますが、ノーティフィケーションは表示されません。
もう一度メニューを見てみるとショートカットの表示が”Shift + Ctrl + H”になっています。(バグか?)
改めて”Shift + Ctrl + H”を押すと無事ノーティフィケーションが表示されます。

Tips

プラグインの名前を設定する

[Preferences] > [Plugins]を開くとプラグイン一覧が表示されます。

Screen Shot 2014-02-02 at 22.41.53

さっき作ったプラグインはというと”Plugin display name here”という名前になっています。
プラグインの名前は別で設定する必要がありそうです。

/META-INF/plugin.xml というファイルを開くとプラグインの名前などを設定できます。

nameタグにプラグインの名前を設定します。
venderタグやdescriptionタグなども適切な文言を設定するとよいでしょう。

Actionのパッケージを変更する

さきほど作ったHello Pluginではデフォルトパッケージを使っていました。
そのままでは気持ち悪いので、適当なパッケージに変更してみます。
名前を設定したときと同じく/META-INF/plugin.xmlを開きます。

actionタグのclass属性に実行するアクション名が指定されています。
クラスのパッケージを変更して、この値を変更すればよさそうです。

ショートカットを変更する

これもまた同じく/META-INF/plugin.xmlに設定があります。

keyboard-shortcutタグのfirst-keystroke属性を変更すればショートカットを変更できます。

参考にしたリンク

PluginDevelopment – IntelliJ IDEA – Confluence
http://confluence.jetbrains.com/display/IDEADEV/PluginDevelopment

IntelliJ IDEA: GoogleSearch Plugin for IntelliJ IDEA
http://www.jetbrains.com/idea/training/demos/google_search.html

IntelliJ IDEAのプラグイン開発 – North Ground
http://kxbmap.hatenablog.com/entry/20111102/1320169073

ツイートするIntelliJプラグインを作ったよ – ギークに憧れて
http://hotchemi.hateblo.jp/entry/2013/01/07/013344

IntelliJ IDEAのプラグインを作ろう! – Qiita
http://qiita.com/Vexus2/items/e04a21f00e467b7ac8ad

EOF

svn diffに色をつけて見やすくする

svn diffをしても色がつかずに一色で表示される。
色がつくともっと見やすいので、vimを使うことにした。

1
svn diff . | vim -R -

と実行するとvimが立ち上がって、diffをみることができる。
vimに持ち込めば検索もできるし、ページ移動もできるし便利。

コマンドを覚えるのは面倒なのでエイリアス登録したいが、zshではエイリアスで引数を受け取ることができない。(cshならできるらしいです)
関数登録することで使えるようになったのでメモ

1
2
3
svn-diff() {
    svn diff $1 | vim -R -
}

.zsh に書き込んでおけば

1
svn-diff

1
svn-diff file.txt

とかでdiffが見れるようになる。