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

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

play coreのSDK34+警告について

# エラー(警告)について
>com.google.android.play:core has added this note for core:バージョン:

>If your app is targeting SDK 34+ (targetSdkVersion), then the PlayCore SDK is outdated and will likely cause crashes in your app! Please update: developer.android.com/guide/playcore#playcore-migration

こちらの警告は、このメッセージが表示されているアプリがplay coreというgoogle提供のライブラリを使用している場合に表示されます。「Please update: 」の後のURLに記載がありますが、この警告が表示されるようになった理由はplay coreライブラリが複数のライブラリに分かれたのが原因になっています。
下記ではマイグレーションの手順と出くわす可能性のあるエラーについて書いていますが、マイグレーションについて

元記事を表示

Jetpack Composeでバケツリレーをしない方法

# はじめに
今回はJetpackCompose実装時に必要な型やクラスをComponentにバケツリレーをしない方法を紹介していきます
### 本文
その方法とはCompositionLocalです
まずは準備からです
“`kotlin
private val MyLocalColor: ProvidableCompositionLocal = compositionLocalOf {
error(“No current color”)
}
“`
ラムダ内はデフォルト値で値が与えられる前に取得しようとすると呼ばれます。
値を適用するには下記のようにします
“`kotlin
CompositionLocalProvider(MyLocalColor provides Color.Black) {
MyApp()
}

“`
ラムダ内は使用したいComposable関数を定義します。
これは、子要素に伝播していくので基本的には該当Moduleや該当パッケージの上部要素に対して設定しておけば問題ないです。
滅多に変わら

元記事を表示

DroidKaigi 2024 9月13日資料一覧

