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

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

【Flutter】UXの向上に向けて知っておいたら得すること

# 初めに
同期処理でプログラムが実行されるFlutterでは、非同期処理やUIのフレーム管理が非常に難しいし、UXを向上させるポイントにもなってきます。
そこで、今回はFuture.microtaskとWidgetsBinding.instance.addPostFrameCallbackの違いについて説明していきます。
これらのメソッドを適切に使用することで、より効率的で応答性の高いアプリケーションを構築できます。
本記事では、これらのメソッドの詳細な解説と、その使用例について説明します。

# Future.microtask

1. Future.microtaskとは?
Future.microtaskは、すぐに実行するべきタスクをスケジュールするためのメソッドです。Dartのイベントループ内で最も高い優先度を持つため、できるだけ早く実行されます。これは、非同期処理の中で短時間で完了するタスクを実行するのに適しています。

2. 基本的な使い方
Future.microtaskは、以下のように使用されます。

“`dart
Future.microtask(() {
/

元記事を表示

Android:Office アプリの通知が来ない事象をトラブルシュートする!

先日 **Android** の動作検証をしていて、組織 ID (Entra ID 上のユーザーアカウント) でサインインした **Office 系アプリの通知が来ない事象**に遭遇しました。

Android は機種によって設定画面や構成可能な設定項目、既定値に差異があり、他のプラットフォームに比べて動作差異が起こりやすいように思います。

備忘兼ねて、アプリの通知が来ない場合のトラブルシュート観点をまとめました!

# 端末環境
– **Android バージョン**:12, 13
– **機種**: OPPO (Color OS 12, 13)
– **アプリ**:Outlook
– **MDM**:Microsoft Intune
– Android Enterprise personally owned work profile (個人所有の仕事用プロファイル) 方式で **BYOD として Intune に MDM 登録済み**
– 当該アプリは**アプリ保護ポリシー** (App protection policy, APP) 適用済み

:::note
本記事

元記事を表示

jetpack composeでcameraxとmlkitをつかってバーコード読み取り画面を実装するPart2

# はじめに
今回も前回に引き続きJetpackComposeでのバーコード読み取り機能を実装していきます。
### 本文
下記のコードはカメラから取得した画像を加工している処理です
“`kotlin
class BarCodeScanner(
private val onBarCodeDetected: (Barcode) -> Unit,
) : ImageAnalysis.Analyzer {
private val qrScannerOptions = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
.build()
private val barCodeScanner = BarcodeScanning.getClient(qrScannerOptions)

@SuppressLint(“UnsafeOptInUsageError”)
override fun analyze(image: I

元記事を表示

Kotlin Fest 2024で個人的に気になる項目紹介

# はじめに

「Kotlin Fest 2024」が 2024年6月22日 (土)に開催するそうで、その中のタイムテーブルから個人的に気になった内容をいくつか記事にしたいと思います。

今回は5年ぶりのオフライン開催で、配信もなく 一般チケットは完売済みのようなので当日リアルタイムでみる方法はありませんが、過去のKotlin Festではアーカイブ動画や資料などが残っているので今回も後から確認することができると思います。
(私も当日は不参加なので、後から観られることを願っていますw)

この記事では タイムテーブルを見て気になった記事を詳細URLとなぜ気になっているのか一言を添えて紹介したいと思います。

KotlinFest2024ホームページ↓

https://www.kotlinfest.dev/kotlin-fest-2024

タイムテーブル↓

https://www.kotlinfest.dev/timetable

以下から記事の紹介です。
順不同

# 今こそ始めたい!Compose Multiplatform
https://fortee.jp/kotl

元記事を表示

Retrofit 2.11.0 に依存しているアプリに最適化&難読化を適用する

## はじめに

本ドキュメントでは、 Retrofit 2.11.0 に依存している Android プロジェクトにおいて、最適化&難読化を有効にして生成したバイナリで発生する実行エラーを回避する方法について記載する。尚、最適化&難読化は R8 コンパイラによって実施されることを想定している。

最適化&難読化の詳細については以下の公式ドキュメントを参照されたい。

https://developer.android.com/build/shrink-code?hl=ja

## ビルド環境

#### モジュール構成

– app: アプリ本体。 UI 層。
– domain: ドメイン層
– data: データ層。 Retrofit を使用。

#### ビルドツール

AGP: 8.4.1
“` kotlin: build.gradle.kt
plugins {
id(“com.android.application”) version “8.4.1” apply false
id(“com.android.library”) version

元記事を表示

Retrofit 2.9.0 に依存しているアプリに最適化&難読化を適用する

## はじめに

本ドキュメントでは、 Retrofit 2.9.0 に依存している Android プロジェクトにおいて、最適化&難読化を有効にして生成したバイナリで発生する実行エラーを回避する方法について記載する。尚、最適化&難読化は R8 コンパイラによって実施されることを想定している。

最適化&難読化の詳細については以下の公式ドキュメントを参照されたい。

https://developer.android.com/build/shrink-code?hl=ja

## ビルド環境

#### モジュール構成

– app: アプリ本体。 UI 層。
– domain: ドメイン層
– data: データ層。 Retrofit を使用。

#### ビルドツール

AGP: 8.4.1
“` kotlin: build.gradle.kt
plugins {
id(“com.android.application”) version “8.4.1” apply false
id(“com.android.library”) version “

元記事を表示

Android15の重要そうな差分まとめ

# はじめに
Android14に関する記事を上げてから、もう一年近く経つとは、、、。

https://qiita.com/YuukiYoshida/items/0ed791f87834e8c70e9b

本当に驚くほど早く時間が経過していますが、現在Android15のベータ版が公開されている状況です。

https://developer.android.com/about/versions/15/get?hl=ja#on_pixel

例年通りであればもう少しで正式リリースされると思いますが、Android15に関してもいくつか修正が必要になりそうです。
フォアグラウンドサービスに関しては、Androidバージョンが上がる度に厳しくなり、サービスによってはもはやWorkerへの置き換えを強制されているような状況に陥るかもしれません。
ご自身が対応されているプロジェクトがどの程度影響がありそうか、一つの判断材料にしてもらえれば幸いです。

# 最小ターゲット SDK バージョンを 23 から 24 に引き上げ
Android15端末では、一律で下限バージョンが24に引き上げられま

元記事を表示

Android ChromeでJavaScriptのscrollIntoViewを使う時は注意しよう

# `scrollIntoView`という便利なメソッド

Webページ内の特定の要素を画面に表示される領域までスクロールさせることができます。

しかも、簡潔に実装できます。とっても便利です。

“`js
const targetElement = document.getElementById(‘elementId’);
targetElement?.scrollIntoView();
“`

`window.scroll` や `window.scrollTo` などを利用して、同挙動を実現することは可能です。

ただ、特定の要素の位置座標を取得するロジックが必要になるなど、`scrollIntoView` より多くの処理が必要となります。

`scrollIntoView` は最新のブラウザでサポートされており、スムーススクロールの設定も簡単にできるので、スクロール処理を実装する際の有力な選択肢になりそうです。

https://developer.mozilla.org/ja/docs/Web/API/Element/scrollIntoView

## Androidの

元記事を表示

Androidビルドエラー解決方法「The binary version of its metadata is X.X.X, expected version is X.X.X」

こういうエラーの解決方法

– **Class ‘XXX’ was compiled with an incompatible version of Kotlin.The binary version of its metadata is 1.8.0, expected version is 1.6.0**

意訳

– パッケージ「 Kotlin `1.8.0` が欲しいよ〜。 君が持ってる `1.6.0` じゃ古すぎて嫌だよ〜。」

どうすれば良い?

– 必ずしも `1.8.0` ぴったりを用意する必要はなく、少し新しめの Kotlin を用意すれば解決することが多いです。ただし**コピペで終わるような解決策がない**のでちょこっと知識が必要です。急がば回れです。

# Kotlinを新しくしたいだけなのに…

面倒なたらい回しが始まるので覚悟しましょう。数字は今回適当なのでエラーを見ながら設定しましょう。

– パッケージ 「Kotlin `1.8.0` が欲しいよ〜」
– Kotlin 「KGP `1.8.0` が欲しいよ〜」
– KGP 「Gradle `7.3.3`

元記事を表示

今あるサイトを手軽にアプリ化

## 既存のサイトをアプリのように見せたい、そんな時にPWAは強力
– すでにサイトはあるが、アプリはない。
– アプリを作るまでではないが、あったらあったでうれしい。

## PWAを使えば、ほぼ工数をかけずアプリ化することができる
– 前提条件
– HTTPSが使える。
– 簡単にお試ししたいのであれば、[Netlify](https://app.netlify.com)がおすすめ。
– 手順
1. マニフェストを作成。
– アプリの説明などを記述 。
1. サービスワーカーを作成。
– 既存のサイトをアプリのようにみせるだけであれば、最低限の実装で十分。
– 作りこむことで、オフラインでの使用・プッシュ通知などが行えるようになる。
1. アプリ化させたいページで、マニフェストとサービスワーカーを読み込む。
– サンプル
– https://github.com/skanno/sample_pwa

## アプリとしてインストールするには?
– ブラウザで該当ページを読み込み、「ホーム画面に追加」を行う。

元記事を表示

日本初の英語Flutterイベント、FlutterNinjas Tokyo2024に参加してきました!

# はじめに

2024/6/13~2024/6/14にお台場で開催された「**FlutterNinjas Tokyo 2024**」に参加してきました。英語で実施されるFlutterイベントは**日本初**とのことで、かなり豪華なメンバーでした!

Flutterアプリ開発には欠かせない「Riverpod」、「Provider」などのライブラリの作者である「**Remi Rousselet**」さんも登壇されていました。

# セッションの感想
どのセッションも素晴らしかったですが、とても語りきれないので特に印象に残ったセッションについて感想を書きます!

:::note warn
拙い英語力で理解した内容なので間違っていたらすみません!
:::

## Riverpod 3.0, the preview
スピー

元記事を表示

gradleのファイル多すぎて訳わからん【Android】アプリ開発【Flutter】

いっぱいある gradle ファイルをまとめてみました。

– gradle/wrapper/gradle-wrapper.properties
– gradle.properties
– settings.gradle
– build.gradle
– app/build.gradle

# そもそも gradle とは?

元々は Java 言語向けに作られたツールで、書いたコードをまとめたり、足りないライブラリをダウンロードしてきて製品を作り上げてくれます(ビルドツール)。最近よく使われる Kotlin 言語も Java 言語と同じ仕組みの上で動いているので Android 開発では公式に採用されています。

# それぞれのイメージ

Gradle をサンタさん、プロジェクトを家、アプリをその家の子供だとしましょう。
Gradle は必要なものを子供に届けてくれる役割をします。

![overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/982650/87045c8e-35e7-419

元記事を表示

あなたのアプリは大丈夫?! 今すぐプッシュ通知のチャンネルを見直そう!!

# この記事を書いたきっかけ

ある日何気なく某アイスクリーム屋のアプリの通知の設定を確認したら、衝撃的なものを目にした!

**31club_channel_name**

channel_nameってなんだよ! クラス名を 31ClassName みたいにしているようなものじゃん!!

# そもそもプッシュ通知チャンネルって?

プッシュ通知チャンネルは、Android 8.0(API レベル 26)で割り当てるようになったもので、通知をグループ化するためのもの。
この機能によってユーザーは「このアプリの大事な通知は受け取りたいな でも広告はいいや」といった設定が可能になる。

[参考: https://developer.android.com/develop/ui/views/notifications/chan

元記事を表示

[Flutter] 環境変数の確認方法とAPKファイル生成時に沼った話  AAPT: error: resource android:attr/lStar not found.

# 環境変数の確認方法とAPKファイル生成時のエラー対応

プロジェクト内で環境変数が適切に暗号化されているかどうかを確認する方法の一つとして、生成されたAPKファイルをデコンパイルしてその内容を確認することができます。
今回はその実装手順とエラーで沼った内容について書きたいと思います。

## 手順解説

### APKファイルの生成
まずは、以下のコマンドを実行してAPKファイルを生成します。
“`bash
flutter build apk
“`
このコマンドは、デフォルトでリリースモードのAPKファイルを生成します。デバッグモードやプロファイルモードのAPKを生成したい場合は、それぞれ以下のコマンドを使用します。

デバッグモードのAPKを生成する場合:
“`bash
flutter build apk –debug
“`

プロファイルモードのAPKを生成する場合:
“`bash
flutter build apk –profile
“`

また、特定のABI(Application Binary Interface)向けのAPKを生成する場合は、以下のように

元記事を表示

複数の SARIF ファイルを統合する

# 経緯

Kotlin 言語で Android アプリ開発をしています。こちらの文献を参考に静的解析ツールの [detekt](https://detekt.dev/) を導入しました。

https://medium.com/@emrekoc/detekt-static-code-analyzer-for-android-c4c9bfd42a8c

これにより Gradle のタスク実行だけで静的解析ができて、レポートも出力できるようにしました。

“`sh
./gradlew deteKt
“`

[レポート形式](https://detekt.dev/docs/introduction/reporting/)は HTML や XML がありますが、今回は標準フォーマットと称される [SARIF](https://sarifweb.azurewebsites.net/) を使うことにしました。

さらに検出された Issue を GitHub のプルリクページにコメントするために、[reviewdog](https://github.com/reviewdog/reviewd

元記事を表示

android.database.sqlite.SQLiteCantOpenDatabaseException への対処方法

roomを使っているアプリでCrashlyticsに`SQLiteCantOpenDatabaseException`によるクラッシュが記録されていました。
原因はいろいろあるようで、ストレージがいっぱいになってしまっていたり、ファイルの破損のようなものだったり、ストレージそのものが破損しているのではと思われるものだったり。
いずれも繰り返し発生し、アプリの起動すらままならない状況になっていそうですが、モバイル端末で動いている以上、アプリとして完全に回避するのは難しそうな問題です。しかし、ファイルの破損であれば、DBファイルを作り直させれば復帰できる可能性があります。DBに重要なデータが格納されている場合は安易に削除できないですが、キャッシュとして使っているなど、データが消失しても大きな問題にならないなら、復帰を優先しても良さそうです。

前置きが長くなりましたが、データが消えてもいいからクラッシュを回避したい。ということで調査してみました。

スタックトレースは以下のようになっています。

“`
android.database.sqlite.SQLiteConnection.op

元記事を表示

学園アイドルマスターのバックグラウンド再生が凄い という話

## TL;DL
– ゲームアプリ「学園アイドルマスター」にはAndroid/iOS端末で楽曲のバックグラウンド再生機能がある
– Unity+CRIWareでバックグラウンド再生を行うのは障害がある
– バックグラウンド再生用にネイティブPluginを実装しないと多分実現できない、凄く手間がかかっている

## この記事の目的
学園アイドルマスターには楽曲のバックグラウンド再生機能があります。
この記事は、バックグラウンド再生の何が凄いのか、実装する上で何が障害になるかを考察する事を目的としています。

## 免責事項
筆者は株式会社バンダイナムコエンターテインメント及び株式会社QualiArtsとは無関係です。
また、筆者はスマートフォン用ゲームアプリ「学園アイドルマスター」の開発に一切関わっていません。
この記事では、「学園アイドルマスター」のゲーム内画面をスクリーンショットで引用しています。

## 学園アイドルマスターとは
https://gakuen.idolmaster-official.jp/

QualiArtsとバンダイナムコエンターテインメントが2024年5月16

元記事を表示

AndroidでOpenCVを使って疑似カラー変換する

# 疑似カラー変換とは
モノクロの画像を画素の濃淡で色を当てはめてカラーにする変換する処理
カラーの画像をモノクロ画像に変換するなどして使うと写真の加工フィルターとしても使えます

イメージとしてはこちらのサイトのグレースケールと色の関係を示すカラーバーがわかりやすいかもしれません
http://home.u08.itscom.net/makoigkn/pseudo_color.html

# 実装
AndroidへのOpenCVの入れ方については省略
下記がコードになります。

“`kotlin
// BitmapをMatに変換
val mat = Mat()
Utils.bitmapToMat(bitmap, mat) // 対象となるbitmapを入力

// グレースケールに変換
Imgproc.cvtColor(mat, mat, Imgproc.COLOR_BGR2GRAY)

// 疑似カラー変換
val colorMap = Mat()
Imgproc.applyColorMap(mat, colorMap, Imgproc.COLORMAP_JET)

// Mat

元記事を表示

DataStoreのInvalidProtocolBufferExceptionへの対処方法

Preference DataStoreを使っているアプリで、レアケースながら、`InvalidProtocolBufferException`によるクラッシュがCrashlyticsに記録されていました。どうやらファイルが破損してしまい、読み出せなくなっているようです。
再現はできないので推測になりますが、ファイルが破損しているため、再起動しても復帰することができず、繰り返しクラッシュして起動不可に陥っているようです。

スタックトレースは以下のようになっていて、アプリのコードを経由していないのでcatchすることはできません。

“`
CodedInputStream$StreamDecoder.readTag
androidx.datastore.preferences.protobuf.InvalidProtocolBufferException
– Protocol message contained an invalid tag (zero).

Fatal Exception: androidx.datastore.core.CorruptionException
Un

元記事を表示

OPPO Reno7A に気圧計がなかった話

https://dailyportalz.jp/kiji/love-atmospheric-pressure

これで紹介されていた気圧計が3万円と高く、気軽には買えないなーと。

以前、iPhoneを使っていたときはWidgetで気圧を測るものがあり、最近のスマホにはだいたいついているという話を聞いたので、termuxでセンサーの値を取ってきてゴニョゴニョすればいいと思いつく。

“`
termux-sensor -l
“`
“`
{
“sensors”: [
“bmi26x Accelerometer Non-wakeup”,
“mmc56x3x Magnetometer Non-wakeup”,
“Rotation Vector Non-wakeup”,
“bmi26x Gyroscope Non-wakeup”,
“stk32600 Proximity Sensor Wakeup”,
“gravity Non-wakeup”,

元記事を表示

OTHERカテゴリの最新記事