fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

Android

rotationを指定したViewをEspressoでクリックできない件

github.com クローンしてエミュレータなどでandroidTestを実行してみてください。 なぜ? EspressoのViewActions.click()は内部でGeneralClickActionを使ってクリックアクションを作っている。GeneralClickActionを生成する際にいくつか引数を渡す必要がある…

UIテストでDBに入れるデータをテストアプリのassetsとして管理する

モチベーション サーバーとは独立した環境でテストを行えるようにしたかった 必要なデータの種類が結構多いのでテストコードの中でデータを作ってDAOからDBにInsertしまくるというのが面倒くさそうだった OkHttpのMockサーバーから返すレスポンスをテストコ…

頭外音像定位アプリのプロジェクトにandroidx.benchmarkを導入してみた

これです github.com androidx.benchmarkは何となく気になっていたので、冬休みの間の宿題として、数年前に作ったあと放置していたリポジトリをほじくり返してこれに導入してみることにした。何をやっているのかは akihito104.hatenablog.com にだいたい書い…

lottie-androidのgetCurrentKeyframe()の性能を改善するパッチが取り込まれた

github.com モチベーション BaseKeyframeAnimation.getCurrentKeyframe()は、アニメーションのプログレス(0から1の実数で表されるアニメーションの進捗度合い)の値にあうKeyframeを返すメソッド。このKeyframeはsetProgress()の際にキャッシュされている。…

RecyclerViewのようなものを作ろうとしたけどうまくいかなかった

仕事で作ったクラスの構造がよくなかったのでそのその反省を少しまとめてみる。 Adapterとは別にLayoutManager的なものも作る必要があったので、RecyclerViewの構造を参考にして似たようなものを作ることにした。RecyclerViewをなんとかして使えるようにすれ…

lottie-androidの大雑把な処理の流れ

処理時間の性能改善をするとき、いつもはまずどこに伸びしろがありそうかあたりを付けるためにメソッドトレースのFlame Chartを見ている。LottieSampleの場合は大体setProgress()かdrawかそれ以外(プログレスバーとかログ出力)に分かれていて*1、これを見…

lottie-androidの色の補間処理の性能を改善するパッチが取り込まれた

これです github.com ChangelogにはMinor performance optimizationと書かれていることからもわかる通り全然大したことない改善なんだけど、今やっているプロジェクトではこういうのも馬鹿にはできないというレベルで厳しいので取り込んでもらえたのがありが…

lottie-androidで気を付けたいこと(追記あり)

今回のモチベーション デザイナーさんにアプリのスクショを送ったらlottieのパーツの色が少し濃いように見えるという話になった lottie-android: version. 3.0.7 問題のパーツは、透明度の指定されたレイヤーがいくつか重なっているもので、絵が重なっている…

なぜAndroidアプリをMVVMでつくるといいのか

モチベーション Androidでは画面のパーツは全部のオブジェクトへの参照を持つのでリークさせたくない MVCとかMVPはCやPがVへの参照を持つので、とくにAndroidでは管理をきっちりやらなければならない その一方で、ActivityやFragmentのライフサイクルが複雑…

Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option

