きょこみのーと

技術に関係ないほうのブログ

AnnictのAndroidアプリを久しぶりに機能追加などした(技術編)

だいぶ間が空いてしまったが、前回の続きで技術的な話を書いていきます。

Android開発久しぶりなのでリハビリって感じです。

kyokomi.hatenablog.com

ライブラリ更新

久しぶりだったのでライブラリ等を全部最新にupdateしました

  • com.android.support -> androidx
  • android.arch -> androidx

Gradleのバージョンとかも上げたりしてたので、なんか丸1日くらいかかった記憶です。

Activity を Fragment化しBottomNavigationを導入

f:id:kyokomi:20191123160832p:plain

Activityで全部処理してたんですが、JetpackのNavigationを見て今期アニメ一覧をBottomNavigationで実装するためFragment化しました。 もともと単純なRecyclerViewだったのと、ViewModelなどしっかりArchitecture componentsに従って作ってたのでそんなに大変ではなかったです。

ハマった点としては、 KotterKnifeを使っていたのですが以下の問題がありViewBindingを使うように改修しました。

ただし、一度、findViewById()で見つけたViewはキャッシュ(メモ化)して、それ以後はキャッシュしたViewを返すようになっています。 Fragmentでは、Viewを生成するのは一回だけとは限りません。

FragmentではKotterKnifeをうかつに使えないという話 - Qiita より

Debug/Canaryアプリのリボン

f:id:kyokomi:20191123160811p:plain

開発用、リリース前確認用アプリに gradle-android-ribbonizer-plugin でリボンをつけていたが、CIだとうまく動いてなかったりでした。(これは自分の設定が悪い説ですが) またライブラリを最新にしようとしたら、かなり古くにつくってからメンテされていない様子でした。

github.com

なので代わりのものを探し、easylauncherを導入しました。

github.com

とりあえず動かすまでが、とにかく楽でした。色々位置とかも調整できて便利そう。

Android Architecture components

Jetpackという呼び名が存在する前?のAndroid Architecture components は、ほぼそのまま移行できて助かりました。 RoomやPagingやViewModelなど。

developer.android.com

flipperを導入

fbflipper.com

roomの保存先であるSQLiteのdatabaseを見たかったので。

基本的にGetting Started見てやればいいんですが、noopでいい感じにreleaseビルドにいれなくて済むのか〜と思ったら、すべてのプラグインには対応してないということだったので、以下を参考に対応しました。

Databaseはこんな感じでみれる便利。

f:id:kyokomi:20191123161854p:plain

Networkはこんな感じでみれる便利。

f:id:kyokomi:20191123162200p:plain

Aboutページ、ライセンス表記

Aboutページとライセンス表記を com.mikepenz:aboutlibraries で作っていたのですが、minifyされた際にうまく生成できておらず、設定が面倒すぎて挫折しました。

github.com

簡素ですが、導入も楽なので ライセンスは play-services-oss-licenses を導入しました。

github.com

Aboutページは、自分で書いてもまあ良かったんですが com.github.medyo:android-about-page で十分ほしいものが楽に作れそうだったのでで導入しました。

github.com

CI周り

BitriseのCIとか設定が生きていたので、ストアへの公開が自動化されてて過去の自分に感動しました。

www.bitrise.io

もし今からやるならGithubActionsとかなんですかね〜?(知らないけどw

おわり

大体こんな感じでした。

Jetpackデファクトな感じでAndroidアプリ開発がだいぶ楽にできそうでいい時代になったな〜と思いました。