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

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

[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?) {

元記事を表示

React Nativeのメリット・デメリット

#はじめに
先日、React Nativeを使った個人開発アプリをリリースしました。
そこで、この記事ではReact Nativeでアプリを開発してみて良かった点、良くなかった点を紹介したいと思います。

「React Nativeを始めようかな」と考えている人の役に立つことができれば嬉しいです。

#メリット❶ 学習コストが少ない
1つ目のメリットは学習コストが少なかったことです。
私は今回のアプリを開発する前は、JavaScriptのライブラリであるReactでWebアプリケーションの開発を行っていました。
React Nativeはコンポーネントの概念などReactと共通している部分が多いので、非常に開発に取り掛かりやすかったです。
Reactを使用してWebアプリケーションの開発を行っている方であれば、React Nativeの学習は参入障壁が非常に低く、取り組みやすいと感じます。

#メリット❷ コードの修正が簡単
2つ目のメリットはコードの修正が簡単なことです。React Nativeは、ホットリロード機能があるため、自分が書いたコードを保存すれば、自動でリロードしてくれま

元記事を表示

firebaseのエラー”Unhandled Exception: PlatformException(sign_in_failed, com.google.android.gms.common.api.ApiException: 10: , null, null)”の解決策

#firebaseを使ったgoogle認証
flutterでfirebaseauthを使ったgoogle認証を実装しようとしたら、
android環境で以下のようなエラーがでた。

“`
E/flutter ( 4434): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)]
Unhandled Exception:PlatformException(sign_in_failed,com.google.android.gms.common.api.ApiException: 10: , null, null)
“`

色々ググってみたら、fingerprintを登録すればいいと書いてあるので、
https://developers.google.com/android/guides/client-auth
の言う通りに下記を実行したけどうまくいかない、、、

“`
keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore
“`

#最終的な解

元記事を表示

1行編集で自分のプロジェクトでDaggerのAnnotation ProcessingをAndroid Studioでデバッグする

Daggerが内部でどんなモデルを作ってどんな処理をしているんだ。。ってなったり、エラーになって、中身のコードを読みにいって、この変数に何が入っているんだろう。。ってなったりすることが稀にあるのでメモしておきます。

appモジュールなどでcompileOnlyでkaptで使うコンパイラの依存関係を追加して、Android Studioが使っていデバッグしたいコードを見られるようにします。プロジェクトでの編集はこれだけです。デバッグでの利用が終わったら消してください。

“`kotlin
dependencies {
// compileOnlyで追加する
compileOnly ‘com.google.dagger:dagger-compiler:2.30.1’
// hiltなら以下など
compileOnly “com.google.dagger:hilt-android-compiler:2.29.1-alpha”
}
“`

デバッグしたいコードをcommand + option + oなど(macでのFind simbolのショートカッ

元記事を表示

ChromeCustomTabsでできること~ダークテーマ対応~

今更の話題ですが、CustomTabsIntentにダークテーマ用メソッドが増えていることに気づき、どういうことができるのかを今一度整理してみようと思います。

ダークテーマ対応のメソッドについては、androidx.browser:browser:1.2.0で追加されています。
https://developer.android.com/jetpack/androidx/releases/browser#1.2.0

検証用のアプリは[こちら](https://github.com/ohmae/custom-tabs-sample)、また、CustomTabsのインターフェースを実装した、というか、それ以外の機能の無いブラウザーのソースコードは[こちら](https://github.com/ohmae/custom-tabs-browser)。いずれもMIT Licenseで公開していますのでご参考まで。

また、CustomTabsの機能の中には説明が全く無い、もしくは、あってもコメント程度で、どうやって使うのか分からないメソッドや、どういう意味があるのか分からないコールバックと

元記事を表示

Flutter入門メモ:開発環境構築編

## 経緯

久々に新規でモバイルアプリでも作ろうかと思い、
一人で趣味で作るレベルだと、Swift・Kotlinでそれぞれ構築するのは掛けられる工数的に現実感が無いので、
1ソース系を試してみようかと。

1ソース系は他にも選択肢がありますが、
React Nativeはなんか好みではないのと、Apache Cordovaは嫌な思い出しかないので、
流行ってるFlutterでやれないかなと、[公式](https://flutter.dev/docs/get-started/install)を見ながら少し試してみる事にしました。
今回は開発環境までのメモ。

## 確認環境

* macOS Catalina
* Essential Essential Phone PH-1 (Android 10)

### 前提

* [Homebrew](https://brew.sh/)がインストールされている。

※今回確認を実施したMacでは、XcodeやIntelliJ、VS Codeが予めインストールされています。

## 手順

Flutterのインストール。

“`shell
$

元記事を表示

OTHERカテゴリの最新記事