ある日突然怒られたりするやつです。ライブラリを新しく入れたりアップデートしたときとか。 stackoverflow.com android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { j…

ObservableでないプロパティをKotlinのChannelで定期的に通知させる

コールバックがなくて値が変わった時にそのことがわからないようなプロパティを観測可能にしたい。KotlinのChannelの機能を使ってそれっぽい仕組みを作ってみた。Channelは現時点(kotlinx-coroutine 1.1.1)ではExperimental。 Androidで動画や音楽を再生す…

animatorが終わった時の挙動を変えたかった

AndroidのValueAnimatorでワンショットのアニメーションを実装していたところ、動いている最中に止めたくなった時に 最初の状態に戻したい 最後の状態まですっ飛ばしたい ということがあって少し考えた。 androidのanimation、cancel呼んだら最初の状態に戻…

Retrofitで実装したREST APIのinterfaceクラスを何かで包んで使ったらいい感じ

Retrofitを使って定義したREST APIのinterfaceは何かで包んでからRepositoryとかに渡すのがいい、という話。Retrofitに限らず何か特定ののREST APIにアクセスするライブラリを使うときにも有効ではないかと思う。そのようにするモチベーションを次の通り述べ…

TextViewでNoto CJKを使うと高さが必要以上に大きくなってしまう件

github.com 曰く、縦書きの時に使うような縦長の記号(二文字以上を繰り返すときの記号など)のために高くなっているらしい。issueを読み進めていくとAndroidならTextView.setIncludeFontPadding(false)を使うといいよ!と書いてある。これを指定することで…

たくさんのTextViewをアニメーションさせる

画面に20個ぐらいアニメーションするビューがあってなんとかして60fps出すためにいろいろやったことをメモしておく。 エミュレーターでやってたのが全部悪い(実環境で動かしたらわりとすんなり出た)というオチなので参考になるかはわからない。 前提 Value…

カジュアルにIdlingResourceを使う

UIテストをやる時にMockWebServerを使ってサーバの挙動をモックしていると、レスポンスをちゃんと待ち構えないとテストが失敗することが稀によくある*1 カジュアルにIdlingResourceを使ってカジュアルに待てるようにしたい テストを書くためのハードルを下げ…

Androidでマルチモジュールをやってみているという話

droidkaigiでマルチモジュール関連の発表をたくさん聞いて、やってみたくなったのでやってみている。 github.com データレイヤーを単に外に出すところまではなんとなくできたけどそこから先のところでうまく行かなかったり腑に落ちたり落ちなかったりしてい…

JavaとKotlinが混在するプロジェクトでmockitoをmockKで少しずつ置き換えていく

前提 Javaのプロジェクトに徐々にKotlinのコードを増やしていっている Javaのテストコードではmockitoを使ってモックオブジェクトを作成していた テスト対象のクラスに注入するクラスがKotlinに変わった Kotlinのクラスはmockitoではそのままモックできない…

oboeのコードラボをやった時のメモ

かねてより気になっていたoboeのコードラボをやってみた。とりあえず最後まで流してみたという程度で、詳しい動きは追えていない。そこまでのメモということで何卒ご容赦を。 Build a Musical Game using Oboe IllegalStateException: Failed to find Build …

clearという名前のメソッドをもつViewModelのサブクラスをdalvikvm上で見つけられない人へ

年末、android-ktxをプロジェクトに入れようとして思わぬところで躓いたのでメモしておく。現象としては、Android 5.0以上が動いているエミュレータでは問題ないのに、4.4のエミュレータではアプリが起動するときにクラッシュしてしまうというもので、LogCat…

RobolectricでRecyclerView.smoothScrollToPosition()を呼ぶとテストが進まなくなる(未解決)

ViewPagerの代わりにRecyclerViewを使ってチュートリアルの紙芝居を実装したのだが、進むボタンをN回押してサインアップへ進む画面に行くテストがいつまで経っても終了しない現象が起きた。諸事情によりprintデバッグを使って二分探索的にどこで止まっている…

AndroidのLiveDataとかViewModelについて考えるとりとめのないこと

LiveDataはデータホルダなので、覚えておきたいことを覚えておくために使うのがよい。表示したいデータとか、画面の状態など。私は、イベントやメッセージは受けた人が覚えておくべきものではないと考えているので、イベントバスやメッセージパッシングのた…

今どんな感じでアプリ開発を進めているかまとめてみる

仕事でAndroidアプリ開発をやって行く中で、自分のスタイルができつつあるので整理してみる。今作っているアプリによるところが大きいと思うので別のケースに対応できるかどうかはわからない。いろいろありそうなのでいくつかに分けてまとめることにする。続…

RobolectricでDialogのOKとかCancelとかのボタンを押す

AlartDialogに付いてるOKとかCancelみたいなデフォルトのボタンを押したくなったので調べた。 dialog.findViewById(android.R.id.button1).performClick() positive: android.R.id.button1 negative: android.R.id.button2 neutral: android.R.id.button3 :t…

実行環境でうまく表示できないVectorDrawableについてのメモ

レイアウトエディタのプレビューだと何ともないのに実行環境だと表示が崩れてしまうVectorDrawableのファイルがあったので状況整理のためにメモしておく。 もとのSVGはデザイナさんが作成したものを受け取ったあとSvgToVectorDrawableConverterというツール…

Twitterクライアント`aoeliyakei`のベータ版をリリースした

自分で使うために1年半ほどずっと作っていたTwitterクライアントのβ版をplayアプリストアでオープンベータ版として公開した。FABをフリックしてRTとかlikeとかを行うクレイジーな操作感のアプリである。リポジトリ名はUdonRoadだがアプリとしてリリースする…

ViewPagerの中に入れたImageViewで拡大縮小やスクロールをするためにやったこと

UdonRoadではツイートに添付されている画像を表示させるため、ViewPagerの中にImageViewを入れて使っている。これまでは特に何も考えず表示させていたが、パノラマっぽい横長の画像やマンガの中の小さな文字などを詳しく見るために画像を拡大できるようにし…

ExoPlayerのAudioProcessorを実装する

頭外音像定位のデモためのAndroidアプリを作っている。 github.com akihito104.hatenablog.com 音に独自の効果を加えたいときはAudioProcessorを実装する。AudioProcessorは前段の処理で展開された音データをPCM形式で受け取り、これを変換して返す。返した…

ExoPlayerのAudioProcessorで頭外音像定位するオーディオプレイヤーを作っている

Androidのメディア再生のためのライブラリであるExoPlayerには、PCMになった音データを受け取って処理できるようにするAudioProcessorというインタフェースがある。これを実装したクラスのインスタンスを、プレーヤーインスタンスを作る時にいい感じに渡して…

VideoViewとその周辺のコードを読んだり調査した #m_android_fcr

今作っているツイッタークライアントが、N(Android 7.0)になった辺りからContextをリークさせるようになってしまったのでいろいろと調査した。 コードーディング会にもお邪魔して集中して取り組んだ。主催者の@operandoOSさん、会場を提供してくださったメル…