Android関連のことを調べてみた2023年08月06日

Android関連のことを調べてみた2023年08月06日

【Android】Chip使用時にIllegalStateExceptionでクラッシュする問題の対処法

# はじめに
最近古いプロジェクトのブラッシュアップをお手伝いすることが多いのですが、その際にChipを使用していてクラッシュしてしまうことがありました。
本日はこちらに関して備忘録的にまとめておこうと思います。

# クラッシュの対処法
まず、エラーのログは以下になります。

“`
Binary XML file line #xx in xxxx/: Binary XML file line #xx in xxxx.debug:layout/view_chip: Error inflating class com.google.android.material.chip.Chip

java.lang.IllegalStateException: Fragment already added: XXXXFragment{33e975e}

“`
エラーの詳細は以上です。
IllegalStateExceptionに目が行きがちですが、重要なのは上部のxmlに関してのエラー文になります。

こちらエラーからは原因が全くわからずですが、、、。
原因はthemeを設定していないことが原

元記事を表示

View.GONEとView.INVISIBLEの再描画パフォーマンスを比較してみた

# この記事は
AndroidViewでViewを非表示にする場合、Viewに対して`View.GONE`か`View.INVISIBLE`を適用させると思います。(それぞれ違いについては他の記事に詳しく書いてあるので[そちら](https://www.google.com/search?q=view.gone+view.invisible)を参照してください)
しかし、APIの結果や時間の経過によってViewを表示・非表示させたい時がある場合はどちらを適用させたらいいか分からない場合があると思うのでPerfettoを使用してそれぞれの再描画パフォーマンスについて比較していきます

# 結論
Viewの表示・非表示が繰り返されそうな場合は`View.INVISIBLE`を使用しましょう

## 検証
### 使用したツール
`Perfetto`
ADBを介してAndroidデバイスからパフォーマンス情報を収集するためのツールです。GUI上で簡単に可視化出来るためこちらを使用しました

https://developer.android.com/studio/command-line/p

元記事を表示

Android, Gradle: Lazy Configuration に対応する

Gradle の設定 (build.gradle.kts) は、Configuration Cache により設定の解釈を高速化する仕組みがあります。
このとき、設定値を遅延評価する Lazy Configuration に対応した記述をしていると Configuration Cache が効く場面が多くなり、ビルド時間の短縮が見込めます。

この記事では Gradle の Lazy Configuration について解説します。

Android アプリ開発などで build.gradle.kts を設定したり、Gradle Plugin を開発したりする場合に Lazy Configuration の知識があることで高速な Gradle 実行環境を構築できるようになります。

# Configuration Phase と Configuration Cache

Gradle プロジェクトを実行するとき、以下の3つのフェーズがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

ElixirDesktopでスマホアプリを作る – Android実機に転送する(Google Drive経由)

こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをAndroidスマートフォン実機に転送したいと思います。

■「ElixirDesktopでスマホアプリを作る」シリーズの目次
①[Windows11+WSL2に環境構築](https://qiita.com/Alicesky2127/items/5f9a1c6496b1c083720f)
|> ②[Phoenix1.7のアプリを起動](https://qiita.com/Alicesky2127/items/7650f5650069b56bc173)
|> ③[LiveViewを使用してCRUDの機能を実装する](https://qiita.com/Alicesky2127/items/ada99a6b958be18ed270)
|> ④[Android実機に転送する(Google Drive経由)](https://qiita.com/Alicesky2127/items/623628ef

元記事を表示

【Android】GoogleMapで地図の操作の有効無効を切りかえる【Kotlin】

# はじめに
前回の記事に引き続きGoogleMapに関しての記事になります。
Maps SDK for Android で作成されているアプリでは、GoogleMapのアプリと同じ操作をすることができ、今回記事にする内容は それをアプリ内で有効無効を切り替えるものになります。
その操作は **ズーム操作、スクロール操作、傾斜操作、回転操作**です。

# 実践

|操作|コード|内容|
|:—|:—|:—|
|ズーム操作|googleMap.uiSettings.isZoomGesturesEnabled = false|ダブルタップや二本指でのタップなどのズーム操作を無効にする|
|スクロール操作|googleMap.uiSettings.isScrollGesturesEnabled = false|地図上で指でドラッグするスクロール操作を無効にする|
|傾斜操作|googleMap.uiSettings.isTiltGesturesEnabled = false|地図に2本の指を置いて一緒に上下に動かすときの傾斜操作を無効にする|
|回転操作|googleMap.u

元記事を表示

Jetpack Composeで真ん中省略のテキストを実装する

Jetpack Compose の Text の API では `overflow = TextOverflow.Ellipsis` で末尾省略は可能ですが、真ん中省略の API はありません。
`TextView` では `maxLines = 1` のとき限定で真ん中省略が可能でした。
Jetpack Compose を使いつつテキストの真ん中省略はどうしたら実現できそうかいくつか試してみたのでそのメモです。

## 実装

### A. `TextUtils#ellipsize` を使う

`TextUtils#ellipsize` という Android の API を使用することで、領域に入る文字数の文字列を省略記号付きで返してくれるメソッドがあります。

https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/text/TextUtils.java;l=1322-1458

これと Jetpack Compose の `Text`

元記事を表示

AnimatedVisibilityをif文で囲んではならない

# はじめに
UI要素を表示させる時にふわっと表示するようにアニメーションさせたくてAnimatedVisibilityを使ったのですが、最初使い方がよく分からなくて間違って使ってたので備忘録としてまとめておきます。
# AnimatedVisibilityをif文で囲むとアニメーションしなくなる
通常フラグがtrueの場合のみComposableを表示したい場合は以下のように書きますよね。
“`kotlin
@Composable
fun AnimatedScreen(
modifier: Modifier = Modifier
) {
Column(modifier = modifier) {
var showAnimation by remember{ mutableStateOf(false) }
Button(onClick = { showAnimation = !showAnimation }) {
Text(text = “フラグを切り替える”)
}

//フラグが

元記事を表示

UE5 ちょっとまって?!そのcreate widget危険じゃない??

# 端的に言えばGCの話です

現在android向けのアプリをUE5で作っているのですが、デバッグ中にUIを付けたり消したりを繰り返すとどんどんfpsが低下する現象を発見しました。
デバッグコマンドで見てみるとメモリーがかつかつになっていたため調査をした話です。
主にこの問題が起きるのはメモリの少ないモバイルです。

## remove系の処理は内部的には破棄されてないぞ!!!

まんまです。remove from parent関数やremove all widgets関数で非表示にすると思いますがこれ、nullptrを代入をしないと永遠にメモリ空間陣取ります!!!
destroy actorとかと同じ感じだと思っていたのがすべての間違いでした。

## 実際にやってみよう!

![Desktop Screenshot 2023.08.04 – 23.09.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953041/10a68ebb-7a16-18d7-0e90-cf1036325e69

元記事を表示

jetpack composeで折り返しのViewを作る

# はじめに
今回はJetpackComposeを用いて画面いっぱいになったら自動的に折り返してくれるViewを紹介していきます
### 本文
`com.google.accompanist`にある`flowlayout`をプロジェクトに`implemention`することで使えるようになります
“`kotlin
//横
FlowRow(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.Start,
maxItemsInEachRow = 4
)
“`
`maxItemsInEachRow`は名前の通り何個までを許容するかです
`horizontalArrangement`は通常の`Arrangement`と同じで間隔や幅寄せを指定することができます。
ただし、注意が必要なのがまだBetaなのもあって`FlowRow`を使う場合該当の`Composable`関数に下記のアノテーションをつけなければいけません。
“`kotlin
@OptIn(

元記事を表示

Android端末からのリモート開発環境構築(Remote.it&Termus)

# Android端末からのリモート開発環境構築(Remote.it&Termus)

# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [構築手順](#構築手順)
– [利用手順](#利用手順)
– [まとめ](#まとめ)

# はじめに

この記事では、Android端末からリモート開発環境を構築する方法について紹介します。リモート開発環境の構築には、Remote.itとTermux、Termiusを使用します。Remote.itは、インターネット経由でデバイスにリモートアクセスするためのサービスであり、TermuxはAndroid端末上で動作するターミナルエミュレータです。TermuxによってAndroid端末にSSHサーバ機能とWake on lan機能を導入し、自宅のUbuntuサーバの起動スイッチとして利用します。
UbuntuサーバにもRemote.itとopensshを導入しておき、起動したらこちらもRemote.itでSSH接続するだけ!

# 環境
– Android端末1(手持ち)
・Remote.it(Proxyサービス経由でSSHサー

元記事を表示

JetpackComposeのscrollについて

# はじめに

Jetpack Composeのscrollについて調べた。

Jetpackでスクロールする場合、2種類の修飾子が利用できる

# scroll 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scroll-modifiers

verticalScroll 修飾子と horizontalScroll 修飾子の2種類があり、要素の中身が最大サイズを超えた場合にスクロールする。

実装は簡単だが、拡張性はあまりない。

内部でScrollable修飾子が使われている。

“`kotlin
Modifier.verticalScroll(rememberScrollState())
“`

# scrollable 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scrollable-modifier

scrollableはscroll修飾子と違い、スクロールしても自動で要素のオフセットを動かしてくれない

元記事を表示

Jetpack Composeでコンテンツのサイズに柔軟に対応しつつ正方形を維持するレイアウト

ここでは正方形を維持しつつコンテンツサイズに対して柔軟にレイアウトしたい時の実装の紹介です。

## 実装

以下のような `Modifier#layout` で縦横どちらか大きい方をサイズにするといったカスタムレイアウトで実現します。

“`kotlin
Modifier.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val width = placeable.width
val height = placeable.height
val size = maxOf(width, height)
layout(size, size) {
val x = (size – placeable.width) / 2
val y = (size – placeable.height) / 2
placeable.placeRelative(x, y)
}
}
“`

元記事を表示

Android Bluetooth接続 PINコード setpinで入力(Java)

### ■概要
##### 1:Bluetooth接続テスト
##### 2:PinCodeを手動ではなく、プログラムで挿入し、その後SPP通信でsocketをconnectして、接続状態 & デバイス登録状態をつくる。
##### 3:2の状態を作ることによって、connectがほぼ100%繋がる状態を作る。

### ■UI
![Screenshot_2023-08-01-17-06-50-514.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/bd7fd071-f972-39f8-79e3-374a14447e62.jpeg)

### ■ソースコード
“`java MainActivity.java

package com.example.bluetooth_con_test_01;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
impor

元記事を表示

Android端末にHMS Coreをインストールする方法

# 手順
1. Android端末のブラウザを起動し、https://consumer.huawei.com/jp/mobileservices/appgallery/ を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/8f79db28-4816-f65f-73a7-1cfaef0ad2de.png)

2. 「AppGalleryをインストール」をタップする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/ca88d35a-4906-ad45-1907-4ad5d39b3191.png)

3. 画面に表示されているリンクを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/74ffcf25-663c-4ad9-a04c-7ff0ffe72

元記事を表示

KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ

長らくKotlin界隈でたびたび混乱していた **KMM(Kotlin Multiplatform Mobile)** と **KMP(Kotlin Multiplatform)** がついに終止符が打たれましたね

KMM(Kotlin Multiplatform Mobile)廃止です?

元記事を表示

KotlinCoroutineでFirestoreにアクセスする

# この記事の内容
kotlin coroutineを使用して、Firestoreのデータ追加とデータ読み取り、コールバックでのデータ読み取りをします。

### 前提
FirebaseAuthでのログイン・ログアウトが実装されている前提です。

### Firestoreの構成
Firestoreの構成は以下の階層構造になっています。
“`
users – collection
 ┣ {auth.user1.uid} – document
 ┃  ┗ spot_list – collection
 ┃    ┣ spotデータ1 – document
 ┃    ┗ spotデータ2 – document
 ┗ {auth.user2.uid} – document
     ┗ spot_list – collection
       ┗ spotデータ3 – document
“`
Firestoreは、先頭にCollectionというDocumentを複数格納するコンテナがあります。
Documentは、SubCollectionもしくは単純な文字列とか数値とかを格納でき

元記事を表示

[Android]エラー: java.lang.SecurityException: No active admin

## 環境

– Andoroid 13(SDK 33)
– Google Play Console

## 状況

Google Play Consoleのリリース前レポートで発生しました。

エラーメッセージ

> java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadmin.DeviceAdminReceiver}

スタックトレース
“`
Exception Process: com.google.android.apps.mtaas.deviceadmin, PID: 6046
java.lang.SecurityException: No active admin ComponentInfo{com.google.android.apps.mtaas.deviceadmin/com.google.android.apps.mtaas.deviceadm

元記事を表示

Android studio Export Project復元に注意

# Exportしたデータを復元しなければならない
– 何かやらかしてBuild不可になった
– やっぱりやらかして元に戻らなくなった。
– Exportはちゃんとできている

:::note info
メニュー(Windows)
File > Export で任意のフォルダにzipデータが保存されます。
:::

# 復元しないじゃないか!

**調べた情報**
> 復元
>> Zipファイルを任意のフォルダに解凍する。
>> File>New>Import Projectでインポートする。

– 確かに環境は戻ったように見えます・・・

## Buildできない!!
– build.gradleもなんか前と違う。一つしかない!
– 一旦新しいジェクトを作ってみました。

:::note warn
確認
何かおかしいところを確認します。
:::

# (解決策)そのまま解凍してAndroid studio を開かない!

:::note info
– 新しいプロジェクト:プロジェクト名>app
– 保存したZip名>プロジェクト名>app
:::

**ハマリポイントは以下の通り

元記事を表示

Android の端末の言語設定をコマンドで変更したい

# 概要
端末の言語設定を毎回手動で変更するのが面倒だったので、楽にできる方法をまとめました。

## adb コマンドで設定画面を開いてから言語を変える

“`shell
adb shell am start -a android.settings.LOCALE_SETTINGS
“`
言語設定画面はメーカーやAndroidのバージョンによって導線が微妙に違ったりするので、これを使うとちょっと楽になるかも。

## ドキュメントに書いてある方法
こちらに記載されている方法です。
https://developer.android.com/guide/topics/resources/localization?hl=ja

“`shell
adb shell
setprop persist.sys.locale fr-CA
“`

のような感じで簡単に変更できそうな感じで書いてありますが、実際に試すと効果はありません。

## customlocal2 経由で変更する
“`shell
adb shell am broadcast -a com.android.intent.a

元記事を表示

広告IDを特定の値に変更したい(rootが必要)

“`shell
adb root # root じゃないと編集できない

# 広告IDが記載されているファイルをローカルにコピー
adb shell cat /data/data/com.google.android.gms/shared_prefs/adid_settings.xml > adid_settings.xml

# ここでローカルにコピーした adid_settings.xml をエディタで開いて任意の値に変更する

# 反映する
adb push adid_settings.xml /data/data/com.google.android.gms/shared_prefs/adid_settings.xml

# root を解除して作業終了
adb unroot
“`

元記事を表示

OTHERカテゴリの最新記事