ls -al

仮想通貨やプログラミングに関する事などをつらつらと書き綴ります

VibrationCompassを作り上げるために使った技術たち

VibrationCompassで使ったツール・ライブラリなどピンからキリまでまとめ

 こちらのアプリで使った技術を小さなものから大きなものまで全て羅列しています。アプリを実際に触りながら読んでみると参考になると思います。


目的

 Androidアプリ作りについて基礎は勉強したけども、そこから先については右も左も分からない開発者に対して、ここを見て気になったところをググれば、アプリを0から作れる程度の知識を得られるインデックスを提供すること。 詳細は書かずに、ググるのに必要な各種の名前と、一文程度の概要を記述する。

アプリ内で使ってる技術のみを紹介するので、ここにあるものが全てでは無い。例えばRecyclerViewのような重要な要素があったりするが、本アプリでは使用していないので紹介しない。


想定する読者

  • Androidアプリ開発の基礎を学んで、その先の知識を身に付けたい開発者
  • このアプリを作った時の詳細を忘れた数ヶ月後の自分

半分くらいは自分のためのメモ書きです


Androidアプリ作りで使ったツール・ライブラリ

IDE

  • AndroidStudio

まずはこれが無いと始まらない。

言語

  • Kotlin

 以前はJavaで開発されていたが、今から開発するのであればより開発効率の高いKotlinを使うことを推奨する。

UI周り

  • androidx

 互換性を保ちながら、UI周りをいい感じにしてくれるライブラリ。以前はSupportLibraryと言う名前で提供されていた。

  • AppCompatActivity

 androidxに入っている。下位互換性を保ったまま最新の機能が使えるActivity。Activityで何か作るなら大抵はこれを使えば間違いない。

  • Maps SDK for Android

 アプリ内でGoogleMapの機能を使えるようにできるSDK。

  • constraintlayout

 以前はRelativeLayoutとかLinearLayoutとかでレイアウトを組むことが多かったが、今はだいたいこれ一つでサクサク作る。

  • DialogFragment

 Dialog表示を行うために使う。AlertDialogなどは手軽に使いすぎるとメモリリークの危険があるが、こちらなら基本安全。

  • BottomSheetDialogFragment

 BottomSheetの実装に使う。

  • NavigationView

 メニューを作るのに使う。本アプリでは上記BottomSheetDialogFragmentと合わせて、BottomSheetの実装に使っている。

  • BottomAppBar

 画面下に表示されるタイプのAppBar。昨今流行りのノッチデザインでもこれなら指が届く位置にボタンを置いたりできる。以下FloatingActionButtonと組み合わせると、かっこいいデザインにしてくれる。

  • FloatingActionButton

 多くのアプリで見かける、画面右下で浮いているボタン。

  • kotlin-android-extensions

 面倒なfindViewByIdをせずにViewにアクセスできるライブラリ。

  • calligraphy

 Androidで外部フォントを楽にアプリに組み込めるようにできるアプリ。

  • material-design-icons

 Apache2.0ライセンスで使えるアイコンを提供している。本アプリで使用しているアイコンからアプリ自体のアイコンまで、全てここにあるものを使って作成されている。

https://material.io/tools/icons/?style=baseline

  • 源真ゴシック

 本アプリで使用しているフォント。

バックグランドサービス

  • Service

 バックグラウンドで何かしらのタスクを実行するのに必要なもの。Oreo以降からバックグラウンドサービスの扱いが厳しくなり、扱いが若干面倒になった。

  • startForegroundService

 Oreoより前はstartServiceでバックグラウンドサービスを起動できたが、Oreo以降はこちらで起動した上で、制限時間内に通知を表示したりstartForegroundを呼んだりしないとクラッシュしてしまう。

  • Doze

 Mushroom以降から搭載された省電力機能。これにより、スリープ中にバックグラウンドで動作するアプリに様々な制約が発生する。

  • ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

 上記Dozeの影響を受けないようにアプリをホワイトリストに入れてもらうようユーザーにお願いするIntentを発行できるAction。

  • wakelock

 端末をスリープさせないようにするためのlock。これを取得することで端末をスリープさせなくし、スリープ中にも安定して様々な処理を行わせることができる。ただし、上記Dozeで一部例外はあれど基本的にはあまり使えないものになっている。本アプリではスリープ中にも安定してセンシングを行うために上記ActionでDozeを回避し、wakelockを取得しているが、本来であれば可能な限り使わない方向で実装を進めるべきだと思う。

通知周り

  • NotificationChannel

 Oreo以降で導入された機能。全ての通知は予め生成したチャンネルを割り当てる必要がある。ユーザーはこのチャンネル単位で通知の表示・非表示を切り替えることができる。

  • NotificationCompat

 下位互換性を保ちながらNotificationを扱えるようにしてくれるライブラリ。上記チャンネルの影響で通知を表示する際のコードにもバージョン分岐が発生してしまうが、これを使うことでそういった面倒な部分を回避できる。

ハードウェア周り

  • LocationServices

 位置情報を提供してくれるライブラリ。GPSに限らず、各種センサを統合して高精度に位置を推定してくれるFusedLocationProviderClientを使うことができる。また、位置情報を活用した各種の便利な関数(2地点間の距離を計算したり、現在の移動方向を計算したり)を内包している。

  • SensorManager

 各種センサ(地磁気や加速度など)を取り扱うことができる。GPSはここではなく、上記LocationServicesで取り扱う。

  • Vibrator

 端末を振動させることができる。

ビルド周り

  • Android App Bundle

 ユーザーの使用するリソースに絞って配布するapkを最適化することでアプリサイズを削減できる仕組み。

  • bundle-tool

 Android App Bundle形式でビルドしたアプリをインストールするのに必要なツール。apkのときとは異なり、現在の最新のやり方に従うと、こういったツールなしではアプリをインストールすることができない。

https://github.com/google/bundletool

  • applicationIdSuffix

 Gradleで使用することでapplicationIdにsuffixを付けられる。これによって、デバッグ時のアプリとリリース時のアプリのapplicationIdを別にできる。

  • main.java.srcDirs += ‘src/main/kotlin’

 Kotlinを使用する際に、デフォルトで存在するJavaディレクトリ以下ではなく、kotlinディレクトリ以下をソースとして認識させたくなった際のおまじない。

その他

  • play-services-oss-licenses

 アプリ内で使用している各種ライブラリのOSSライセンスを表示するActivityを作ってくれる。

  • play-services-ads

 広告を貼って収益化するのに必要。合わせて、admobというサービスを利用する必要あり。

  • permissionsdispatcher

 面倒なMushroom以降で必要なRuntimePecrmission周りをよしなにしてくれる。

  • SharedPreferences

 アプリの設定値などを保存できる機能。簡易的なデータベースとして扱えないこともないが、そういうことをする場合はSQLiteやRealmを活用した方が良い。