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

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

Flutter × symbol-sdk

# はじめに

こんにちは。だい(@ishidad2)です。
晴れ時々Symbolということで久々にSymbolネタの記事を書いていこうと思います。
今回は@Toshi_maさんが作成されているFlutter用のSymbolSDKを使ってスマホからトランザクションを飛ばしてみようと思います。
なお、DartやFlutterのインストールなどは事前に済んでいることが前提条件となります。

# 環境

FVMとは、Flutter SDKのバージョンをプロジェクト毎に管理するツールです。
以下を参考に必要であればインストールをしてください。(Flutterのバージョン管理が必要なければ不要です)

https://fvm.app/

以下、私の実行環境です。

:::note warn
これより先の記述は筆者の環境であるMacでの説明になります。それ以外のWindows等では当てはまらない説明があるかもしれません。適宜読み替えてください。
:::

“`bash
% fvm –version
2.4.1

% dart –version
Dart SDK version: 3.3.1

元記事を表示

[flutter] Androidのクラッシュ解決で沼った話

flutterアプリを開発している際にAndroidのクラッシュ解決で沼ったので備忘録として残します。

## 症状
Androidでビルドすると1瞬立ち上がり、アプリがクラッシュする(iOSは問題なし)

## 原因探索
まずは `flutter run -v` で実行するがここから進まない。
>[ +1 ms] Waiting for VM Service port to be available…

次にAndroid Studioからエミュレータを再作成して実行。

結果、変わらず。

次にChatGPTに聞いてみる。
>Logcatの取得:これにより、デバイスのすべてのログがlog.txtファイルに保存されます。特にエラーメッセージや例外が発生している箇所を探します。
>“`log.sh
>adb logcat -d > log.txt

