- 1. AndroidでNavigationを使ったDeep Linkの実装Part4
- 2. 【Android】テストを書くときに使う@get:RuleとかRuleChainってなんぞよ
- 3. 新しくbuild.gradleで宣言するcompileSdkExtensionとは?SDK Extensionsとは?
- 4. 【Android】Active Build Variantを切り替えたときにエラーが発生した時のまとめ
- 5. [Android] CustomViewに独自の属性を作る
- 6. JetpackComposeでCanvasにImageを描写したときにBlendModeの挙動が想定外になる原因は、AndroidViewの時と同じ
- 7. OBD2から自動車のセンサーデータを抽出する
- 8. Androidのパーミッションについて
- 9. 【Android】ビルドバリアントに合わせて同じコンポーザブルを作ったら、Conflicting overloads…というエラーが出たときのまとめ
- 10. 【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)
- 11. 【Android】jetpack Composeでのアーキテクチャについて【Kotlin】
- 12. 【Android】ビルドバリアントを設定してコンポーザブルのプレビューを実行したときに発生したエラーのまとめ
- 13. 【Android】`Failed to resolve: androidx.appcompat:appcompat-resources:1.4.2エラー`が出た時の対処法
- 14. Kotlin 1.8.0の変更点
- 15. 【Unity】PLATEAU SDK for Unityの基本的な利用方法~利用時の注意点
- 16. Compose開発で知っているとちょっとだけ幸せになれるかもしれないTips
- 17. 【Android】suspendじゃないコールバックの中で、callbackFlowを活用してsuspendな関数を呼び出せるようにする方法
- 18. React Native v0.71.0の影響でandroidビルドできなくなった件
- 19. [Android][Kotlin] Spinnerの使い方とEnumの活用方法
- 20. 突然始めるFlutter環境構築〜モバイル向け〜
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