Android関連のことを調べてみた2020年12月03日

Android関連のことを調べてみた2020年12月03日
目次

iOS/Androidアプリにおける状態管理の複雑さにリポジトリパターンを拡張して立ち向かう

# 前置き

これはiOS/Androidに代表されるモバイルアプリにおいて、複雑になりやすい状態管理をリポジトリパターンの解釈を広げて解決しようという記事です。
今回説明するのはアプローチの一つなので、あくまでたくさんある意見の中の一つとして聞いて頂けると幸いです…!

※記事内で紹介するコードは基本的にはKotlinで書いていますが、Swiftで書いてもほとんど変わらない部分を題材にしているため適宜読み替えることは出来ると思います。

# iOS/Androidアプリにおける複雑さはどこから来るのか

最近のモバイルアプリは肝心なロジックはだいたいサーバーで持っていて、アプリはJsonなどのデータを受け取って表示するだけになっていることが多いも思います。
ただサーバーから渡されたデータを受け取って画面に表示するだけという、とてもとてもシンプルなことをしているはずなのにいつもバグに悩まされたりするのはなぜでしょうか?

## 状態管理の難しさ

私は**iOS/Android等のモバイルアプリの複雑さの半分以上は状態管理から発生している**と思っています。
サーバーから取得したデータ

元記事を表示

[Android]GitHub Actions + gradle play publisher(GPP)でStoreに自動デプロイする

