Android関連のことを調べてみた

Android関連のことを調べてみた

a-5-1-6.Realm DBの暗号化と暗号化キーの作成

### a-5-1-2(3).Realm DBのデータ保存と更新、削除(配列以外、配列)

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### Github

https://github.com/wakizaka24/AndroidTest

#### テスト実装

“`kotlin:RealmTestService.kt
package com.example.androidtest

import android.text.TextUtils.concat
import android.util.Base64
import android.util.Log
import io.realm.kotlin.Realm
import io.realm.kotlin.RealmConfiguration
import io.realm.kotlin.ext.realmListOf
import io.realm.kotlin.types.EmbeddedRealmObject
im

元記事を表示

Flutter Android: could not create task ‘ generatelockfiles’ エラーが表示された時。

# エラー内容
VScode+Flutterで開発をしている時に、
下の画像のようなAndroidのエラーが表示された。
![スクリーンショット 2024-06-07 13.57.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2961391/caea124d-f5bd-2bef-4b15-b5eec221db9a.png)
# 対処方法
下記を参考に解決した。

https://stackoverflow.com/questions/73357365/build-gradle-error-could-not-create-tastk-generatelockfiles-in-flutter-proj

原因はjavaとgradleのバージョン不一致で、Flutterプロジェクトで参照しているgradleを自環境のjava versionに合わせて変更してやる必要がある。

1.コマンドでjavaバージョンの確認する。
ターミナルで実行。
“`
javac -version
> javac 19.

元記事を表示

KMPにおいて、gradleのlibsでエラーが表示される

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517291/60f053bf-df56-c741-89aa-25d53c642033.png)

“`build.gradle.kts
‘val Project.libs: LibrariesForLibs’ can’t be called in this context by implicit receiver. Use the explicit one if necessary
“`

とエラーが出た。

どうやら、バグらしい

https://github.com/gradle/gradle/issues/22797
> この問題は関連チームのバックログにあり、チームによって優先順位が付けられています。

> Gradle バージョンを更新して抑制を削除するだけで、問題は解決します。 😉

ということで、Gradleのバージョンを 8.1.1 まで上げることで解決した

## Gradleのバージョン上げ方
File ->

元記事を表示

はじめてのAndroidアプリ

