Android関連のことを調べてみた2023年01月13日

Android関連のことを調べてみた2023年01月13日
目次

AndroidでNavigationを使ったDeep Linkの実装Part4

# 初めに
今回は、Intentに格納したDeepLinkを利用して画面遷移する方法を紹介していきます
### 本文
残りの作業はとても単純で、`intent`から`get`した後に明示的にキャストすることで型を`String`にしてあげた後に`toUri()`をして`navController`に対象のDeepLinkを渡してあげるだけです
“`kotlin
val linkUrl = intent.extras?.get(PAYLOAD_NAME) as? String
val deepLink = linkUrl.toUri()
val navHostFragment = suppoirtFragmentManager.findFragmentById(R.id.navigation) as NavHostFragment
val navController = navHostFragment.navCotroller
navController.navigate(deepLink)
“`
### 最後に
今回は、Intentに格納したDeepLinkを利用して画面遷移する方

元記事を表示

【Android】テストを書くときに使う@get:RuleとかRuleChainってなんぞよ

# はじめに

Androidでインストゥルメント化単体テストを作成するとき、`@get:Rule`を使ってテストを書いたことはありませんか?

“`kotlin
@HiltAndroidTest
class AppTest {

private val hiltRule = HiltAndroidRule(this)
private val composeTestRule = createAndroidComposeRule()

@get:Rule
val rule: RuleChain = RuleChain
.outerRule(hiltRule)
.around(composeTestRule)

}
“`

この、`@get:Rule`や`RuleChain.outerRule().around()`がよくわからない状態で、今まではテストを書いてきました。

ということで今回は、`@get:Rule`とかの**Rule**ってなんぞやということをまとめていきたいと思

元記事を表示

新しくbuild.gradleで宣言するcompileSdkExtensionとは?SDK Extensionsとは?

基本的には以下のドキュメントどおりなんですが、ちょっとややこしい部分があってコード読んだりしたので紹介しておきます。

https://developer.android.com/guide/sdk-extensions

OSのバージョンによらずに、Androidのシステムをアップデートできるようにしていこうという取り組みのようで、そのアップデートした部分をアプリから使えるようにしたいということのようです。

