Android関連のことを調べてみた2022年12月09日

Android関連のことを調べてみた2022年12月09日
目次

【Jetpack Compose】Pagerを使った画面でもCollapsing Toolbarを実装したい

この記事はand factory.inc Advent Calendar 2022 9日目の記事です。
昨日は @KKusumi さんの 【Android】Android StudioのPullRequest機能が便利すぎるので絶対使った方がいい【IDE】でした。

## Jetpack Composeで折りたたみツールバーを実装したい

Android Viewで折りたたみツールバーを実装するときは、CoordinatorLayoutやCollapsingToolbarLayoutを使うことで実装することができました。

Jetpack Composeではまだそのようなものは用意されてはいません。
現時点で僕が今把握しているCollapsing処理を実装するにあたって参考になるものは以下のようなものがあります。

### 1. Material3のTopAppBarでのcollapsingサポート

Material3の[TopAppBar](https://developer.android.com/reference/kotlin/androidx/compose/materia

元記事を表示

logcatを使ってバイナリデータを取り出すメモ

すごく特殊な用途なので、普通は使わないと思うので本当にただのメモです。
普通はデバッグでファイルシステム使ってadb pullしたりとかいくらでもやり方はあると思います。
リリースだけ再現したりする現象があったりして、デバッグでは再現しない現象があってバイナリを確認したい場面があります。(ほぼない。)

# logcatにデータを出力する

logcatに画像やら、protocol bufferのバイナリなどを流してそれを復元したいと思います。普通にtoString()などをして流すと文字化けしてしまい復元が難しい文字列になってしまうのでそれをなんとかするコードになります。

例えばRetrofit + OkHttpでpostしているデータをログに出すには以下のようにします。 (デバッグ用なので本番で使わないこと)

“`kotlin
.addNetworkInterceptor(Interceptor { chain ->
val request = chain.request()

val sink = Buffer()
request.body?.writeTo(s

元記事を表示

Android で LruCache

Android アプリ開発でキャッシュを実装した際に、メモリ(キャッシュサイズ)管理が必要になり、[LruCache](https://developer.android.com/reference/android/util/LruCache)の導入を検討した際の調査内容です。

# LruCache とは
最近最も使われていないデータを最初に捨てるアルゴリズム LRU(Least Recently Used)のキャッシュ。
LruCache 内部では Map を持っており、Map と同様に Key-Value で値を保持できる。

# 使い方
基本的な使い方としては、インスタンス生成時に、キャッシュサイズの上限を指定し、使用するだけ。
デフォルトのキャッシュサイズは、要素数を表します。
また、キャッシュサイズは resize メソッドで変更可能です。
“`kotlin
@Test
fun testPut() {
val map1To3 = mapOf(1 to “one”, 2 to “two”, 3 to “three”)
// キ

元記事を表示

【Flutter】keyboard_actionsでAndroidの実機のみ、bottomに固定されたままキーボードの下に隠れてしまう問題

どうも個人でアプリ開発をしているYuKiOです。

今回紹介するバグは、特殊な状況だと思いますが、原因を発見するためにかなり悩まされたので記録として残しておきます。
どなたかの役に立てば。

## 実現したかったこと。
今回アプリの入力フォーム使用時に、キーボードにボタンを導入したかったため、keyboard_actionsを導入しました。このpubを使えば、簡単にキーボード上部にボタンを追加できます。
https://pub.dev/packages/keyboard_actions

## バグの内容
導入自体は問題なかったのですが、Androidの実機だけkeyboard_actionsで追加したメニューバーが下部に固定されたまま、キーボードの下に張り付いてしまう現象がありました。

## 原因
android/app/src/main/res/values フォルダーのstyles.xmlに以下を追加していたのが原因でした。

“`styles.xml
true
“`
おそらくAndr

元記事を表示

RecyclerViewでListItemの位置に応じた角丸を設定する

RecyclerViewでリストを角丸にしたくなる場合があります。
安直にはRecyclerView全体を角丸にしてしまう方法もありますが、以下のように、リスト全体の上下左右以外も角丸にしたい場合、各要素の位置に応じて角丸を設定する必要があります。

|||
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/596d3c94-e5bd-7684-ec88-deb15daca1df.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/cafc8381-8769-9cef-b5a4-3cf41e50975e.png)|

角丸の付け方はいろいろあると思いますが、制限はあるもののbackgroundに設定するdrawableを変更するのが簡単でしょうか。
GradientDrawableで角丸とマージン要素含めて定義しておいて、背景のdrawableを切り替えるだけで良いようにしてみま

元記事を表示

PC,モバイル,VRに対応したマルチプラットフォームアプリのリリースフロー

この記事は [クラスター Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cluster) 8日目の記事です。
昨日は @UnlimitedBuildWorks さんの [私とEyePhoneの出会い](https://qiita.com/UnlimitedBuildWorks/items/0952ad190f0052d532bb) でした。
30年前からHMDが存在していたのに驚きですね!!

こんにちは!クラスター株式会社でSoftware Engineerをしているizumiです。
私は現在主にiOS/Unityの開発と、アプリのリリース担当をしています。

# clusterの対応プラットフォーム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117503/6a1a6686-e1a9-0030-9a32-c53a5f979c43.png)

「cluster」は、VRからスマホまでどこからでも遊べるメタバー

元記事を表示

iOS&AndroidのSDK開発で心がけていること

## はじめに
:::note info
この記事は、[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership) 8日目の記事になります。
:::
## 自己紹介

![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/608850/18517075-7d09-448b-6704-5a9a23b69b94.png)
[Ad Generation](https://supership.jp/business/adgeneration/)というプロダクトで、
iOS/Androidアプリ向けのSDKを開発している、 @napo と申します。

普段は .xcframeworkと.aarを開発して過ごしています。

## なんの記事?

業務で、「モバイルアプリ向けのライブラリを開発する」という、あまり馴染みの少ないポジションについて、
日々、どんなことをやっていて、どんな気付きがあるか、

元記事を表示

ターゲットがAndroid12でActivityのないアプリのServiceが起動できなくて試行錯誤した

# はじめに
アプリのtargetSdkを31に上げた場合に[サービスの起動条件](https://developer.android.com/about/versions/12/behavior-changes-12?hl=ja#foreground-service-launch-restrictions)がさらに厳しくなりました。
Serviceを起動する場合は[特殊なケース](https://developer.android.com/guide/components/foreground-services?hl=ja#background-start-restriction-exemptions)に該当しない場合は、たとえstartForegroundService()を実行したとしてもバックグラウンドからServiceを起動すると例外が発生するようになりました。

# やりたかったこと
– 他のアプリから呼び出されたあと、フォアグラウンドサービスのように処理を待機させること。
– Serviceの持つonStartCommand()のようにインスタンスが存在した状態で処理でき

元記事を表示

Jetpack Composeでプレゼン資料を作ってみた

この記事は[NTTテクノクロス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ntt-tx)の8日目です。

こんにちは、NTTテクノクロスの戸部@etctaroと申します。

普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。

Jetpack ComposeはAndroid界隈では話題を大きく集めていますね。
DroidKaigiやAndroid Dev Summitなど、国内外含め各種カンファレンス、勉強会でも話題に事欠きません。

ここ三年間Jetpack Composeについての記事を出していますので、今年も続けてJetpack Composeの記事を書いていきます。

なお、[技術書典13](https://techbookfest.org/event/tbf13)で宣言的UIに関する本を共同執筆し、自身はJetpack Composeを担当しました。
こちらもぜひお手にとっていただければと思います。
– [宣言的U

元記事を表示

【Android】Android StudioのPullRequest機能が便利すぎるので絶対使った方がいい【IDE】

この記事はand factory.inc Advent Calendar 2022 8日目の記事です。
昨日は @ichikawa7ss さんの [【SwiftUI】明示的アニメーションと暗黙的アニメーションを理解して使い分けよう](https://qiita.com/ichikawa7ss/items/164a2dfd3c3ab2b1eae8)でした。

# はじめに

いつのバージョンからかわからないけれど、AndroidStudioのPullRequestのタブが追加されてた。(元からあった??)
全然気にしないでいたけど、いざ使ってみたらブラウザとAndroidStudioを行き来しなくてよくなってめちゃくちゃ便利だったので、使い方を紹介するよ。

# 使い方

## 事前準備

まずはAndroidStudioでサインインする。
右上のアカウントのボタンを押して、Googleアカウントで認証を行うとサインインできる。

![スクリーンショット 2022-10-04 16.46.35.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

Preferences DataStoreの無限ループエラー対処

# Preferences DataStoreの無限ループエラー対処

### やりたいこと
・Preferences DataStoreに設定値を保存する
・設定値を呼び出し、他の設定値を更新する

### 躓いたこと
・処理が無限ループになる

同様のエラーで困っている方の助けになれば幸いです。

2022/12現在、`Preferences DataStore` は`SharedPreferences` に代わるものとして改善された新しいデータ ストレージ ソリューションとされています。

参考

https://developer.android.com/codelabs/android-preferences-datastore?hl=ja#0

簡単な例としてトークン(String)、リフレッシュトークン(String)、有効期限(Long)の3情報を保存している
`DataStore`があるとします。`DataStore`を扱う`UserLocalDataSource`クラスは以下の実装になります。

“`UserLocalDataSource.kt
class Us

元記事を表示

AndroidスマホとOBD2アダプターを使って車の内部情報を取得するのに「obd2-lib」を活用

# はじめに

bluetooth対応のOBD2アダプターを車のOBD(故障診断)コネクターと接続し、車の内部情報を取得するAndroidスマホアプリを作りたいと思います。類似のアプリは多数ありますが、自分なりに確認したり点や、改造したいところがあったので、自作を考えました。

OBD2アダプターの多くは「ELM327」というチップを使っているようで、車の内部情報を取得するにはOBD2アダプターに、[「ELM327 datasheet」](https://www.elmelectronics.com/wp-content/uploads/2016/07/ELM327DSF.pdf)にあるような手順でATコマンドを送信し、プロトコルの設定や車側の対応の有無のチェックし、対応している情報をリクエスト、データ受信、物理的な値に変換すればよさそうです。

OBD2に関するライブラリーも多くあるようですが、google検索でたまたま見つけた[「obd2-lib」](https://android.googlesource.com/platform/packages/services/Car/+

元記事を表示

Obbで0埋めファイルができてしまう時の備忘録

AndroidStudioにもあるjobb.exe

[JOBBツール](https://developer.android.com/studio/command-line/jobb?hl=ja)はAndroid SDKのインストールフォルダにあります。
\tools\bin\jobb.bat (Windowsの場合)

# これの問題ではまったので備忘録

Androidでobbをマウントしようとしたら処理が止まった

obbもあるし、ファイルもサイズがあるので、不審なところはないと思ったところ

obbの中身が全部0で埋まっている謎ファイルができていたのだった。

# 対応策

(a) obb生成後に先頭4バイトを見て0で埋まっていたらNGにする。
なお、こういうファイルを生成していてもjobbは正常終了のコードを返してくる(ひどい)

(b) 適当なファイルを追加してサイズが変わるようにする。

元記事を表示

a-2-5.モーダル表示(DialogFragment)

### a-2-5.モーダル表示(DialogFragment)

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

#### 課題
3. DialogFragmentを利用してダイアログを表示できるか。
3. DialogFragmentからActivityへ入力内容を共有できるか。

#### Github

https://github.com/rwakizaka7/AndroidTest

#### テスト実装

“`kotlin:DialogFragmentTestActivity.kt
class DialogFragmentTestActivity : AppCompatActivity(), View.OnClickListener,
DialogFragmentTestFragment.DialogListener {
private lateinit var displayButton: Button

override fun onCreat

元記事を表示

店舗BGMアプリ『Simple BGM』課金ユーザーの非自発的解約防止のためプッシュ通知を実装した件

# 概要
こんにちは![株式会社ワールドスケープ](https://world-scape.net/)のWakacchiと申します。
弊社は「実力あるアーティストが、公正に、経済的に評価される世界を作る」というミッションのもとに、[Frekul](https://frekul.com/)というアーティストの音楽活動をサポートするプラットフォームを中心としたWEB・スマートフォンアプリの自社サービス開発や受託開発を主な事業としています。

今回、自社サービスの[Simple BGM](https://bgm.world-scape.net/)というアプリの、課金ユーザーの非自発的解約を防止するためのプッシュ通知を実装した件を紹介します。

まず”非自発的解約”について補足します。
Androidアプリの定期購読解約には自発的解約と非自発的解約の2パターンあります。

自発的解約とは、ユーザーが自ら解約の意思をもってGooglePlayストアから解約したもの。
非自発的解約とは、ユーザーの支払いが完了しなかったために解約されたものです。(例:クレカの有効期限が切れていた、残高不足により決済

元記事を表示

DELETE APIにBodyが必要な時の実装方法

# 初めに
今回、自分が地味に詰まったDELETE APIを叩く時にBodyが必要な時の実装方法を紹介していこうと思います
### 本文
早速ですが、実装方法は下記の通りになります
“`kotlin
@HTTP(method = “DELETE”, path = “api_path”, hasBody = true)
“`
DELETEオプションはリクエストの本文が存在しないため、URLのみで識別できる必要があります
そのため普段の@DELETEのみでは実装ができなくなってしまっているのです

### 最後に
調べれば意外と出てきますが、日本語での記事がなく初心者エンジニア等が気付かない可能性があるので今回書かせていただきました
何かのお役に立てれば幸いです

元記事を表示

AppsFlyerとそのアトリビューションの仕組み

この記事ではAppsFlyerと、その基本的な機能であるアトリビューションについて解説しています。

## AppsFlyerを一言で言うと・・・

[AppsFlyer](https://www.appsflyer.com/ja)はモバイルアプリのデータを収集・整理し、「アトリビューション」を行うことで、広告の効果を統一的に評価するためのプラットフォームを提供するサービスです。
このようなサービスは、モバイル計測パートナー(MMP; Mobile Measurement Patner)という名前でも知られていて、AppsFlyer以外の類似のサービスとしては adjust, branch, Kochava, singular, tenjin 等が挙げられます。
この中で、グローバルシェアがNo.1のサービスがAppsFlyerになります。

![AF-logo_Horizontal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73759/eeb0ed79-45cd-6ea0-b1d6-000645

元記事を表示

『Relay』Figmaを用いてAndroidUIを作成する方法 [JetpackCompose]

# すみません、まだ完成していません。

# はじめに
アドベントカレンダー7日目を担当します、愛知工業大学一年の牧野遥斗です。よろしくお願いします。
ずっと書く内容を考えていて、投稿が遅れてしまいました。すみません。

ではみなさんは、Googleの新しいUiフレームJetpackComposeはご存知でしょうか?

>Jetpack Compose は、ネイティブ UI をビルドする際に推奨される Android の最新ツールキットです。Android での UI 開発を簡素化し、加速します。少ないコード、パワフルなツール、直感的な Kotlin API を使用してアプリをすぐに動かすことができます。
引用文献:https://developer.android.com/jetpack/compose?hl=ja

ということで、今までより便利にUIを作れるものです。

![スクリーンショット 2022-12-07 7.09.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1209385/705

元記事を表示

Unity初心者向け3Dキャラを動かす方法(おまけでAR化)

この記事は、NTTテクノクロス Advent Calendar 2022 の7日目です。
初めまして。NTTテクノクロス田中です。
入社して2年、映像系の開発に携わってきました。
今回はUnity上での3Dモデルのアニメーション編集方法を調べてみました。
おまけで編集したアニメーションをARアプリで表示させてみようと思います。

以下の手順で作ってみました。
1.Unityインストール
2.新しいプロジェクトの作成
3.3Dモデルインポート(ユニティちゃん)
4.アニメーションの編集
おまけ.ARアプリ作成
# 1.Unityインストール
・”Unity Hub”をインストール(バージョン:Unity Hub 3.3.0)

https://unity.com/download

・インストールが完了したら”Unity Hub”を起動
・”Unityエディターをインストール”をクリック(バージョン:2021.3.14f1)

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

元記事を表示

Unrecognized Android Studioから始まった連続エラー解決への道

# はじめに
Androidアプリをビルドできなくなり、そこから「1つ解決するとまだ別のエラーが発生」するような状態になってしまいました。。。

その過程をせっかくなんでまとめてみました。

# Android Studioをアップグレード
 久々にAndroidアプリをビルドしてみると?のようなエラーに遭遇しました。

“`console
Unrecognized Android Studio (or Android Support plugin for IntelliJ IDEA) version ‘202.7660.26.42.7486908’, please retry with version 2021.2.1 or newer.
“`

Android Studioのバージョンを下げるか最新にしろという事ですね。

https://developer.android.com/studio/intro/update?hl=ja

なぜか` [Android Studio]>[Preferences]>[Appearance & Behavior]>[System Sett

元記事を表示

OTHERカテゴリの最新記事