## はじめに
この記事は、Kotlinもアプリ開発も学びたての筆者が、[Kotlinの基礎知識](https://t.co/BOSCBUoSyQ)を学びながら、Androidアプリを作るまでの過程をまとめる記事の第1弾になります。

## 対象読者
* Androidエンジニアを目指している方(自分は目指してます!)
* 素人の奮闘記を読みたい方

## Android Studioのダウンロード
Android Studioは、Googleが提供しているAndroidアプリ開発用のIDEです。

### Windows版
システム要件は以下の通りとなっています。
* x86_64 CPU アーキテクチャ、第 2 世代の Intel Core 以降、または Windows Hypervisor をサポートする AMD CPU
* 8 GB 以上の RAM
* 8 GB 以上の空きディスク容量
* 1,280 × 800 以上の画面解像度
[ダウンロード用ページ](https://developer.android.com/studio?hl=ja#get-android-studio

元記事を表示

Pixelのダウングレード方法

Androidのメジャーバージョンごとにアプリのテストをする際、テスト用に持っていたPixelが自動システムアップデートで勝手にアップデートしていて困った過去がありました。

アップデートしてしまったPixelをダウングレードするには、[Android Flash Tool](https://flash.android.com/welcome)を使用するとAndroidの他のバージョンを書き込むことができます。[公式サイト](https://source.android.com/docs/setup/contribute/flash?hl=ja)やAndroid Flash Toolページ内にある程度手順が載っていますが、自分の備忘録としてダウングレードを行う際の手順を纏めておきます。

## 手順

**事前にPixelの開発者向けオプションを有効にした上で、開発者向けオプションメニューの「USBデバッグ」と「OEMロック解除」を有効にしてください。**

1. [Android Flash Tool](https://flash.android.com/welcome)にアクセスし

元記事を表示

Android Studioについての個人メモ

– buildやmake projectは、ビルド+自動生成ファイル作成+テストが動く
– app実行は、テストが動かない

元記事を表示

【Android】Hiltを使ってWorkerにDIする

## はじめに
[こちらの記事](https://qiita.com/Nkot117/items/e86c45c5236fcc28f926)(【Android】WorkManagerを使ってPUSH通知を飛ばす)では、Workerクラスを作成し、WorkManagerのOneTimeWorkRequestを使ってPUSH通知を飛ばす内容をまとめました。

今回はの上記で作成したWorkerに、Hiltを使って依存注入する方法をまとめたいと思います。

## Hiltとは何か
Androidアプリで依存性注入(Dependency Injection)を簡単に実装するためのライブラリになります。
依存性注入とは何か、どう嬉しいのか等はここでは特に触れません。
詳しくは[公式サイト](https://developer.android.com/training/dependency-injection/hilt-android?hl=ja&_gl=1*1czggd0*_up*MQ..*_ga*MTU1OTIyMDM4My4xNzE3NDk5NzIy*_ga_6HH9YJMN9M*MTcxN

元記事を表示

一生忘れる mac でのandroid ndkの場所

## 概要

タイトルの通りです。

## 場所

“`
/Users/gabriel/Library/Android/sdk/ndk/21.4.7075529
“`

とかです。

元記事を表示

Unity Android/iOSでFCMの処理を拡張する方法

# はじめに
Unityで、FirebaseCloudMessagingの処理をAndroid,iOSで拡張する機会があったので記事にざっくりまとめたいと思いました。
詳細なコード載せられないのと、必ずうまくいくとは言い切れないので要点だけまとめます。

# iOSの通知拡張について
iOSで通知に画像をつけるために色々対応する必要があるのですが、手順が複雑で、プロジェクトやビルド環境によってセットアップが変わってくるため、一概にこうすればうまくいきますと言えないので詰まったところだけまとめておきます。
結果的には通知に画像をつけることは可能でした。

## PostBuildProcessでiOSのXCodeプロジェクト設定

詳細なコードは載せられないので、大きく要点だけ…

大きく以下の追加が必要になります
– PBXProject.AddAppExtensionで通知拡張サービスの追加
– 下に記載してあるinfo.plistも一緒に登録
– PBXProject.AddFileToBuildで拡張コードファイルの登録
– PBXProject.SetBuildPr

元記事を表示

Android Studioにてgradle build時にCould not read workspace metadata from ~ のエラー

Android Studioにてgradle build時に以下のようなエラーが発生してビルドできず

“`
Multiple build operations failed.

Could not read workspace metadata from C:\Users\UserName\.gradle\caches\transforms-4\hogehoge\metadata.bin
“`

キャッシュ関連のようだったので`Invalidate Caches`からキャッシュ削除では直らずで
`C:\Users\UserName\.gradle\caches`を直接全部消すことで直りました。

検索すると以下が出てきたので関係しているのかも?
比較的新しいバージョンのみのバグなのかもしれず、すぐ直るのかもしれないが備忘のため記載

https://github.com/gradle/actions/issues/167

元記事を表示

[Android/Jetpack Compose]Failed to resolve: <パッケージ名>の原因と解決方法

# 問題
Android WebRTCライブラリ[Sora](https://sora-android-sdk.shiguredo.jp/quickstart#a8b57b)の依存関係の設定をしようとして、`build.gradle.kts`(モジュール側)を書いていたときハプニング。

**`import org.webrtc….`のサジェストが効かない????**

`import`できない問題は大抵依存関係の問題なので、もう一度Syncしてログを見ると以下のログが出力されている

“`
Failed to resolve: <パッケージ名>
“`

ちなみにSync時はエラーではなく警告が出るだけなので、コードを書こうとしてサジェストされないことで問題が発覚。

# 原因と解決方法
`settings.gradle.kts`へ以下の記述が必要
“`
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositori

元記事を表示

Appium環境構築(Android編)

## はじめに

本文書は、「Appiumで実機のAndroid端末に接続し、Androidアプリを起動できるようにする」までの環境構築手順をまとめたものである。

## 環境

本文書は、以下の環境で実際に構築にした手順に基づき記載した。

– macOS 13.6.7
– Zsh 5.9

また、本文書の手順では、以下のパッケージ管理および、ランタイム管理ツールを使用しています。

– [Homebrew](https://brew.sh/ja/) 4.3.0
– [mise](https://mise.jdx.dev/) 2024.5.18 macos-arm64 (2024-05-19)

## 構築手順

### Node.jsのインストール

公式ドキュメントに[システム要件](https://appium.io/docs/en/latest/quickstart/requirements/)としてNode.jsが記載されているため以下のコマンドでインストールする。

“`shell
mise install node@18.17.1
“`

### Appiumのイン

元記事を表示

Socialiteアプリのユーザーエクスペリエンス向上方法

この記事では、SocialiteというAndroidアプリのユーザーエクスペリエンスを向上させる3つの具体的な方法について解説しています。

## 1. エッジツーエッジデザインの追加
Android 15では、アプリを画面全体に拡張し、ステータスバーとナビゲーションバーを非表示にする機能が導入されました。これにより、ユーザーはより没入感のある、現代的なデザインを体験できます。

**手順**:
– **ステップ1**: `WindowInsetsController` を使用してステータスバーとナビゲーションバーを非表示にする設定を行います。
– **ステップ2**: XMLレイアウトファイルで、アプリの主要コンテンツがエッジツーエッジデザインをサポートするように `fitsSystemWindows` 属性を適切に設定します。
– **ステップ3**: 3ボタンナビゲーションの互換性問題に対処するために、必要に応じてパディングやマージンを調整します。

## 2. 予測バックアニメーション
予測バックアニメーションは、ユーザーが「戻る」アクションを行う際に、次に表示される画面のプレ

元記事を表示

Composeで下部のみにShadowをつける

# はじめに
今回はViewの下部にのみshadowを付けるための拡張関数を紹介していきます
### 本文
基本的にはCardをで囲えば簡単にできますが、そうでないViewに対してなどに使う機会があったので下記をそのまま使ってもらって良しなに調整していただければ使えるものになっています
“`kotlin
private fun Modifier.bottomShadow(
blurRadius: Float,
color: Color,
): Modifier {
return this.then(
drawBehind {
drawIntoCanvas {
val paint = Paint()
val frameworkPaint = paint.asFrameworkPaint()
frameworkPaint.maskFilter =
BlurMaskFilter(

元記事を表示

Jetpack Composeでcontextを取得する方法

# 実践
“`
val context = LocalContext.current
“`
これだけでOK

# 注意
自分はToastをJetpack Composeで使用するときにこの状況になったのですが、
“`
@Composable
fun MyScreen() {
Button(
onClick = {
Toast.makeText(LocalContext.current, “”, Toast.LENGTH_SHORT).show()
}) {}
}
“`

このようにcontextが必要な引数に直接 **LocalContext.current**を入力したところ、以下のようなエラーが出ました。
>@Composable invocations can only happen from the context of a @Composable function

このエラー内容は、簡単にいると@Composable アノテーションを付けた関数内でのみ呼び出すことができます。

といった内容なので、イン

元記事を表示

Android 14以降の色のコントラスト機能をサポートする

Android 14 以降では OS での設定として色のコントラストを 3 段階に設定することができ、Android 14 では 開発者向けオプションでのみ設定可能だったものが、Android 15 以降では正式な機能になります。
この機能は各アプリで対応する必要があるものとなっています。

ここではその対応をどのように実装するのかについて書いてます。

色のコントラストごとの見え方の違い
デフォルト
Android データクラスをJsonに変換する方法

データクラスをJsonに変換する方法

`serialization`を使用するので、導入する必要があります。
導入しているプロジェクトが殆どだと思うので割愛します。

“`.kt
//必要なインポート
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json

val user = User(member = false, userId = 0, userName = “user”)
val userJson = Json.encodeToString(user)

“`
`Json.encodeToString`の引数の値へJsonにしたいデータクラスを渡してあげるだけでできます。

`userJson`の表示結果

`{“member”:false,”userId”:0,”userName”:”user”}`

Android Q (29)以上でWiFi P2Pをする際にbindProcessToNetworkが失敗する場合の解決

# 背景
Android Q以降から、セキュリティ強化の関係でWiFi接続の切り替えが制限された。
インターネットに接続する目的では接続先WiFiをプログラムから制御することができなくなり、デバイスとのP2P (ネットワークへの接続が不可)に限られるようになった。
さらに、接続したネットワークにアクセスできるのも接続したアプリ内に限られる。

この操作はWifiNetworkSpecifierを介して実行できるが、Switchの「スマートフォンに送る」から画像を取得しようとして、数時間ハマったので陥りやすい点をまとめた。

# WiFi P2Pで忘れがちな点まとめ
* AndroidManifest.xmlに権限を設定
“`xml


.

【Android】ViewAnimatorの高さを子要素に合わせて可変にする方法

# はじめに
Android Viewの機能であるViewAnimatorを久しぶりに触ったのですが、Viewを切り替える際に高さが最も高さの大きい子要素に依存する挙動となっており、可変にする為の方法を少し調べる形となったので、今後の備忘録的に調整方法を残しておこうと思います。

# ViewAnimatorの高さを可変にする方法
可変にする方法は非常にシンプルで、以下をXMLに追加するだけで実現可能です。

“`main.xml

“`

measureAllChildrenは、ViewAnimatorのプロパティで、すべての子Viewを測定するかどうかを指定する設定になります。
デフォルトではtrueが設定されているので、非表示の子Viewも含め、すべての子V

【Android】WorkManagerを使ってPUSH通知を飛ばす

## はじめに
Androidアプリでアプリからなんらかの操作を契機にPUSH通知を飛ばす(いわゆるローカルプッシュ)について調べる機会があったため、忘れないように記事に残そうと思いこちらを書きました。
## WorkManagerとは何か
非同期的なタスクをスケジュールとして設定・実行してくれるAPIになります。
スケジュールとしても設定方法がいくつかあり、一回限りの実行や繰り返しの実行も設定可能です。
アプリの状態に関わらずタスクをスケジュールし実行できるため、アプリ⇔サーバーが定期的にやり取りするような処理を実行したいときに使われるみたいです。
詳しくは[公式サイト](https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja)を参照ください。

今回はそのWorkManagerの一回限りのスケジュール・実行を使ってPUSH通知を行っていきます。
## 実装
### 依存関係の追加
アプリレベルのgradleに以下の依存関係を追加します。
“`build.gradle.kts
depe