- 1. Androd15からedge-to-edgeがデフォルトで適用されるので挙動を確認してみた
- 2. テストではMockよりもFakeを使おうという話
- 3. 「Kotlin/Androidでテスト駆動開発をはじめよう」のセッション補足について
- 4. Alldocube iPlay 50をアンロック
- 5. DTOクラスはアホにしよう
- 6. jetpack composeでcameraxとmlkitをつかってバーコード読み取り画面を実装するPart3
- 7. Kotlinで変数の範囲を強制する
- 8. 【Android】MockWebServerを使用してAPI通信部分のUnit Testを作成する
- 9. Kotlin Fest 2024のメモまとめ
- 10. Kotlin Fest 2024 で驚いたところメモ
- 11. UnityでAndroid向けアプリ開発をしてみたい
- 12. Claude 3.5 SonnetのArtifactsを有効にしてPlantUMLで作図させてみた
- 13. LinuxでAndroidを接続して写真などを転送する方法
- 14. どうやってもAndroidスマホが重い場合の別のアプローチ
- 15. Flutter × symbol-sdk
- 16. [flutter] Androidのクラッシュ解決で沼った話
- 17. アプリアーキテクチャページのメモ
- 18. 【Android】Unit TestでTruthを使ってみる
- 19. OkHttpで通信速度を概算するIntercepterを実装してみる
- 20. [Android] AdMobのアプリ起動時広告(App Open Ads)のサンプル実装
Androd15からedge-to-edgeがデフォルトで適用されるので挙動を確認してみた
## はじめに
Android15 から `edge-to-edge` がデフォルトになり、意図しない挙動になっていないかの確認を行ってみました。
確認は、弊社で公開している [家計簿](https://play.google.com/store/apps/details?id=jp.co.tanocee.kakeibo.android&utm_source=qiita&utm_campaign=android15_edgetoedge) アプリで行いました。https://play.google.com/store/apps/details?id=jp.co.tanocee.kakeibo.android&utm_source=qiita&utm_campaign=android15_edgetoedge
## 変更内容の確認
変更点としては、以下になります。
– `targetSdk` を `35` に変更すると `edge-to-edge` が Android15 で対応していないアプリでも適用されること
– [M3](https://m3.material.io/)
テストではMockよりもFakeを使おうという話
### はじめに
https://testing.googleblog.com/2024/02/increase-test-fidelity-by-avoiding-mocks.html?m=1
この記事はGoogle Test Blogの記事を要約したものになります!### MockとFakeの違い
## Mock
– 呼び出され方を事前定義することができるオブジェクト
– メソッドの挙動を指定して、入力値と期待値を定義できる## Fake
– 実際のクラスと同じように動く
– SQLiteを使ってDBからデータ取得をする実クラスに対して、内部的にはHash等を使って同一の値を返すようなFakeクラスなど### Mockのデメリット
– Mock用のSDKの使い方を理解する必要がある
– テストクラスの内部を正確に知っていないとMockの挙動定義だらけになって可読性が落ちる
– Mock対象のクラスに変更があった時に修正する必要が出る場合がある
– 上記によりバグの見逃しが発生する可能性がある### 実コード > Fake > Mock
– 実コードが最も忠実度が高い
「Kotlin/Androidでテスト駆動開発をはじめよう」のセッション補足について
MagicPodさん主催のイベント[モバイルアプリ開発における良いテストコードの考え方](https://trident-qa.connpass.com/event/320151/)に「Kotlin/Androidでテスト駆動開発をはじめよう」という内容で、スピーカーとして参加させていただきました。今回はそのセッションの補足内容となります。テストというテーマは深く、考え方もいろいろあるので、15分のセッションに収めるのは大変なので、補足を書きました。
## TDDのやり方
### TODOリスト
Kent Beckの「テスト駆動開発」では、TODOリストを作りながらTDDを実践していきます。これは、Greenのフェーズでコードをきれいにする方法を思いついているが、このフェーズではまだ実施できない、のようなときに作るTODOリストです。TDDでは各フェーズでやるべきことが決まっているので、将来に手を付けるべきことを棚上げにしておかないといけません。
そのときにTODOリストとしてメモ書きを残しておくとよいです。頭の中で短期記憶しているだけだと、忘れてしまいそうで、不安になります。TOD
Alldocube iPlay 50をアンロック
# 注意
この記事に貼ってあるリンクはいつ死ぬかわからないし、ダウンロード先も煩わしいボタンが多い
正しいものであるかわからない場合はリンクを踏まず自分で探そう# 目次
1. ドライバのインストール
1. タブレットのタウングレード
1. アンロック# ドライバのインストール
今回は楽をするためにwindowsを利用するので、ドライバをインストールする必要がある
ドライバは以下のリンクからダウンロード可能
spd driver
https://androiddatahost.com/dsa6h# タブレットのタウングレード
今回使うツールではタブレットのバージョンをiPlay50(T1030)_EN_20230801にする必要がある
以下のダウングレードツールを利用する
spd flash tool
https://spdflashtool.com/download/spd-flash-tool-r27-23-1902
ここからiPlay50(T1030)_EN_20230801.Tをダウンロード
https://www.alldocube.com/en/firmware/
DTOクラスはアホにしよう
# DTOクラスはアホにした方がいい
– DTOクラスはただの入れ物であり、中身のデータが何かは知らない
つまり、getterやsetterは(中身は何か知らんけど)ただ来たものを、受け渡すだけ
– DTOクラスは、賢くしない方がいい(処理とかを入れない方がいい)
– 末端であるDTOクラスで色々やろうとすると、メンテナンス性が悪くなる
→・末端が広大化していく
・要件が増えた時にif文が増えたりしてカオスになる**どこで頭を使うかにもよるが、基本は末端がアホな方がいい**
# カプセル化の意味
– カプセル化とは、他のオブジェクトに「使っていいよ」と公開するフィールドとメソッドを最小限に抑え、さらには、公開するなら操作できる範囲を必要最小限に抑えること。(アクセス制御 access control)
↓
**いちいち色々と処理をするためのメソッドとかをDTOクラスに作っていたらキリがない!!**# 備考
– Androidの場合、DTOクラスはアホにしてView Modelは頭をよくするようにすればいいハズ。。。
– kotlinのdata class(
jetpack composeでcameraxとmlkitをつかってバーコード読み取り画面を実装するPart3
# はじめに
今回も前回に引き続きJetpackComposeでのバーコード読み取り機能を実装していきます。
### 本文
下記のコードをViewModelに追加することで実際にコードを読み取った時にやりたい処理をすることができます
“`kotlin
private val qrCodeFlow = MutableSharedFlow() val qrCodeAnalyzeUseCase: ImageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
.apply {
setAnalyzer(
Executors.newSingleThreadExecutor(),
BarCodeScanner { barcode ->
Kotlinで変数の範囲を強制する
# 実践
早速ですが実践です。“`
var x = 2
var y = 11println(x.coerceIn(0, 10)) // 2
println(y.coerceIn(0, 10)) // 10
“`**coerceIn**という関数の引数内で範囲を指定することで、その範囲を外れた場合 指定した範囲に矯正してくれるというものです。
coerceInを変換すると ”強制する”というそのまま出てきますので、わかりやすいです。
“`
var y = 11
var x = 2if(x < 0){ x = 0 } else if(x > 10 ){
x = 10
}if(y < 0){ y = 0 } else if(y > 10 ){
y = 10
}println(x.coerceIn(0, 10))
println(y.coerc
【Android】MockWebServerを使用してAPI通信部分のUnit Testを作成する
## はじめに
Androidアプリ開発では、API通信部分にRetrofitを採用するケースが多いと思います。
API通信部分のUnit Testを作成しようと思った時に、MockWebServerを使うと、ネットワーク通信を伴わない形でテストを作成できるとのこと。
今回はMockWebServerを使ったAPI通信部分のUnit Testを作成する方法をまとめていきたいと思います。## MockWebServerとは
[Retrofit](https://square.github.io/retrofit/)と [OkHttp](https://square.github.io/okhttp/)でお馴染みのSquare社によって開発されたライブラリです。
実際にはOkHttpの一部という位置付けのものになるみたいです。(MockWebServerのREADMERは[こちら](https://github.com/square/okhttp/tree/master/mockwebserver))OkHttpのAPI通信部分のテストを作る際にモックとして使うもので、リクエストに
Kotlin Fest 2024のメモまとめ
6/22に開催されたKotlin Fest 2024へ参加してきたので、拝聴したセッションについてのメモ書きまとめです。
※聞き間違い、誤解などがあるかもしれません。![IMG_8692.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2724617/8b2db8c6-6338-fe86-0354-6a00816fd08d.jpeg)
### [今こそ始めたい!Compose Mulitplatform](https://speakerdeck.com/ogi2ogi/get-started-with-compose-multiplatform)
* Compose Multiplatformを始める際は、公式のプロジェクト作成ウィザードであるKotlin Multiplatform Wizardを使おう
* 環境構築はKdoctorでちゃんとできているか確認しよう
* Android Studioでは共通部分のUI実装をするCommonMainでプレビューの確認ができない
* Andr
Kotlin Fest 2024 で驚いたところメモ
多分聞き間違えたりしているところがあると思いますが、面白かったり驚いたところを太字にしたりして、共有します。
Kotlinを愛でようというコンセプト。
## KotlinConf 2024 を後から256倍楽しむためのヒント
@ masaruhr さん### キーノートは?
K2:
コンパイル時間、ハイライトまでの時間が短くなる。文法的な変更は最小限に。”K2のKotlin IDEプラグインの中を覗いてみよう♪”で聞けそう。Multiplatform:
Fleetという多言語対応のIDEを出している。Swiftとかも触れる。IDEの生成AIの機能など
### どうやって見るか?
**タイトルとChatGPTのサマリーを見て、良さそうだったら動画を見るというのがおすすめ。以下にまとまっている。**
https://docs.google.com/spreadsheets/d/1v1BTe7zIE84uY8i97XfE98mCmY-8OlsPnKKiY-8k4KQ/edit
JetBrainsはコミュニティ支援を色々やっているという話。イベント開くとライセンスがも
UnityでAndroid向けアプリ開発をしてみたい
Android向けアプリ開発をするために、アプリのビルドなどのやり方を少しずつ整理していくつもりです。
モチベーションは、自分のスマホで、自分が作ったものを動かしたら面白そうだという好奇心です。# デバッグについて
## Unityの設定
* [Edit -> Project Settings -> Editor]に移動し、[Device] を [Any Android Device] にする
* [File] -> Build Settings] に移動し、[Run Device] ドロップダウンからAndroid端末を選ぶ## Android端末の設定
### 初回
* Unity RemoteアプリをGoogleストアからダウンロードする
* PCに対して、Android端末のRSAにアクセスすることを許可する(下記の過程で要求される)### 次回以降
* USBを接続し、[USBの設定]から[ファイル転送]を選ぶ
* [デバイス情報]の[ビルド番号]を7回連打して、[開発者モード]を有効にする
* 開発者向けオプションの[USBデバッグ]を有効にする
* 開発が終
Claude 3.5 SonnetのArtifactsを有効にしてPlantUMLで作図させてみた
## はじめに
こんにちは!今回は、最新AIモデル「Claude 3.5 Sonnet」とその新機能「Artifacts」を使って、PlantUMLで作図を行ってみました。Anthropicが提供するこの新機能は、生成AIの新しい可能性を示しており、特にコード生成やドキュメント作成において大きな力を発揮します。以下の記事でやってみたことを、Claude 3.5 Sonnetでやってみました。
https://qiita.com/Tadataka_Takahashi/items/f20a472d1dea3abffa99
## Artifactsとは?
「Artifacts」は、Claudeとの対話を通じてコンテンツを作成し、管理できる新機能です。特に長いコンテンツや修正が必要なコンテンツ、会話の文脈外で使用されるコンテンツ(例:スライド、マインドマップ、コード)に適しています。現時点で無料版でも時間あたりの実行数に限りがありますが、試してみました。実行スピードが速く、少ないプロンプトの指示で精度の高いコンテンツを作成できる体験ができました。また、左側にプロンプトの画面が表示さ
LinuxでAndroidを接続して写真などを転送する方法
# LinuxでAndroidとデータ転送を行う
今回はLinuxでAndroidをUSB接続してデータ転送(差分バックアップ)を行います。
## 準備するもの
+ Andriod端末 (今回はXiaomi 13T Proを使用します)
+ Linuxマシン (今回はUbuntuを使用します)
+ USBケーブル“`bash:/etc/os-release
PRETTY_NAME=”Ubuntu 22.04.4 LTS”
NAME=”Ubuntu”
VERSION_ID=”22.04″
VERSION=”22.04.4 LTS (Jammy Jellyfish)”
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/”
BUG_REPORT_URL=”https://bugs.launchpad.net/ubuntu/”
PRIVACY_POLICY_URL=”htt
どうやってもAndroidスマホが重い場合の別のアプローチ
## ・こんなところに書くことでもないが・・・
さて、Qiitaというのはエンジニアtoエンジニア向けのブログサービスであって、システムに詳しくない一般ユーザ向けのサービスではないのは周知のとおりである。時に、筆者のスマホ(Torque 5G)がどうもLINEを開くにも一苦労、いらないアプリを削除しても重いしウイルスチェックをしても引っかからない状況であった。
しかしながら、各事象を一つずつ紐解いた結果、原因が判明し対処を行ったところスマホの動作が正常になった。
しかもどのサイトを見てもその対処が書いてない始末。
**じゃあQiitaに書くしかないな。**
## ・結局のところ原因は何なのさ
まぁこんな記事を見ている時点で切羽詰まっているだろうし原因を記載する。
原因は、**SDカードの劣化による破損**
であった。
一般のアフィリエイトブログであればつらつらと毒にも薬にもならないことを書くのだがここはQiitaである。
筆者の解析した結果を以下に記載していく。## ・AndroidにおけるSDカードの役割
AndroidにおいてSDカードを使用する場合、役割は
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