GitHub Actions + [gradle play publisher(GPP)](https://github.com/Triple-T/gradle-play-publisher)でStoreに自動デプロイする設定を説明する。
fastlaneなどでPlay Storeにデプロイした経験がある人向けの説明。初心者向けではない。
大体、公式のREADMEどおりに設定すれば良いが、少しだけハマりどころもある。

## 構成
アプリのソースコードはGitHub上に公開する。
第三者によるアプリのビルドは許可するが、Store上の自分のアプリを上書きする形でのアップロードは禁止する。

なので、keystore[^1]、keystoreのパスワードなどの情報は、リポジトリ管理対象のファイルには含めない。
Storeアップロードに使うGCPの認証情報もファイルに含めない。

Storeのアップロード先は内部テストトラックで、アップロード時点で完全公開とする。
アプリの形式はapkでなくaabとする。

## gradle play publisherの設定
### 事前設定
grad

元記事を表示

Pixelシリーズの尿液晶を改善する

# 概要

– GoogleのPixel4a(5G)を購入しました
– Pixelシリーズはディスプレイに有機ELを採用しているようで全体的に黄色味がかっています
– どうにか液晶のような青白い系の色味にしたいです
– 液晶じゃないのに尿液晶とはこれいかに。

# 解決方法

– [Screen Barance](https://play.google.com/store/apps/details?id=co.uk.quickdoc.screenbalance)をというアプリをインストールします。
– アプリを立ち上げるとOSから許可を与えるかどうか聞かれるので、与える方向で回答します
– アプリが起動したら画面の下の方に4つスライドバーがあります
– そのうち一番上のスライドバーを左右にスライドすると色味が変わります
– スライドさせると色味の名前が表示されますが、「Shade」か「Daylight」あたりが青白い寒色系の色味になります

# 紹介動画

– [Screen Balanceの開発元による紹介動画](https://youtu.be/0zi8LjYbEC4)

元記事を表示

Droid君との歩き方

この記事は大阪工業大学[Advent Calendar](https://adventar.org/calendars/5332)の3日目です。

#最初に読んでください\_Droid君との歩き方\_IC・IM・IN・IS

新しいものに触れる際に大変なのは**環境構築**とそれの**学び方**だと思います。
そこでこの記事では、これまでの経験から個人的に良かったなと思ったAndroidの学び方について書いていこうと思います。

#学び方

ここではAndroidでのリスト表示を学んでいく過程を説明することで、Androidの学び方を伝授しようと思います。

##調べ方を知ろう

まず初めに学ぶにあたってとても大切な調べ方について。
例えばAndroidでリスト表示の仕方がわからないとき「Android リスト表示」のように**日本語で調べる**かと思います。
しかし、それを一度**英語で調べるだけで有益な情報を見つけやすくなります**。

具体的には「how to display list in android」等で調べると良いです。

##質問サイトを積極的に見よう

調べ方の次

元記事を表示

Android StudioでA problem occurred configuring project ‘:app’.が出た時の対処法

#経緯

Android Studioで他の誰かから受け取ったプロジェクトを開いてみると、

A problem occurred configuring project ‘:app’.

というエラーが表示されることがある。

すごい簡単に解決できるエラーなのに、全然解決方法が出てこなかった。

#解決方法

「local.properties」を開いて、
ndk.dirのパスを直す。

これだけ。

sdk.dirのパスは既になっており、「Sdk」で終わっているはずなので、
ndk.dirはSdk/ndk-bundleにする

もっと具体的に書くと、
ndk.dir = “hogehoge/Local/Android/Sdk/ndk-bundle”
sdk.dir = “hogehoge/Local/Android/Sdk

とするだけ。

sdkのパスはAndroid Studioでプロジェクトを開いた際に自動で変更してくれるが、ndkのパスは変更してくれない。

だからややこしかった。時間がかかった。

どうせなら両方直してくれればいいのに。

元記事を表示

[Android]Gradleの依存関係のimplementation/apiの使い分け

Gradleの依存関係のimplementation/apiの使い分けについて。
[Android公式](https://developer.android.com/studio/build/dependencies?hl=ja#dependency_configurations)の説明は、正しく詳細なのだが、中々理解できなかった。
ようやくimplementation/apiの使い分けが腑に落ちたので、まとめる。

最初は、ユースケースで考えた方が分かりやすいと思う。

– ライブラリモジュールの場合
– ライブラリのAPIに使う依存ライブラリ -> “api”
– そうでない依存ライブラリ -> “implementation”
– アプリモジュールの場合[^1]
– “implementation”を使う。”api”でも動作変わらないが、あえて使う理由はない。

この後の説明長いが、ここを抑えておけば、読まなくても害はなさそう。

## ケーススタディ

自作ライブラリに、以下のAPIがあるとする。

“`kotlin
data class User(val id:

元記事を表示

Dagger Hiltの@InstallInチェックを無効にする

# 概要

[Dagger Hilt](https://developer.android.com/training/dependency-injection/hilt-android?hl=ja)では「Hilt Component」という形で予め用意されたComponentを使用することでComponentの構造に悩むことが無くなり、AndroidでのDI(Dependency Injection)をよりシンプルに利用可能です。

Hiltでは、`@InstallIn`アノテーションでModuleをどのHiltコンポーネントにインストールするかを指定します。これにより、どのコンポーネント階層以下でBindingを利用できるかを制御できます。そのため、`@InstallIn`アノテーションを付け忘れると正常にBindingが提供されずエラーになります。

# Dagger Hiltの`@InstallIn`チェック

Hiltは、デバッグを容易にModuleに`@InstallIn`アノテーションをつけ忘れた場合にエラーを発生させビルドを失敗させます。

例として次のようなModule

元記事を表示

Unity as a LibraryによるUIネイティブ化

こんにちは、mizogucheです。2015年9月にクラスターに入ったのでもう6年目です。

この記事は[クラスター Advent Calendar 2020 – Qiita](https://qiita.com/advent-calendar/2020/cluster)の2日目の記事です。

# Unity UIでの課題
UnityでUIを実装すると普段使っているネイティブアプリの操作性と違った触り心地になります。

ネイティブアプリで簡単に実装できるUIの操作性をUnityで再現するコストはかなり高く、たとえばiOSにおける戻るジェスチャ、Androidにおけるバックボタンなど、OS固有の操作はネイティブUIだと何も実装しなくても実現できる[^1]一方で、Unityではそれぞれのプラットフォームごとに独自に実装していく必要があります。

感覚的なものでいうと、スクロールビューのスクロールの感触なんかもUnity、iOS、Androidでそれぞれ違うので、Unity製のアプリだと他のネイティブアプリと比較して触り心地がよくないのが正直なところです。

Unityのランタイムの起動に時

元記事を表示

開発者ごとでなく、プロジェクトごとにFlutterのバージョンを管理する

Flutterのアップデート、まだまだ激しいですよね。
以前チーム開発していた時も、

– **他の開発者とのFlutterのバージョン違いによりAPI定義が異なりエラーの嵐→無駄なコミュニケーションの発生**
– **自分のPCのFlutterのバージョンを上げてしまったところ、ビルドできなくなったといった報告の対応**

など、プロジェクトごとでなく開発者ごとにFlutterのバージョンを管理しているために起きてしまう問題がいくつかありました。また、OSSや個人開発などでも使用するFlutter SDKのバージョンを固定したいこともあるかと思われます。

**本記事では、開発者ごとでなく、プロジェクトごとにFlutterのバージョンを管理する方法を紹介します。**

# FVMを用いる場合

FVMはFlutter SDKバージョン管理ツールです。

https://github.com/leoafarias/fvm

導入についてはこちらの記事が日本語で分かりやすいので、説明は割愛します。

https://qiita.com/Kurusu_ima/items/2dfd067f6

元記事を表示

AndroidStudioメソッドのパラメータを確認する方法

#動機
プログラミング学習していて、ふと気になったことが。
メソッドを入力した時に表示されるこれ。何をパラメータとして持つのか、ぱっと見で分かるので便利。
![2020-12-01 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599059/960122a5-4b55-e487-1471-b8643f928220.png)
しかし、入力し終えると直ぐに消えてしまう。
どうにかしたいものだ。調べると、解決策は見つかった。
![2020-12-01 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599059/4977c662-45df-ce29-a604-91d8199fefcb.png)
#解決策

調べたいメソッドにカーソルを合わせて「Ctrl + p」以上。※Macの方は、「Cmd + p」
また、他にもViewタブから「Parameter Info]によっても可能だ。ちなみに、その横にショートカットキ

元記事を表示

【Android】Single ActivityにおけるsharedViewModelのスコープについて【Koin】

# はじめに
KoinでViewModelをインジェクトする際には、`viewModel()`と`sharedViewModel()`の二つのやり方がある。
僕が担当しているアプリでは基本Fragment-ViewModelで一対一の関係になっているのだけど、ViewPagerを使用していたりするとViewModelをFragment間で共有したい場面が多くて、そういう時に`sharedViewModel()`が大活躍してくれる。

ただ、今までなんとなく`sharedViewModel()`を使ってきてしまったが故に、こないだちょっと沼にハマってしまった。
今回はそんな`sharedViewModel()`で共有したViewModelのスコープについてご紹介。

## sharedViewModelとは?

前述の通り、ViewModelを**Fragment間で**共有できるViewModelをインジェクトする。
と、今まで思っていた。

というのも実はこの`sharedViewModel()`、インスタンスを共有するスコープがデフォルトでActivityになっているらしい。
中の

元記事を表示

Androidの自作ライブラリの処理実行時にNoClassDefFoundErrorが起きる

## 概要

– 自作ライブラリの処理の実行時に、NoClassDefFoundErrorが起きる
– 直接の原因は、自作ライブラリをMavenリポジトリにデプロイする際に、自作ライブラリが依存しているライブラリの情報が欠落すること
– 依存ライブラリの情報が欠落するのは、Maven Publishプラグインの設定が間違っているから
– Android公式のMaven Publishプラグインの設定にしたら問題は解決した
– https://developer.android.com/studio/build/maven-publish-plugin?hl=ja
– 特に理由がないなら、公式の設定におとなしく従っておきましょう

## 前提

アプリX、自作ライブラリY、外部ライブラリZがある。
アプリX -> 自作ライブラリY -> 外部ライブラリZの方向に依存関係がある。
自作ライブラリYも外部ライブラリZもMavenリポジトリにホストしている。

## 遭遇したこと

アプリXのビルドは通るが、自作ライブラリY内の外部ライブラリZを使う処理の実行時に、NoClassDefF

元記事を表示

もしあなたが急にAndroidアプリを業務で作るはめになった場合の選択肢(2021年初頭版)

本記事は[Android Advent Calendar 2020](https://qiita.com/advent-calendar/2020/android)の2020/12/01分です。

初っ端ということなので、2020年末と2021年頭でのAndroidエンジニアとして初めて業務でやる場合に抑えておいたほうが良い最低限の部分を書いていこうと思います。(ツッコミ待ちです)

# 対象
– 2021年3月ぐらいまでに **!!業務!!** でAndroidアプリを作らされる事になった可愛そうな人が居たとします
– この人は手続き型言語でオブジェクト指向プログラミングができる知識があり、Androidアプリもなんとなく趣味で作ったこともあるぐらいのレベル感です~~(なので上長からいきなりお前Android担当なと言われた)~~
– 最低限のAndroidアプリの作成の知識はあるものとします(画面の表示にはActivityがいるよとかは書かない)
– ゲームは対象外です
– 業務でAndroidアプリを作ることを想定しています(≠趣味)
– toB toCどちらを作るにしても必

元記事を表示

Android Studioおすすめプラグイン

# はじめに
今回はAndroid Studioのおすすめプラグインを紹介します。

# Save Actions
[Save Actions](https://plugins.jetbrains.com/plugin/7642-save-actions)

こちらは自動保存時に自動でコード整形やimportの最適化をしてくれます。
Android Studioのコード整形はcommand+option+Lなのですが、忘れることが多いです。
また使用しないimportを消すことはできません。

そんな時にSave Actionsはまじで役立ちます。
特にチーム開発の時にこの人のこのインデント気に入らない、import消し忘れが治らないなどなどの悩みがなくなります。

# Nyan Progress Bar
今回はこれが紹介したかっただけです。

[Nyan Progress Bar](https://plugins.jetbrains.com/plugin/8575-nyan-progress-bar)

ビルド時やプロジェクトの読み込み時に猫が走ってくれます。
とにかく可愛いニャンニ

元記事を表示

GNSS(GPS)と「高さ」の話

# はじめに

GNSS(GPS)を使った位置取得は、人類の大いなる進歩です!
我々はもう道に迷わないのです。([NEVER LOST AGAIN グーグルマップ誕生](https://www.amazon.co.jp/dp/B07K76331B/) なかなか面白い本でした。)
しかしながら、地図で自分の場所がわかって便利という以上のことを考えるためには、様々なこの分野特有の背景知識を必要とします。
本稿では、「高さ」というものに注目して、なんとなく常識だと思っていた概念の裏を見ていきましょう。

# 「高さ」という概念について

皆さんは、高さという概念について、どのようにとらえていますか?
富士山は3776mだし、東京タワーは333mでスカイツリーは634mという有名な数字は出てくる人が多いでしょう。
富士山の数字は標高の数字で、東京タワーやスカイツリーは所在地の標高からの差分なので、若干富士山の数字とは基準が違うことになります。

この基準というところが高さを考えるうえで重要になってきます。

ちなみに太陽系で最も高い山は火星のオリンポス山で、地表からの高さは実に約27000mだ

元記事を表示

THETAの姿勢を利用し、スマホなし設定を可能にする

この記事は [RICOH THETA Advent Calendar 2020](https://qiita.com/advent-calendar/2020/theta) の初日記事です。
このアドベントカレンダーはどなたでも参加できます(コミュニティに入る必要はありません)
まだまだ隙間が開いています、THETAプラグインに限らずRICOH THETAにまつわる色々なことで参加して頂けると嬉しいです!

## はじめに

リコーの @KA-2 です。

弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA VRICOH THETA Z1は、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。

今回は、カメラ本体の姿勢を利用してRICOH THETA Z1の操作系を拡張します。RICOH THETA

元記事を表示

【Android / Kotlin】RecyclerView セルのクリックイベント(画面遷移+データ受け渡し)を実装

# はじめに
リサイクラービューでセルをクリックしたときの処理を実装した際に学んだことを記事に残します。
この記事は以前書いた記事(↓↓)に続く内容となっております。
[【Android / Kotlin】RecyclerView で一覧画面を実装](https://qiita.com/tkmd35/items/0602ef84aa098e1e4f63)

# サンプルアプリの概要
以前の記事で作成した書籍一覧画面のセル(行)をクリックすると書籍情報を表示する画面に遷移させるというもの。
※ 一覧に全て同じサンプルデータを表示していることと、同じ要素を異なるフラグメントで少し表示を変えているだけです。あくまで学習用のサンプルアプリ作成しただけなので各所至らない部分がありますがお許しください。

**一覧画面**

**セルクリ

元記事を表示

Identifying Performance bottlenecks in runtime of TensorFlow Lite models using Android Trace Api

In this article, we will introduce Android Tracing tools to capture internal events from the TensorFlow Lite interpreter which can help us identify potential issues in performance of the models.

This article assumes you know how to use Android studio to build and run apps on mobile devices.

## Discussion Topics

– What is System Tracing in Android?
– Different tools to capture Trace
– How to record TensorFlow Lite events
– How to use the System Trace data

## What is System Tracing in Android?

元記事を表示

MVVM+Repositoryのアーキテクチャを使っています②

#この記事は
・前回([MVVM+Repositoryのアーキテクチャを使っています①](https://qiita.com/mi_iroha/items/9d4da0c1a4f76864eaab))の続きです。

#もくじ
今回はViewModelとRepositoryの部分について書いていきます。![スクリーンショット 2020-11-29 212627.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/e1257630-2660-6b81-efc4-1573b3948adf.jpeg)
②はViewModelから非同期処理で`async{}.await()`や`withContext()`を使ってRepositoryにある関数を呼び出します。Repositoryにはデータベース(今回はFirestore)にアクセスする処理が直接かいてあり、`resume()`という関数で処理の結果を再びViewModelへ返します(⑤に当たる)。便宜上少しだけ⑥のRxRelayやLiveDataについて

元記事を表示

【Android】TabLayoutのIndicator色をtabごとに設定

`setSelectedTabIndicatorColor`が非推奨になったので、`addOnTabSelectedListener`を使用。

“`MainActivity.kt
tab_layout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabReselected(p0: TabLayout.Tab?) {}
override fun onTabUnselected(p0: TabLayout.Tab?) {}
override fun onTabSelected(p0: TabLayout.Tab?) {

元記事を表示

OTHERカテゴリの最新記事