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

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

macrobenchmarkでsetupBlockが終了するとアプリが終わってしまいテストが実行できない(失敗する)

## Macrobenchmarkとは
アプリの起動時間とか、フレーム時間とかを簡単に計測できるテストライブラリです。
https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview?hl=ja

UiAutomatorというのを使ってテストを書き、その上でいろいろ計測してくれます。
なのですごく細かい操作をして計測したい場合などは、UiAutomatorでのテストの書き方の知識も必要になってきます。
まあ、起動時間計測くらいなら比較的容易に出来るようになっています。

簡単なサンプルはこちらから。
https://developer.android.com/codelabs/android-macrobenchmark-inspect
(情報は古めなので注意)

## 実施環境など

| ライブラリ | バージョン|
|:–|:–|
uiautomator | “2.3.0” |
benchmark-macro-junit4 | “1.2.0-beta01” |

## 遭

元記事を表示

DroidKaigi 2024: if-else と ?.let-run はどちらが好みか?

Day3の企業ブースにあった (A) と (B)、どっちが好みか?という問いを考案しました。

個人的な考えでは

– Kotlinに慣れていない人でもわかりやすいのは(A)
– いかにもKotlinぽいのは(B)
– xがvar変数でスマートキャストが効かない時は(B)にするか、(A)だと一時変数を定義するしかない
– `hoge()` がnullを返す場合は(A)と(B)で結果が変わってくる
– (A)だと二者択一という意図、(B)だと `run { }` がフォールバック的な意図が感じられる

という感じで迷います。

単純そうに見えて議論を深められるポイントがいくつかあり話題作りになればいいなと思っていました。
普段実装していて自分自身悩むことが多いので、単純にどっちの方が人気のある書き方なんだろう?という興味もありましたね。

**(A)**
“`kotlin
return if (x != null) hoge(x) else {
fuga()
fuga2()
}
“`

