- 1. OkHttpで通信速度を概算するIntercepterを実装してみる
- 2. [Android] AdMobのアプリ起動時広告(App Open Ads)のサンプル実装
- 3. ディープリンク・ユニバーサルリンク・アプリリンクの話
- 4. [Android] targetSdkVersion 34でGoogle Play Core Libraryの利用方法
- 5. Jetpack Compose でのクリーンアーキテクチャに関する Android 開発
- 6. [Android]SQLCipherをSQLiteOpenHelperからRoomに移行する
- 7. はじめてのAndroidアプリ(画像編)
- 8. 【Flutter】UXの向上に向けて知っておいたら得すること
- 9. Android:Office アプリの通知が来ない事象をトラブルシュートする!
- 10. jetpack composeでcameraxとmlkitをつかってバーコード読み取り画面を実装するPart2
- 11. Kotlin Fest 2024で個人的に気になる項目紹介
- 12. Retrofit 2.11.0 に依存しているアプリに最適化&難読化を適用する
- 13. Retrofit 2.9.0 に依存しているアプリに最適化&難読化を適用する
- 14. Android15の重要そうな差分まとめ
- 15. Androidビルドエラー解決方法「The binary version of its metadata is X.X.X, expected version is X.X.X」
- 16. 今あるサイトを手軽にアプリ化
- 17. 日本初の英語Flutterイベント、FlutterNinjas Tokyo2024に参加してきました!
- 18. gradleのファイル多すぎて訳わからん【Android】アプリ開発【Flutter】
- 19. あなたのアプリは大丈夫?! 今すぐプッシュ通知のチャンネルを見直そう!!
- 20. [Flutter] 環境変数の確認方法とAPKファイル生成時に沼った話 AAPT: error: resource android:attr/lStar not found.
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## アプリとしてインストールするには?
– ブラウザで該当ページを読み込み、「ホーム画面に追加」を行う。
日本初の英語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を生成する場合は、以下のように