[DroidKaigi 2024](https://2024.droidkaigi.jp/)資料一覧
見つけた分だけ


## 10:20-11:00
### [アプリをリリースできる状態に保ったまま段階的にリファクタリングするための戦略と戦術](https://2024.droidkaigi.jp/timetable/690441/)
会場:Iguana
スピーカー:Yuki Anzai様
資料:[アプリをリリースできる状態に保ったまま 段階的にリファクタリングするための 戦略と戦術](https://speakerdeck.com/yanzm/strategies-and-tactics-for-incremental-refactoring)

### [アイデアからIDEへ: Android Studio用プラグインの開発](https://2024.droidkaigi.jp/timetable/684398/)
会場:Hedgehog
スピーカー:Ahmed Ali様
資料:—

### [Android 15と日本語](https://2024.droidka

元記事を表示

adb devices -l で出た番号を変数に出力したい

Androidデバイスが複数あるとadb devices -lの後に番号を指定しなければならないため作成した。

下記は:の後を取得するようにした。

“`
@echo off
setlocal enabledelayedexpansion

REM adb devicesコマンドを実行してデバイス番号を取得
for /f “tokens=1,2” %%i in (‘adb devices -l’) do (
REM デバイスのシリアル番号は2列目(statusが”device”の行)にある
if “%%j”==”device” (
set DEVICE_ID=%%i
REM コロンの位置を探して、それ以降の文字を抽出する
for /l %%x in (0,1,255) do (
set CHAR=!DEVICE_ID:~%%x,1!
if “!CHAR!”==”^:” (
set AFTER_COLON=!DEVICE_ID:~%%x+1!

元記事を表示

logcat取得を自動化したい。

logcatでファイルを分けたいがログキャットをクリアし、ファイル名を入力し、ログキャットを止める処理がチョット面倒くさい。。。

なのでそれをなるべく楽にしたいのだが、やりたいことを簡単に書くと

“`
REM ログキャットをクリア
adb logcat -c
REM File名を入力
set /p FleName=”Input file name”
REM 入力されたファイル名でlog catを取得
adb logcat > %FleName% + “.txt”
“`

こんな感じである。

## が

これだとlogcat 取得停止時にCtrl Cを押し、その後にコマンドプロンプトからバッチ処理を終了しますか? Y/N でNを押さなくてはいけない。
ちなみにY or N 以外を押さないと押されるまでLOOPする。

なのでそこをスキップさせたいがbatには非同期処理が無いため、adb.exeをkillすればいいのではないかという結論にたどり着いた

完成形
“`
@echo off
adb devices

set /P grep=”grepしたいWord:”
set e

元記事を表示

DroidKaigi 2024 9月12日資料一覧

[DroidKaigi 2024](https://2024.droidkaigi.jp/)資料一覧
見つけた分だけ


## 11:20-12:00
### [サプライチェーン攻撃に備える](https://2024.droidkaigi.jp/timetable/690464/)
会場:Iguana
スピーカー:RyuNen344様
資料:[サプライチェーン攻撃に備える](https://speakerdeck.com/ryunen344/sapuraitiengong-ji-nibei-eru)

### [宣言的UIを学ぶ際に知っておくべき重要なコンセプト](https://2024.droidkaigi.jp/timetable/694168/)
会場:Hedgehog
スピーカー:HyunWoo Lee様
資料:—

### [Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜](https://2024.droidkaigi.jp/timetable/689254/)
会場:Giraffe
スピーカー:s

元記事を表示

Androidデバイスのストレージ容量を取得する

# アプリでストレージの全体容量を取得したい
ひょんなことで、内部ストレージの全体容量と空き容量を取得する必要性が出てきました
先行調査から「android.os.StatFsを使えばいけるんじゃね?」とのこと

https://developer.android.com/reference/android/os/StatFs#getTotalBytes()

確かに行けそう…
まぁどうやるかもよくわからんし、他サイトも調べてみると

https://zenn.dev/no4_dev/articles/bb7af37d5b44074d29bf-2

まさにな記事も発見!
さらに調べてみると上の記事でやっている
“`kotlin
val statFs = StatFs(path)
// 総容量
val totalSpase: Long = statFs.blockCountLong * statFs.blockSizeLong / 1024L / 1024L
// 空き容量
val freeSpase: Long = sta

元記事を表示

ヘルスコネクトから歩数を取得したけど、なんだか合わないな…

# はじめに
この記事は、ヘルスコネクトから歩数を取得したけど、なんだか歩数の合計値が合わないな…ってなって、対処した時のメモです。

# 最初の実装
自分の場合は1日ごとの歩数の合計値を取得したくて AggregateGroupByPeriodRequest[^1] を使って下記のような実装をしていました。

“`kotlin
// 1日ごとの歩数を集計する
// startTs, endTs … Unix Time(ミリ秒)
AggregateGroupByPeriodRequest(
metrics = setOf(StepsRecord.COUNT_TOTAL),
// wrong
timeRangeFilter = TimeRangeFilter.between(
Instant.ofEpochMilli(startTs),
Instant.ofEpochMilli(endTs)
),
timeRangeSlicer = Period.ofDays(1),
dataOriginFilter = setOf(DataOrigin

元記事を表示

【iPhone・Android】壊れたスマホから写真を取り出す方法

以前使用したiPhone・Androidスマホが何らかの理由で故障しました。 このような場合、通常は新しいスマホに機種変更という選択になります。 正常に動くスマホであれば、データを転送して、古いスマホから新しいスマホに写真などのデータを簡単に復元できます。しかし、スマホが壊れたら、写真はどうなりますか? それに、壊れたスマホに保存されたデータは全部消えてしまいますか?戻せますか
上記の疑問点をを解消するために、ここでは、[壊れたスマホから写真を取り出す](https://x.gd/o7Ri7)方法を紹介します。
# Part1.壊れたスマホから写真を取り戻すことはできるか?
スマホが壊れても、必ずしも全てのデータが完全に消えてしまうわけではありません。壊れたスマートフォンから写真を取り戻せるかどうかは、スマホの破損状況やデータのバックアップ状況によって大きく変わります。
Googleフォト、iCloudなどのクラウドサービスにバックアップしていれば、新しいスマホにログインするだけで、写真を取り出すことができます。バックアップがない場合でも、いくつかの復元方法を試す価値があります。
しか

元記事を表示

AndroidでJsonを扱う

## AndroidでJsonを扱うための設定など

* プロジェクト
“`build.gradle.kt
plugins {
id(“org.jetbrains.kotlin.plugin.serialization”) version(“2.0.20”)
}
“`

* モジュール
“`build.gradle.kt
plugins {
id(“org.jetbrains.kotlin.plugin.serialization”)
}

dependencies {
implementation(“org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.2”)
}
“`

* JSONに対応したデータクラス
“`JsonData.kt
import kotlinx.serialization.Serializable

//Serializableアノテーション必要
@Serializable
data class JsonData(
val id:String = “”,
val

元記事を表示

AndroidのWebViewでAngularからアプリへデータを渡す

## AndroidのWebViewでAngularで作成したWebページからアプリへデータを渡す

* Angular側のソース

以下を宣言する
“`top.component.ts
declare global {
interface Window {
android: any;
}
}
“`

アプリへデータを渡す箇所(抜粋)
“`top.component.ts
let model : TicketModel = new TicketModel();
model.id = “00001”;
model.name = “テスト”;
let jsonStr : string = JSON.stringify(model);
window.android.showMessage(jsonStr);
“`

TicketModelクラスは以下の通り
“`ticket.model.ts
export class TicketModel {
id? : string;
name? : string;
}
“`

* Android側のソース
 (act

元記事を表示

Kotlinのfactoryってなに?

# factoryとは
– Kotlinにおけるインスタンス生成方法の1つ
– インスタンスの生成で、“`single“`または“`factory“`を使う
参考サイト:

# “`single“`と“`factory“`の使い分け
– “`single“`と“`factory“`をどうやって使い分けるかはアプリの設計に関係してくる
– 一般的なAndroidアプリでは、以下の観点で使い分けられるケースが多い(あくまで一例)
– Repositoryクラスのように**決まった対象のDBへアクセスする必要があり、かつ、アクセスする際に、一貫性を保つ必要があるケース**
single(Singleton)
– HttpClientクラスのような**決まった設定値を全てのアプリで使い回すケース**
single(Singleton

【Azure/Firebase】Azure PipelinesでCLIツールのインストールに失敗するのを解決する方法

## はじめに

Azure Pipelineでアプリを`Firebase App Distribute`に配布しています。
このパイプラインで本日(2024/09/12)突然エラーが発生したため、解決方法を記録しておきます。

## 環境

– Firebase CLI 13.17.0
– Azure Pipeline
– ubuntu-latest (Ubuntu 22.04)
– macos-13

## 起きたこと

以下の公式サイトにある、「Standalone Binary」の手順でインストールしていました。

https://github.com/firebase/firebase-tools

具体的には以下のコマンドを使用しインストールする方法を使用していました。

“`sh
$ curl -sL https://firebase.tools | bash
“`

ですのでパイプラインの定義は以下のようになります。(前後省略)

“`yml
– script: curl -sL https://firebase.tools | bash
d

Kotlinのinvoke()ってなに?

# ざっくり言うと
– invoke()が付いていた場合はメソッド名は無く、クラス名を使って呼び出している
→Android Studioで呼び出し元を知りたければ、クラス名をctlキーを押しながらクリックする

# もう少し詳しく
– invoke()は、メソッド名を省略できると言う意味の方が近いカモ
(メソッド名が無くても呼び出せるし、「invoke()」とインスタンス名に続けて書くこともできる)
– 例外として、インスタンスがnullableな場合は、省略ができなかったりする

“`kotlin:省略ができない例
hogeHogeClass?invoke()
“`

はじめてのKotlin + Android(画面遷移)

# はじめに
今までは試合に出る際はGoogleCalendarの説明欄に試合の振り返りをメモっていた。
![screen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3883681/8577c9bb-6f13-eea7-c5e2-7e388a5fed11.png)

が、後で見返すのが辛くメモるだけ。
勉強がてらアプリでも作ってみようかな、と思ったのがきっかけです。

メモがてらハマったところとか感動したところを(赤裸々に)残していきたいと思います。
多分有識者から見たら、「なんでそんな意味わかんないことしてるの?ちゃんとリファレンスをしっかり読み込みなよ」とツッコミを頂くんだろうなぁ

# アプリで実現したいこと

最低限以下は実現したいと考えました。
– 出た試合の結果や振り返りを残せる
– 試合の時に意識すべきことをチェックリストで表示(体が覚えたと思ったことも後で見返してニンマリしたい)

今まではGoogleCalendarにスケジュール登録していたのをこのアプリで管理できるようにする・・

AndroidアプリにUnity as a Libraryを導入する

## きっかけ
弊社で運用中のアバターを介してビデオ通話ができるSNSアプリがすべてUnityで実装されており、UI/UXのカスタムが非常に難しい状況でした。
そこでUaalを導入し、ビデオ通話中のアバターの表示やプロフィールアバターの表示等はUnity、それ以外のSNS機能やサーバーとの通信はネイティブで行うことで役割分担を進めようと方針が決まりました。

## Unity as a Libraryとは
>Unity as a Libraryとは、ゲームエンジンUnityで開発した機能をAndroidやiOSのNativeアプリにモジュールとして組み込む技術です

利用用途として、例えば3D描画のあるSNSアプリを作りたいとなったとします。Unityは3D描画部分の開発に強いですが、SNS部分は弱いです。逆にNativeはSNS部分の開発に強いですが、3D部分はそこまで強くありません。そのようなときに、Unity as a Libraryを使うと、3D部分は3Dに強いUnityで作り、SNS部分はNativeで作ることが可能になります。

このように、Unityが強い部分はUnity

(Android / Kotlin) ホーム画面に設定する方法 (メモ)

**最終変更日:** `2024/09/11`
**最終検証日:** `2024/09/11`

### 設定方法

1. パーミッションの設定 (app/src/main/**AndroidManifest.xml**)
2. 確認画面の表示 (app/src/main/java/**{スラッシュ区切りのID}**/**MainActivity.kt**)

## パーミッションの設定

`app/src/main/AndroidManifest.xml`に次の内容を追加
(`activity/intent-filter`内に追加)

“`xml



Android開発でAPIkeyを隠してGithubに上げる方法

# はじめに
今回は、APIキーなどの機密情報を安全に管理するために、Secrets Gradleプラグインを使用する方法について説明します。この方法を用いることで、機密情報を秘匿しつつ、プロジェクトをGitHubにアップロードする手順を解説していきます。
# 手順
詳しい導入方法はこちらに書かれています。

https://github.com/google/secrets-gradle-plugin

### その1
プロジェクトレベルのbuild.gradle.ktsに下記をコピーして貼り付けてください。

:::note warn
こちらより最新バージョンがある場合はそちらを記入して使ってください。
:::

“`kotlin:build.gradle.kts(Project)
buildscript {
dependencies {
classpath(“com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.1”)
}

implementation ‘io.realm:android-adapters:4.0.0’ を削除

最近、MacBook を買い換えたので Git から新しい端末へ Android アプリのプロジェクトをクローンしてビルドしています。その時に古い Android アプリのビルドが失敗してしまいました。エラーを見ると ‘io.realm:android-adapters:4.0.0’ がダウンロードできないようでした。
>Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find io.realm:android-adapters:4.0.0.

io.realm:android-adapters のために jcenter() を残していましたが、検索すると GitHub から Java ファイルをプロジェクトへ追加すればいいよ的なコメントを見つけました。

+++Webサイト抜粋+++
The Realm Adapters dependency is not moved to Maven yet. You can directly copy the RealmRecycle

【 Jetpack Compose 】お気に入りの項目だけ表示させる

## 今回実装したもの

お気に入りに登録した観光地のみを表示させる機能を実装しました。

トグルスイッチをオンにするとお気に入りだけが表示されて、オフにすると全ての観光地が表示されます。

| 実装した機能 |
|—|
||

今回は、その実装方法をかねてより作成している、観光地リストアプリをベースにして紹介します。

https://github.com/jtakumi/jetpackList/tree/toggle

## 使用するもの
お気に入り機能を実装するために使用したものは以下のものです。

– LandmarkViewModel.kt
– 観光地情報を保持する viewModel ですが、今回お気に入りかどうかの情報も保持するようにします
– FavoriteData.kt
– お気に入り情報