**(B)**
“`kotlin
return x?.let { hoge(x) } ?

元記事を表示

ARFoundationでArucoMarkerをマーカーに指定すると”Failed to get enough key points from target image”とエラーが出てビルドできない

問題:タイトルの通り

解決法:ArucoMarkerの周囲に余白を追加する

環境:
Windows10
Unity2022.3.19f1
BuildSettings Android

Source:
https://stackoverflow.com/questions/78941537/opencv-not-able-to-detect-aruco-marker-within-image-created-with-opencv

元記事を表示

Android Contextの使い方

# 概要
何となくで使用していたContextについて学習をしました。
そのため、本ページにて学習した内容についてまとめます。

# このページを見て理解できること
:::note info
**このページを見て理解できること**
* AndroidのContextで出来ること
* contextの種類
* Fragmentで使用する際のcontextの取得方法
:::

# AndroidのContextで出来ること
AndroidにおけるContextの内容を展開

## そもそもContextってどういう意味?
一般的な意味合いとAndroidにおけるContextの意味合いは以下になります。

* **一般的な意味合い**:前後関係、文脈、脈絡、背景、状況、環境
* **Androidにおける意味合い**:同じコード記述やプログラム上の要素が、その置かれているプログラム内での位置や、実行される際の内部状態などによって異なる振る舞いをしたり、異なる制約を受けたりする

元記事を表示

Adjust SDK v5を読み解く[Android]

# この記事は何?
Adjustのコードを読んで何となく語学の為にメモしたものです。
長いので生成AIに読み込ませて要約して貰って適宜質問を投げるといった使い方が良いかと思います。

# Adjustとは
[Adjust](https://www.adjust.com/ja/)は、アプリの最適化とグロースを支援するソリューションです。
複数のプラットフォームを横断する計測技術で、アプリマーケティングの全過程においてマーケターをサポートします。

(公式サイトより引用)

実際に楽天アプリを使ってかみ砕いて説明すると、[楽天市場サービス一覧](https://www.rakuten.co.jp/sitemap/sp/app.html)にあるような
https://app.adjust.com/dj7tmxv のようなadjustリンクを踏んだ際に

1. Adjustがリンクをクリックしたことを記録
2. iOSはapp storeへ、androidはGoogle Play Storeにリダイレクトする
3. アプリを初回起動時にインストールされたことをAdjustに送信
4. 1と3を

元記事を表示

TextFieldの下線の幅(長さ)を変更したい

Android Jetpack Composeでテキスト入力を受け付けるコンポーネントであるTextFieldの入力フィールドの下についている線の距離を縮める方法を載せています。

:::note info
TextFieldDefaults.DecorationBoxと下記に記載がありますが、Androidの公式リファレンスにはTextFieldDefaults.TextFieldDecorationBoxと紹介されています。
恐らく私の使っているバージョンが古いためだと思われますが、適宜読み替えてください。
:::
まず、初期状態の動きを確認します。
# 通常
“`kotlin
var textFieldValue by rememberSaveable { mutableStateOf(“”) }
TextField(
value = textFieldValue,
onValueChange = {
textFieldValue = it
},
modifier = Modifier
.wrapContentSi

元記事を表示

DroidKaigi 2024の驚いたところメモ

個人的に驚いたところを **太字** にしておきます。

# 宣言的UIを学ぶ際に知っておくべき重要なコンセプト

https://2024.droidkaigi.jp/timetable/694168/

プログラミングを始めた頃、for文で数値を合計することがありましたよね。UIも同様に、複数のコンポーネントの合計で成り立っているという、という話で宣言的UIの利点として、コードの可読性が向上し、開発者が意図を明確に表現できるそう。

ReactやiOSなど、さまざまなプラットフォームを網羅しており、Side Effectもカバーしています。Composeから他の言語に移行する際にも便利そうな内容でした。

UI Stateをsingle storeで管理するMVIやTCAは新しい概念なのでしょうか?実際、Fluxで既に行われていたことという話がありました。

**MVIやTCA、Reduxは、ボイラープレートが多く、触るべき箇所が多くて面倒だと言われることがある。**
SWRではキャッシュ管

元記事を表示

DroidKaigi2024で見たセッションのメモ(当日編)+所感

今年も[DroidKaigi](https://2024.droidkaigi.jp/)に参加してきました。スピード重視で記憶があるうちにセッションを聞いた感想や学びを書いていきたいと思います。

なお、以下は私の所感でありAsk the speakerしたものも自分の受け止め方であるため、参考程度にしていただけると幸いです。正確には実際のセッションを聞いていただけると幸いです。

## [Contextを理解する](https://2024.droidkaigi.jp/timetable/694464/)
Contextの意味づけから入り、なんとなくで使っていたContextを上手に言語化されており、Contextに対するもやもやを解消できたと思います。

activityContextとapplicationContextはライフサイクルを意識する必要があるという話も出てきます。
またライブラリによってはactivityContextを渡しても内部ではapplicationContextになっており、直感に反して動くようです(->workManager)。このあたり注意しておかない

元記事を表示

AndroidStudioのエミュレータで使えるExtended Controlsについて

# やり方

![スクリーンショット 2024-09-15 19.28.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/0d815cf4-d063-8c1f-3eec-f31b928f46fa.png)

押すとこちらの画面が出てくる
![スクリーンショット 2024-09-15 19.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/db930420-7889-2728-7e31-d6e525c300a6.png)

それぞれ紹介していきます。

|要素|内容|
|:—|:—:|
|Location|エミュレートされたデバイスの場所をシミュレートできる|
|Displays|最大 2つのディスプレイを追加できる|
|cellular|さまざまなネットワーク状態をシミュレートできる|
|Battery|デバイスのバッテリー特性をシミュレートして、さまざまな条件

元記事を表示

TextFieldのPlaceholderを表示させたい

Android Jetpack Composeでテキスト入力を受け付けるコンポーネントとしてTextFieldをよく使用します。そんな中でもよく使う機能であるPlaceholder(プレースホルダー)を未入力の場合はずっと表示する方法を載せておきます。
※厳密にはプレースホルダーではないですが…
まずは普通にTextFieldでプレースホルダーを使用した際の動きを確認します。
# 通常
“`kotlin
var textFieldValue by rememberSaveable { mutableStateOf(“”) }
TextField(
value = textFieldValue,
onValueChange = {
textFieldValue = it
},
modifier = Modifier
.wrapContentSize(),
textStyle = Typography.bodyMedium,
label = {
Text(
text

元記事を表示

.NET MAUI アプリを USB 接続した Android 実機にデプロイする

# .NET MAUI アプリを USB 接続した Android 実機にデプロイする

こんにちは、@studio_meowtoon です。今回は Windows 11 で .NET MAUI アプリを作成する方法を紹介します。
![dotnet-maui_on_android.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/e045e21e-d6a1-422e-4963-23e1bcf2177b.png)

## 目的

Windows 11 に Visual Studio Community をインストールし、.NET 8 で MAUI (Multi-platform App UI) を使って Android 実機に Hello World アプリをデプロイするまでの手順を解説します。

## Visual Studio Community のインストール

### Visual Studio インストーラーのダウンロード

[Visual Studio の公式サイト](https

元記事を表示

クローズドテストの審査に通らない

## 8月30日、審査落ち

この時、落ちた理由はアンケートの回答が雑すぎたからだと勝手に思ってました。
リリース要件を満たすことの難しさからGoogleにひどく腹を立てていて、当て付けで雑に回答をしたのです。
それからは何もしないでも「20人以上のテスターで審査日から●日以上」の日数が再びカウントされていったのでとりあえず放置することにしました。
そして2週間後、今度は丁寧にアンケートに回答しました。

## 9月15日、審査落ち

また落ちました。
明らかにおかしいと

元記事を表示

【Android】2Dアプリに3Dの輝きを施す登壇で本当に光輝いていた話

# はじめに
みなさん、DroidKaigi2024お疲れ様でした!
今回もとても収穫が多いイベントだったと感じましたが、みなさんはいかがでしたでしょうか?
特に今回はキャリアの話も多く聞く事ができ、一石二鳥以上の収穫でした。
そんな中でDaniele Bonaldoさんが登壇されていた【2Dアプリに3Dの輝きを】という登壇がとても印象的な内容でしたので、振り返りも兼ねて記事にできたらと思います。

https://2024.droidkaigi.jp/timetable/693695/

# Filamentが凄すぎる話
まずは以下をご覧ください

![screen-20240914-195743.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/3175ae1e-e425-de09-ec27-f2d61345aa81.gif) ![screen-20240914-195954.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

Android デバッグで強制的に値を変更する方法

普段開発をしていると、サーバーの関係で希望するレスポンスでは無い場合があると思います。

今回は強制的に値を変更する方法です。

`getName`の返却値を`Greeting`のnameに渡して表示します。

“`.kt
private fun getName(): String {
return “World”
}
“`

“`.kt
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Text(
text = “Hello $name!”,
modifier = modifier
)
}
“`

アプリを起動するとこんな感じです。

![Videotogif (12).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/ad51eb47-c51c-d4c4-626f-cf7509ee5843.gif)

こちらの`getName`の返却

元記事を表示

【Android】アプリの対応バージョンを決める際の考え方

前職でAndroidのアプリケーションに携わる業務が多く、要件生理時に作成するアプリの対応バージョンについて話し合う場合が多かったので、
対応OSバージョンを決める際に抑えてたポイントを備忘録がてら書き出します。
iOSアプリ開発やWebアプリ開発でも同等の考えはできると思います。

当時抑えていたものはこの2点+αでした。
(+αについては最後に記載します)
1. 機種の制限の有無
2. 各端末でのシェア率による検討

## 1. 機種の制限の有無
対応OSを決めてから要件を整理することは原則ありません。
機能等の要件を整理したうえで、開発の要件を抑えるのが基本なので要件が固まり次第、決まるのが定石です。

いくら開発側が「Android 13で開発したい!」といっても顧客側が「この機種で動くものを作ってほしい」と言われたら該当機種に搭載されているOSで頑張るしかありません。

ただし、上記のような事象は業務用で利用するアプリ開発でのみ発生するパターンです。
世の中に出るアプリの場合は1種のみの指定等はまずありません。ですので「じゃあこの記事書いてること意味ないやないか!」ということ

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事