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

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

Flutter ドロップダウンメニューのテンプレート

# ドロップダウンメニュー (PopupMenuButton)のテンプレート

「…」を押すと出てくるメニュー

これです↓

コード

“`dart
PopupMenuButton(
onSelected: (String s){
switch(s){
case “del”:
break;

case “edit”:
break;
}

元記事を表示

【Android】RecyclerViewのイベントの実装

## はじめに
RecyclerViewで表示しているリストのタップイベントを実装しようとした時に、イベントの実装をどこに置くのがいいのか迷うことがありました。
今まではViewModelに処理を持たせてListAdapterにViewModelを渡し、ListAdapter→ViewModelにアクセスするように作っていたのですが、[公式サイト](https://developer.android.com/topic/architecture/ui-layer/events?hl=ja&_gl=1*8i836n*_up*MQ..*_ga*MTI2NTI1MjQxMC4xNzE3NTg2NjE4*_ga_6HH9YJMN9M*MTcxNzY3MTI0MS40LjAuMTcxNzY3MTI0MS4wLjAuMA..)(UI イベント)を見てみると、その方法は推奨されないとのこと。
>警告: ViewModel を RecyclerView アダプターに渡すことは、アダプターと ViewModel クラスを密結合させることになるため、おすすめしません。

公式では、ListAdapterに

元記事を表示

Androidアプリサンプルにおける単体テストのテストスコープについて調べてみた

[単体テストの考え方/使い方](https://www.amazon.co.jp/%E5%8D%98%E4%BD%93%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9-%E4%BD%BF%E3%81%84%E6%96%B9-Vladimir-Khorikov/dp/4839981728/ref=sr_1_1?adgrpid=146552030392&dib=eyJ2IjoiMSJ9.DwAMKN29hHMmZWAvUlEn2A3QQK1nnfD3KmHUkW3juAQ_ko6ILz9DBpmcn0ixQ2dfiBbmX0ZazRUq5oLHyFTvS_wKTCY5Jv43bFltrJUsbQ59eF3_BuWZK1d0xsq5AGgSSB1jngr9nXYSL6QSwTleRavEbTzlgXYngUMLtI4wn_UlndTJrNc2hn0gSqzDfzrjKaqerPTtlLgx6EeeSY8vOWTEnJ-gfi_GeFeBiUODeJ5iqH9wIvoZo3ycGUJGBoXV.equosaUSpav

元記事を表示

Hilt の kapt を ksp にする

## はじめに

kapt 、ksp って何? みたいな話は他者様の記事に任せるとして、本記事には Hilt + kapt の環境を Hilt + ksp に移行した作業のみを簡潔に記載する。

### 移行の方針

Hilt + ksp にする方針は [kapt から KSP に移行する](https://developer.android.com/build/migrate-to-ksp?hl=ja) と [Dagger KSP](https://dagger.dev/dev-guide/ksp.html) の Requirements に基づく。

> Dagger 2.48 (or above)
> Kotlin 1.9.0 (or above)
> KSP 1.9.0-1.0.12 (or above)

### 環境

AGP(Android Gradle plugin) は `8.4.1`。

“` Groovy: gradle/wrapper/gradle-wrapper.properties
plugins {
id ‘com.andr

元記事を表示

Androidでちょっとした動画を再生したいと言われたので10分で対応してみる

# はじめに
Androidアプリにてふとした要件で動画を再生してほしいと言われたことはありませんか。
ビルトインで動画ファイル内包するのもなぁという思いもありつつあまり手間もかけたくない…
そんな時にあまり手間をかけずに実現するソリューションをご紹介しようと思います!

フォーカスしませんがその他の手段もまとめていますのでご活用いただければ嬉しいです。

今回作るアプリ
(みんな大好きbig buck bunnyです)

# 全体の流れ
1. 動画ファイルをgoogle driveにアップロードする
2. google driveからリンクを取得
3. composeとexoplayerでgoogle driveの動画を再生する

## 動画リンクの用意
今回はサクッと試したいということで動画ストレージとしてgoo

元記事を表示

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 アノテーションを付けた関数内でのみ呼び出すことができます。

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

元記事を表示

OTHERカテゴリの最新記事