- 1. 【Android】webviewにアプリで作ったヘッダーを入れ込みたい
- 2. 【GA4】Androidアプリ検証の準備(Windows 11)
- 3. [iOS][Android] NFCタグを使ってスマホアプリを起動する
- 4. 【Android】パスワードのリセットメールを送信して、ディープリンクを使ってアプリに戻る方法のまとめ
- 5. [Android] M2 Mabcookで開発環境を作る
- 6. Android/iOSアプリの提出に必要なアプリ以外の準備
- 7. 【Android】RoomのInstrumentTestでInstrumentation run failed due to ‘Process crashed.’
- 8. AndroidでNavigationを使ったDeep Linkの実装Part4
- 9. 【Android】テストを書くときに使う@get:RuleとかRuleChainってなんぞよ
- 10. 新しくbuild.gradleで宣言するcompileSdkExtensionとは?SDK Extensionsとは?
- 11. 【Android】Active Build Variantを切り替えたときにエラーが発生した時のまとめ
- 12. [Android] CustomViewに独自の属性を作る
- 13. JetpackComposeでCanvasにImageを描写したときにBlendModeの挙動が想定外になる原因は、AndroidViewの時と同じ
- 14. OBD2から自動車のセンサーデータを抽出する
- 15. Androidのパーミッションについて
- 16. 【Android】ビルドバリアントに合わせて同じコンポーザブルを作ったら、Conflicting overloads…というエラーが出たときのまとめ
- 17. 【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)
- 18. 【Android】jetpack Composeでのアーキテクチャについて【Kotlin】
- 19. 【Android】ビルドバリアントを設定してコンポーザブルのプレビューを実行したときに発生したエラーのまとめ
- 20. 【Android】`Failed to resolve: androidx.appcompat:appcompat-resources:1.4.2エラー`が出た時の対処法
【Android】webviewにアプリで作ったヘッダーを入れ込みたい
# やりたいこと
こんな感じで、webviewとアプリ側のヘッダーを連結させる画面を作成しようとしていました。
今までLinearLayoutでヘッダーを上部に固定し、その下にwebviewを配置していたので、このような実装ができるか調べてみた次第です。
(紫の`Scrollable Header`がアプリ側で作成したヘッダー。その下のGoogleのページがwebview)
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/c47ebdc2-d21b-7f09-ba79-115a8d3e7e60.gif)# 解決策
ScrollViewを使うことでめちゃくちゃ簡単に解決しました。“`Sample.xml
【GA4】Androidアプリ検証の準備(Windows 11)
Windows環境にてAndroidアプリのGA4計測を検証するための準備方法をスクリーンショット付きでご紹介します。
## 0. Androidアプリの準備
Androidアプリを用意して、Firebase SDKを導入&GA4アプリストリームと連携する。
詳しくは以下記事の
– Android プロジェクトに Firebase SDKを導入
– FirebaseプロジェクトをGoogleアナリティクスに接続を参照。
https://qiita.com/aqril_1132/items/5997fc611ee227e7a567
## 1. Android Studioのインストール
公式ガイドの案内通りにWindowsにAndroid Studioをダウンロード&インストール。Android Studioをインストールしておくと細かいデバッグ時や検証用アプリを作成するときなど後々便利。インストールに結構な時間が掛かります。
https://developer.android.com/studio/install
## 2. PATHを通す
1. 自分のユーザー名のフォル
[iOS][Android] NFCタグを使ってスマホアプリを起動する
# やりたいこと
NFCタグにスマホを近づけてアプリを起動する
対象は Android/iOS 両方。
実現するには、NFCタグへの情報書き込みとアプリの実装などが必要となります。# 1. NFCタグへの書き込み
NFCタグへの書き込みは [NFC Tools](https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=ja) を利用しました。
登録したNDEFレコードは以下の2つです。
1. Data (MIME)
2. URL/URI## 1.1 Data(MIME)レコード
Androidアプリを起動するための情報です。
| 項目 | 内容 |
|:-:|:-:|
| content-type | application/{ユニークなURI} |
| データ | 任意のテキスト |ここではcontent-type は以下とします。
`application/vnd.dev.sunskysoft.myapp`
詳細は以下を参照。
https://developer.android.com/gu
【Android】パスワードのリセットメールを送信して、ディープリンクを使ってアプリに戻る方法のまとめ
# はじめに
現在開発中のアプリでパスワードのリセット機能を作成する機会がありました。アプリ内で再認証を行いパスワードのリセットを行うこともできるのですが、今回はパスワードリセットメールの送信を行いパスワードのリセットを行うことに決めました。
その際にディープリンクの設定など初見では複雑にみえる処理などがあり、躓くポイントが何点かありました
今回は、NavigationコンポーネントとFirebaseを使用して、パスワードのリセットが完了した後にアプリの特定の画面を開く方法をわかりやすくまとめたいと思います。
# パスワードリセットメールを送信する
パスワードリセットメールを送信するには、`sendPasswordResetEmail()`を呼び出します。
公式ドキュメントでは、`addOnCompleteListener()`が使われていますが、`await()`を使うことでコールバック地獄を回避することができます。
※必ず`suspend`関数内で呼び出してください。
“`kotlin
val auth = Firebase.auth
…suspend f
[Android] M2 Mabcookで開発環境を作る
大変沼ったのでメモ
先に書いておくと先人様の記事を2023年1月になぞった時のメモになります。# 環境
– M2 Macbook Air
– Ventura 13.1
– Intellij IDEA# JDKのインストール
本項ではこちらを参考にします。
https://zenn.dev/sasakiki/articles/d331b611f29c68
“`
brew tap homebrew/cask-versions
brew install –cask temurin11
“`
私の環境ではv19と同居する状態になったので下記を追記してv11を利用するように
“`.zshrc
export JAVA_HOME=`/usr/libexec/java_home -v “11”`
PATH=$JAVA_HOME/bin:$PATH
“`# SDK Managerのコマンドラインツールのインストール
本項ではこちらを参考にします。
https://qiita.com/kazokmr/items/22ab227643b472fc5016下記のCommand li
Android/iOSアプリの提出に必要なアプリ以外の準備
* Android/iOS 共通
プライバシーポリシーのサイト
以下で簡単に作成できるので、つくってGoogle Sitesかなにかで公開し、提出時にリンク先に設定する
https://app-privacy-policy-generator.firebaseapp.com/* Android固有 (PlayStoreへの提出)
(1)スクリーンショット
JPEG、あるいは24 ビットのPNGであること
最小サイズ:320px ~ 最大サイズ:3840px
スクリーンショットの最大サイズは、最小サイズの2倍以上にできないという制約がある
(2)フィーチャーグラフィック
JPEG、またはアルファチャンネルなしの24ビットPNG形式
サイズは1024×500px
最大ファイルサイズ 1024 KB* iOS固有 (App Connectへの提出)
(1)スクリーンショット … シミュレータを以下それぞれ起動してスクショ
iPhone 6.5インチ … iPhone 13 Pro Max ※必須
iPhone 5.5インチ … iPhone 8 Plus ※必須
iPad
【Android】RoomのInstrumentTestでInstrumentation run failed due to ‘Process crashed.’
AndroidのRoomでInstrumentTestを行っていたところ、以下のエラーが出ました。
その時の解決のメモです。“`
Instrumentation run failed due to ‘Process crashed.’
“`悲しいことにエラー文がこれだけでした。
エラー文で検索したところ、以下のstackoverflowの質問を見つけました。
https://stackoverflow.com/questions/52605267/instrumentation-run-failed-due-to-process-crashed
いくつか回答があるので、一通り全部読みます。すると以下の回答を発見。
(ちなみにこの時点で、○○の依存を追加しよう!みたいな回答もありますが、エラー内容が分かっていないのに行うのは危険です。)>In my case, the android test console only showed the error above without any details.
>But in the logcat, the full e
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だった
エラーの内容を調べていたら、