bouzuya.hatenablog.com

ぼうずやのにっき

Android の lint をためす

Android の API Guides を読んでいる。一応。事前に読んでも気づかないけど、ハマった後に読み返すと、きちんと書いてあることが多い。……とは言え、さきに読むことで防げるならと思っている。

Android の lint の警告を修正している。放置していたら件数が増えてしまった。

Android Studio で Analyze > Inspect Code とすることでも見れるので、もりもり直している。地味に時間がかかるので、増やさないようにしつつ、合間を見て減らしている。

本当は気になった項目を取り上げたいのだけど、きちんとメモしていないので書けない。

疲れている。


Google Play を見ていたら、映画のレンタルが一部 200 円と書いてあった。せっかくだからと『ドクター・ストレンジ』を観ようかと思ったのだけど、最後まで観られそうにないので、諦めてすぐに寝た。

Android Studio の Live Templates を Timber のために使った

Android Studio で Timber のための Live Template を追加した。

Timber は 2017-06-05 に書いた。

Log から Timber へと変えて、おおむね問題なく使えている。ここまでにあった事故はごくまれに String.format の pattern の指定に誤りがあって死ぬくらいだ。 "%s" を指定しておけば、まあ起きない事故だし、 Log でも String.format を併用していれば起きる事故だ。

ほかにも気になった点がある。 Android Studio での補助だ。

Log のころは logd<Tab> のような入力で Log.d("<methodName>: "); と補完されていた。これを Timber.d("<methodName>: "); と手動で入力するのは意外と面倒だ。これが気になった。

Android Studio ではこの機能を Live Templates と呼んでいるようだ。 Live Templates は任意のものを設定できる。

Android Studio > Preferences > Editor > Live Templates と進めば設定できる。詳細は書かないが↓のような形で設定する。

timber.log.Timber.d("$METHOD_NAME$: $format$", $args$);

Android Studio のドキュメントがどこにあるのか分からないので、 IntelliJ のものを貼っておく。 IntelliJ IDEA 2017.1 Help :: Live Templates

Android Studio 含めて、まだまだ習熟していないなあ。

今週の目標に書いた Dagger 2 や MVP などにまったく手をつけられていない。

Android で SimpleDateFormat の X が動かなかった

AndroidSimpleDateFormatX (ISO 8601 time zone) が効かない事象にあたった。

java - Android parse String to Date - unknown pattern character ‘X’ - Stack Overflow

ドキュメントには API level 1 から使えるとされている。

https://developer.android.com/reference/java/text/SimpleDateFormat.html

ただ、実際には動かなかった。 Java 6 にないからだろうか。

https://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

Java SE 7 からはある。

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

手元の unit test では動くが、実機で動かしてみるとおかしくなるので、頭を抱えた。

結局、強引に SimpleDateFormat を継承し、 formatparse をオーバーライドした。

Z (RFC 822 time zone) を使いつつ、+00:00Z の変換を追加したり、 : を足すなどした。 Stack Overflow にある方法 を参考に、独自で書いた。

そも java.time を使いたいところなのだが……。まあ使えないのだから仕方ない。

Android O からは使えるのかもしれない。

ABP (backport for Android) があるみたいだけど、大丈夫だろうか。作者は例によって Jake Wharton さんだ。

JakeWharton/ThreeTenABP

試していない。

Android アプリでテキストサイズには sp を……

Android アプリ開発。

textSize は sp で指定するように Android Studio から警告される。

画像まわりもぜんぜん分からない。ドキュメントを読んだ範囲で期待する挙動じゃないことがままある。拡大縮小などで何をどう指定するのかピンと来ていない。


髪を切った。

Android の Logger ライブラリ Timber をつかう

Android 向けの Logger である Timber を試した。

JakeWharton/timber

Square, Inc. の Jake Wharton さんがつくっている。 Android 関連でよく出てくる名前だなあ。有名な人なんだろうな。

2017-05-22 に出てきた square/picassosquare/retrofit も Square だった。

2017-05-20 に出てきた JakeWharton/butterknife もこの人だった。

さて。 Timber は AndroidLog クラスの上につくられているらしい。機能としては Tree を差し替えることでログの出力方法を変えられることと String.format を内蔵していること。

標準の DebugTree だと TAG を自動で設定してくれる。↓のような定型句が AndroidLog にはある。書けばいいのだけど、面倒だ。

private static final String TAG = MainActivity.class.getSimpleName();
// ...
    Log.d(TAG, "foo");

Timber だと↓のように、それがなくなる。

    Timber.d("foo");

String.format に対応しているので、↓のような埋め込みもしやすい。

    Timber.d("(%dms)", ms);

全体での On/Off は Application クラスで Timber.plant() するかで決まる。 plant で好きな Tree を設定するだけ。

public class MyApplication extends Application {
    @Override public void onCreate() {
        super.onCreate();
        if (BuildConfig.DEBUG) {
            Timber.plant(new DebugTree());
        }
    }
}

Tree を継承したクラスも定義できる。↓のような記事もある。

ほかにも紹介記事。

追記: 2017-06-08 に補足で Android Studio で Live Templates を設定して Log と同様に補完を効かせる方法について書いた。

2017-W22 ふりかえり

2017-W22 をふりかえる。

2017-06 の目標

  • bbna あるいは別の Android アプリに知見を活かす
  • Haskell / Rust を日常に取り込んでいく

Android 。 bbna は Presenter を導入しはじめた。「知見を活かす」というよりは試せなかった分を試している。また別で書く。

Haskell / Rust 。普段から使っている小さなシェルスクリプトHaskell で書き直している。用途として適当でない気もするけど、こういうところからはじめるのが良いと思っている。

2017-W22 の目標

Android のテストは、テストしやすい構造はどういうものかを模索している段階。

今週の記事

Android アプリを開発している。画像の配置などをはじめている。

Retrofit のエラーの扱いを書いた。

つくったもの

2017-05-29/2017-06-04

bbna は Presenter の導入に着手している。

bs-code は slack への投稿機能を追加している。

その他

忙しい。先週・先々週に続いて、今週も土曜日に出勤している。 2017-05 が終わり、 2017-06 に入った。まだ 1 ヶ月以上は続く。

人間椅子』と『悪魔の紋章』を読んだ。「実用書と漫画以外もたまには読んだほうがいいかな」などという気まぐれ。感想は Twitter に書いた。

2017-W23 の目標

  • Android アプリ開発で気づいたことを書く
  • Android の Test のことを調べる
  • Android での MVP: Model-View-Presenter のことを書く
  • Android のライブラリ Timber のことを書く
  • Android のライブラリ Dagger 2 のことを調べる

通院と画像配置

通院。歯医者と腰痛の治療へ。歯医者は特に問題ないらしい。そうか。腰痛はストレッチを続けていくらしい。そうか。


Android 。繰り返しのない背景画像をスクロールできる場所に配置しようとしてハマった。ImageViewscaleTypecenterCrop にするだけでいけそうだった。実際にやってみると、 ScrollView の高さに引きずられて、崩れてしまう。そこで XML では layout_height0dp にしておき、 Java の側で設定した。スマートじゃない気がするけど、動いたら妥協するくらいに疲れている……。なかなか思った通りにいかないものだ。