やってみて実際に得られたLogがこれです。
“`log.text
06-20 10:24:54.852 7017 7017 E AndroidRuntime: *******************************

元記事を表示

アプリアーキテクチャページのメモ

## モバイルアプリのユーザー エクスペリエンス
アプリ開発者は端末のオペレーティングシステムやユーザーの操作にはせいぎょうができないのでアプリコンポーネントは体外に依存すんな

## アーキテクチャに関する共通の原則
記載通りアプリコンポーネントをデータや状態の保存につかえない
アプリがデカくなったらアプリの拡張や堅牢度を高めてテストしやすくすることが大事
Activity と Fragment の実装はデベロッパーが管理するものではないこれらのクラスは、Android OS とアプリの間のコントラクトを体現する単なる結合クラスでユーザーの操作によって簡単に破棄されるからこれらへの依存を最小限にする。
#### 1 つの重要な原則は、UI をデータモデルで操作することです
アプリ アーキテクチャをデータモデル クラスに基づいて構築すると、アプリのテストのしやすさと堅牢性を高めることができます。

信頼できる唯一の情報源これは一か所で操作ができるとデータの保護やバグが見つけやすくなる
アプリデータの信頼できる情報源は、通常はデータベースです。場合によっては、ViewModel や UI

元記事を表示

【Android】Unit TestでTruthを使ってみる

## はじめに
Android開発のLocal Unit Testを作成していく際に、テストの検証ツールとしてアサーションライブラリを選択するかと思います。
選択肢としては、AssertJ、Truth が多くなるかなと思います。

今回はTruthを選択し、どんな感じで使えるのかまとめていきたいと思います。

## Truthとは何か
[Truth](https://truth.dev/)とは、 Googleが提供しているアサーションライブラリです。
公式サイトを見てみると、Googleのコードのほとんどでこちらが使われているとのこと。

Truthは、他のアラーションライブラリに比べAPIが直感的でシンプルという特徴があり、書きやすく読みやすいテストコードを作成することができます。
“`sample.kt
@RunWith(AndroidJUnit4::class)
class TruthUnitTest {
@Test
fun list_hasSize_3() {
val list = listOf(1, 2, 3)
assertT

元記事を表示

OkHttpで通信速度を概算するIntercepterを実装してみる

OkHttpで簡易的にでも回線速度を測ることができないかなと作ってみました。

https://gist.github.com/satohu20xx/f19f77e4241b74452156f9ee4ba414b1

ざっくりしたコードですが通信時間と通信量が取得できるのでこれを使ってbpsを計算することが出来ます。僕の環境では1分ほどの通信で平均値を求めればそれなりの精度で通信速度を測ることが出来ました。

注意点としては通信時間はあくまでサーバからのレスポンス時間なので、サーバの処理時間も含まれてしまいます。なので、サーバで複雑な処理をするAPIの時間も含めてしまうと、実際の回線速度よりも遅く出てしまうことになります。
これを避けるために、画像のダウンロードなどサーバの処理時間がほとんど必要なく、ある程度の容量を通信するものに対してIntercepterを入れてあげるとよいのでしょう。

元記事を表示

[Android] AdMobのアプリ起動時広告(App Open Ads)のサンプル実装

# 背景
AdMobのアプリ起動時広告(App Open Ads)を実装しようとしたが

・アプリ起動時広告の日本語ページがInternal Server Errorになっている(2024/06/18時点)
・日本語ページもそのままコピーしていくと動かない(Last updated 2024-06-14 UTC.になっているので改変中?)
・サンプル実装のLifecycleObserverはdeprecatedになっている
・順番に説明しながら実装していくようになっているので全体の最終形が載っていない

– 公式サンプル(en)

https://developers.google.com/admob/android/app-open?hl=en

– 公式サンプル(ja) Internal Server Error – 2024/06/18時点

https://developers.google.com/admob/android/app-open?hl=ja

のでサンプル実装を置いておくことにします。

# サンプル実装

上記公式サンプルを元にして動かない部分は修正、Lif

元記事を表示

ディープリンク・ユニバーサルリンク・アプリリンクの話

# はじめに

あるURLにアクセスした時、スマホに指定のアプリがインストールされていればそれを起動し、未インストールでさればストアを表示したい。

ユニバーサルリンクでアプリ未インストールだとストア表示してくれる、みたいなことをいくつか見かけたので調べた。

# ディープリンク、ユニバーサルリンク、アプリリンク

いずれもURLっぽいもので、対応したアプリがインストールされていると、そのアプリが起動する。

ディープリンクの中に、
・カスタムURLスキーム
・ユニバーサルリンク
・アプリリンク
がある。

– カスタムURLスキーム

URLの先頭部分(httpやftpのところ)をアプリ独自に定義したもの。
例:Googleマップ comgooglemaps:

– ユニバーサルリンク と アプリリンク

iOSとAndroidでの呼び名が違うだけで同じもの。
URLと同じ形式なので、対応するアプリがインストールされていないと普通にWebページが表示される。

ただし、これらだけではストアの表示は行わない。

しかし、ユニバーサルリンクとアプリリンクは、表記がWebページと同じURL

元記事を表示

[Android] targetSdkVersion 34でGoogle Play Core Libraryの利用方法

# 背景
アプリ申請時にGoogle Play Consoleから下記の警告メールがきた

>com.google.android.play:core: 1.8.0
>Google Play Core (com.google.android.play:core) は、SDK バージョン 1.8.0 に関して次の注記を追加しました:
>
>Play Core Maven 依存関係を Android 14 互換バージョンに更新してください。現在の Play Core ライブラリは targetSdkVersion 34 (Android 14) と互換性がありません。このバージョンでは、ユーザーのセキュリティを強化するために、ブロードキャスト レシーバーに下位互換性のない変更が導入されています。8 月 31 日より、Google Play ではすべての新しいアプリ リリースで Android 14 をターゲットにすることが義務付けられます。アプリのクラッシュを回避するには、Play Core ライブラリの依存関係を最新バージョンに更新してください: https://developer.an

元記事を表示

Jetpack Compose でのクリーンアーキテクチャに関する Android 開発

皆さん、こんにちは。この投稿では、私が構築したクリーンアーキテクチャに基づいた Android アプリケーションのソースコードを共有したいと思います。

![Jetpack Compose](https://samyoney.github.io/static/images/clean/jetpack-card.png)

このソースコードは個人の GitHub に公開しています:[GitHub](https://github.com/samyoney)。

MVVM、MVC、MVP、TCA などのモデルを使用してモバイルアプリケーションの開発を行ってきましたが、MVVM がテストしやすく、維持管理が容易なため、最も実用性が高いと感じました。最も重要なのは、`use case` の概念があり、`user story` から分離して基本設計のドキュメントを作成できることです。

## Jetpack Compose とは?そしてなぜ使うべきか?

Jetpack Compose は、Google が開発した Android 向けのモダンな UI(ユーザーインターフェース)ツールキットで、柔

元記事を表示

[Android]SQLCipherをSQLiteOpenHelperからRoomに移行する

# はじめに
SQLCipherとは、SQLiteのオープンソースの拡張機能で、データベースを暗号化して保存できる便利なツールとなっています。

https://www.zetetic.net/sqlcipher/

今回は、このSQLCipherを使ったAndroidアプリをSQLiteOpenHelperからRoomに移行した際にハマったポイントを紹介しようと思います。

# SQLiteOpenHelperを利用したコード
SQLiteOpenHelperを利用したコードは以下のようにimportするSQLiteOpenHelperをsqlcipherのものにするだけで簡単に利用できます。
“`kotlin
import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;

public class PasswordMemoOpenHelper extends SQLiteOpenHelper {

元記事を表示

はじめてのAndroidアプリ(画像編)

## はじめに
この記事は、Kotlinもアプリ開発も学びたての筆者が、実際に手を動かしながらアプリ開発を学んでいくものになります。
本記事は第2弾の位置づけで、[前回の記事](https://qiita.com/teyama3/items/352bdb34743a6713f732)では Android Studio のダウンロードから初期構築までをやりました。

今回は[このアプリ](https://github.com/google-developer-training/basic-android-kotlin-compose-training-dice-roller)を題材にアプリ開発に慣れていこうと思ったのですが…
ちょっと知識が足りないことに気付いたので、まずは画像の基礎を学びたいと思います。

## 対象読者
* Androidエンジニアを目指している方(自分は目指してます!)
* 素人の奮闘記を読みたい方

## アプリに画像を表示する
まず、ストレージに保存されている画像をアプリに表示するにはどうしたら良いのでしょうか。

### Android Studio に画像を

元記事を表示

【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ビルドエラー解決方法「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

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

元記事を表示

OTHERカテゴリの最新記事