例えば、ACTION_PICK_IMAGESはAndroid 13 (API level 33で追加されたものだが、Android 11以上でR Extensions Version 2のSDK extensionsが入っている端末でも使えます。

## 基本

例えばACTION_PICK_IMAGESを使いたければ、ACTION_PICK_IMAGESはR Extensions 2であるとドキュメントからわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27388

元記事を表示

【Android】Active Build Variantを切り替えたときにエラーが発生した時のまとめ

# エラーが発生した時の状況

ビルドバリアントが4つ設定されていた。

“`
– freeDebug
– paidDebug
– freeRelease
– paidRelease
“`

`freeRelease`を選択した状態で、**Run ‘ExampleScreenPreview’** を実行した。

次のウィンドウが表示された。

![名称未設定のデザイン (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/10cf5710-3a00-90d4-f977-14c801bb5716.png)

**Fix**をクリックした。

**Select Signing Config**ウィンドウで、**debug**を選択し、**OK**をクリックした。
そして、**Run**をクリックした。

![名称未設定のデザイン (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/

元記事を表示

[Android] CustomViewに独自の属性を作る

## はじめに

AndroidのCustomViewに専用の属性を用意しonDrawの中で使うよという話。

サクッと実装したい内容だけどいっつも忘れてるところからスタートするので記事にしました。
あとkotlinで書いてる記事も少ないように感じたので、何か誰かの役に立てれば…
(JetpackCompose時代に今更感はある)

## CustomViewクラスを作る

“`kotlin
class SampleCustomView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
/* これから実装 */
}
“`

これはテンプレなので特別書くことはありません。

## attrs.xmlを作る

独自に作りたい属性を定義します。

とりあえずStringを2つ作ることにします。

“`xml

元記事を表示

JetpackComposeでCanvasにImageを描写したときにBlendModeの挙動が想定外になる原因は、AndroidViewの時と同じ

ということを納得するために`JetpackCompose`の`Canvas`周りのコードリーディングをしました。
その備忘録です。

[この投稿を使用している、DroidKaigiの資料のリンク](https://speakerdeck.com/kkkkan/droidkaigi2022-jetpack-composewoyong-ite-canvaswozhi-jie-hong-ruyounakonponentowozuo-cheng-surufang-fa?slide=109)

# 背景 (長いので読まなくていいです。)
[2022/10にあったDroidKaigiで`JetpackCompose`の`Canvas`をテーマに登壇しました。](https://droidkaigi.jp/2022/timetable/363352)
その際に、「画像を描写した時のBlendModeの挙動が定義と異なっているように見える部分がある」、「何もかもが不明」、「何かご存知の方がいらっしゃったら教えて欲しい」としてあった部分がありました。
そこについて、解決法を教えてくださった方があり、なの

元記事を表示

OBD2から自動車のセンサーデータを抽出する

自動車関係のスマートフォンアプリを作っていて、スマホの各種センサーの精度を測ってみたいと思ったためです。手軽に車からデータを抜き出す手段として、OBD2端子にBluetooth端末を繋ぎ、スマートフォンとペアリングしてロギングすることにしました。
下記のQiitaが大変参考になりました。感謝を込めて。

https://qiita.com/naohikowatanabe/items/39f14aacb06d04253d17

# この記事でやること
– 自動車に接続するOBD2-Bluetooth端末の紹介
– OBD2-Bluetooth端末を自動車に接続する
– OBD2-Bluetooth端末をAndroidとペアリングする
– Androidアプリで自動車のセンサーデータを見る
– 自動車のセンサーデータをCSV出力する

# 手順
## 使ったOBD2-Bluetooth端末
↓こんな感じのものを使います。Amazonで「OBD2 Bluetooth」と検索すると出てきます。どれもこれも胡散臭いですが、私が使った2つ(2,000円、5,000円)はどちらも使用できました。

元記事を表示

Androidのパーミッションについて

# Androidのパーミッションとは?
Androidのパーミッション(権限)とは、端末の中の色々なデータに対してアクセスを保護してプライバシーを保護するたのものです。昨今、スマホは個人情報の塊のようなものです。
* アドレスブック(特に電話番号)
* SMSのメッセージ
* 何らかのログインID、パスワード
* 等など・・・

これらが自由に参照可能だと、勝手に情報が盗まれて見ず知らずのサイトに送られてしまいます。それらを制限するのがパーミッション(権限)です

## パーミッションの種類
パーミッションにどんなものがあるかですが、公式サイトではあまりきちんとまとまったのがないようです。唯一、APIリファレンスに説明があります。(結構、たくさんある)
[Manifest.permission](https://developer.android.com/reference/android/Manifest.permission)
ここにStringの定数として定義されています。例えば、ネットワークにアクセスするパーミッションであれば
“`
Constant Value: “and

元記事を表示

【Android】ビルドバリアントに合わせて同じコンポーザブルを作ったら、Conflicting overloads…というエラーが出たときのまとめ

# エラーが発生した時の状況

**build.gradle**にあたらしい**productType**と**productFlavors**を追加した。

“`gradle
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
signingConfig signingConfigs.debug
}
debug {
applicationIdSuffix “.debug”
debuggable true
}
}

flavorDimensions “plan”

productFlavors {
paid {
dimension “plan”
}
free {
dimension “plan”

元記事を表示

【Android】[エラー]Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)

# なにが起きたか

わからない。以下のエラーが出てビルドができくなってしまった
何かを「fixします」みたいのを押してしまったのかもしれない。

“`console
Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)
Duplicate class androidx.lifecycle.ViewTreeViewModelKt found in modules lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0) and lifecycle-viewmode

元記事を表示

【Android】jetpack Composeでのアーキテクチャについて【Kotlin】

# はじめに
今回はjetpack Composeを構成するためのアーキテクチャについて
Developersの内容を自分なりにまとめたものや補足したもの記事にしました

# 主なレイヤーの種類
**Runtime**
remember、mutableStateOf、@Composebleアノテーション などのComposeを使用した際に使われる要素を使えるようにします

**UI**
ui-text、ui-gtaphica、ui-toolingなどの複数のモジュールで構成されていて、ModifierやPreview、AligmentなどのUIに必要なツールキットを実装するときに使われます

**Foundation**
Row、Column、LazyColumnなどを使用するときに使われます

**Material**
マテリアルデザインシステムの実装、テーマ・スタイル・アイコン等を使用するときに使われます
アプリでマテリアルデザインを使用する際はビルドが必要です

# remember remeberSaveable について
ここでは使用したRuntimeモジュール内で使われるr

元記事を表示

【Android】ビルドバリアントを設定してコンポーザブルのプレビューを実行したときに発生したエラーのまとめ

# 発生したエラーのまとめ

最初に発生したエラーは、`release`でビルドしたことが原因だった。

“`shell
Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (free-release).
“`

最後に発生したエラーは`applicationIdSuffix “.debug”`を設定したままプレビューを実行したことが原因だった。

“`shell
Execution failed for task ‘:app:processFreeDebugGoogleServices’.
> No matching client found for package name ‘com.takagimeow.example.debug’
“`

# エラー発生時の状況

**build.gradle**に`buildTypes`と`productFlavors`を使ってビルドバリア

元記事を表示

【Android】`Failed to resolve: androidx.appcompat:appcompat-resources:1.4.2エラー`が出た時の対処法

# 依存関係を解決できないというエラーが発生

ある日、古くなっていたmainブランチの内容を最新のものに反映させるために、Android Studioにてブランチのアップデート、合わせbuild.graldeの同期を行いました。

最後にコミットした時には、アップデートを行なった開発環境ではなく、別の開発環境にて作業をしていました。その時には、依存関係に関するエラーが発生することはありませんでした。

ところが、最新の内容に更新されたbuild.gradleの同期を行った際に、次のようなエラーが発生しました。

“`shell
Failed to resolve: androidx.appcompat:appcompat-resources:1.4.2
Add Google Maven repository and sync project
Show in Project Structure dialog
Show Details
Affected Modules: app
“`

# エラーの原因はio.coil-kt:coil:2.2.2だった

エラーの内容を調べていたら、

元記事を表示

Kotlin 1.8.0の変更点

※ソース記事は[こちら](https://kotlinlang.org/docs/whatsnew18.html#updated-jvm-compilation-target)
※Kotlin/JS、Kotlin/Nativeについては割愛します。
[リリース日:2022/12/28](https://kotlinlang.org/docs/releases.html#release-details)
Kotlin 1.8.0リリースが世に出され、ここにいくつかの最大のハイライトがある。
– JVMのための新しいの実験的機能:ディレクトリ内容の再帰的なコピーと削除
– kotlin-reflect性能の改善
– より良いデバッグ経験のための新しい-Xdebugコンパイラオプション
– `kotlin-stdlib-jdk7`と`kotlin-stdlib-jdk8`の`kotlin-stdlib`へのマージ
– Objective-C/Swiftとの相互運用性の向上
– Gradle 7.3との互換性

# IDEのサポート
1.8.0をサポートするKotlinプラグインはこちらで利用

元記事を表示

【Unity】PLATEAU SDK for Unityの基本的な利用方法~利用時の注意点

## PLATEAU SDK for Unity
Unity向けにPLATEAUの都市モデルのインポートをサポートするSDKです。

## バージョン情報
| 諸々名前 | バージョン |
|:-:|:-:|
| Unity | 2020.3.4f1 |
| PLATEAU SDK for Unity | 0.5.1 |

## 基本的な利用方法
(個人的に勝手に期待していたこととして)**緯度経度および範囲指定など行えば都市モデルをランタイムでロードする機能**についてはサポートされていません。

というかそのようなUnity×ランタイムロードの部分はおそらくこのSDKがサポートするという話は今後もなく、`事前インポートにおける処理の重さ`や`範囲指定してモデルを取得するまでの難解なフロー`についてを解決してくれるツールだと思います。(勝手な推測)

その点を踏まえてこのSDKで試したことの流れとしては以下になります。
1. UnityにPLATEAU SDK for Unityを導入する
2. CityGMLを[G空間情報センターのWebページ](https://www.g

元記事を表示

Compose開発で知っているとちょっとだけ幸せになれるかもしれないTips

# はじめに
Androiderのみなさん、楽しいComposeライフを送っていますか?
最近ではComposeを業務で触る機会も増えてきたという方が多いのではないでしょうか。
この記事では、私がCompose開発で使用しているTipsを紹介します。
どれもすぐに使えるものばかりなので、知らなかったTipsがあれば是非試してみてください。

## エディタ系

### Composable関数の入力補完
ASにはComposeのいつくかの頻出のワードに補完機能が追加されています。
それらをうまく活用することでテンプレを一瞬で書くことができます。

#### comp
`comp`と入力することで自動でComposable関数のテンプレを書いてくれます。

#### prev
`prev`と入力することで自動でPrevie

元記事を表示

【Android】suspendじゃないコールバックの中で、callbackFlowを活用してsuspendな関数を呼び出せるようにする方法

# 注意書き
これは、完全に自分への忘備録です。

アプリを開発していて、非同期関数を使いたいのに使えない状況に遭遇したので、そのときのことをまとめました。

荒削りな内容になっていますが、あらかじめご了承ください。

# suspendじゃない関数の中で、suspend関数を使うにはどうしたら良いのだろう?

現在開発中のプロジェクトでは、Firebaseを使っています。
その中で、あるコレクションに存在するドキュメントにいかなる変更が発生した場合に、アプリ内でその情報を取得したい状況に陥りました。

具体的にいうと、そのドキュメントには、`DocumentReference`型のフィールドが存在しています。

“`json
// membersドキュメント
{
“name”: “Taro Tanaka”, (文字列)
“groupRef”: “users/user-id-1/groups/group-id-1”, (DocumentReference),
“createdAt”: 2022-01-03 23:55:43 UTC+9, (タイムスタンプ)

元記事を表示

React Native v0.71.0の影響でandroidビルドできなくなった件

# あらまし
* React Nativeのv0.71.0-rc0が2022/11/4に公開されたよ
* 上記リリースによって他のバージョンのReact Nativeで開発を行っていた場合に、androidのビルドエラーが発生するようになったよ
* React Native公式で事象と対処方法についてissueを記載してくれているので、この記事では関連知識とissueの解説をしていくよ
* [公式のissue](https://github.com/facebook/react-native/issues/35210)

# 前提
## React Nativeとは
* [この記事](https://qiita.com/Iwark/items/7c27e919bb71f8b256f6)とか読んでもらうとわかりやすい。
* ざっくりいうとReactみたいな書き方でほぼほぼワンソースでandroidもiOSのアプリも作成できるすんばらしいフレームワーク。

## Node.js, npmとは
* Node.jsがなんたるかについては、[この記事](https://qiita.com

元記事を表示

[Android][Kotlin] Spinnerの使い方とEnumの活用方法

### できたこと
Spinnerの簡単な実装と、Enumをうまく活用してみました!
Enumを使うことで、複数の定数を扱うことができて、コードもスッキリして見やすくできると思います。

### 具体的説明
Spinnerで選択された「選手名」をEnumから検索し、その選手のポジションをTextViewに反映させるというもの。
W杯でサッカーが盛り上がったのでサッカーのEnumにしちゃいました!

### レイアウト
“`activity_main.xml

元記事を表示

突然始めるFlutter環境構築〜モバイル向け〜

# 動機
AndroidもiOSにも対応したアプリが作りたいなと思いまして。

# この記事の内容
1. Flutterを導入する
2. Android Studioを導入する
3. Xcodeを導入する
4. Android StudioでiOSシミュレータを起動する
5. デバッグ実行

# 環境
PC:MacBook pro(2017)
OS:Monterey

# 参考

https://qiita.com/akatsukaha/items/3b8a5a6d94a3cdb1e047

https://zenn.dev/kboy/books/ca6a9c93fd23f3/viewer/5232dc

# Flutter導入
ここはシンプルに公式が一番。

https://docs.flutter.dev/get-started/install

# Android Studioを導入する
これらを参考に。
導入後、PluginからFlutterとDartを別途インストール

https://developer.android.com/studio/install?hl=ja

元記事を表示

OTHERカテゴリの最新記事