- 1. Playwrightで遠隔からAndroidデバイスをぐりぐり動かす。
- 2. Gradle Managed Devicesを使ってみた
- 3. Jetpack Composeで自動スクロールするカルーセルを実装する
- 4. AndroidでE2Eやってみる
- 5. flutter_webviewのWebViewをデバッグする
- 6. UnityIAPで課金を実装する (個人開発者向け)
- 7. はじめてのAppsFlyer: (1)アプリを管理画面に追加する
- 8. クソデブだった僕のプラトー現象を救う為にAndroidアプリを作った話
- 9. Issue Tracker で Google へ問い合わせてみた
- 10. Proto DataStoreを使ってみる
- 11. 【Jetpack Compose】可愛いBottomNavigation
- 12. RecyclerViewのスクロールを減速させてふわっと着地させる方法
- 13. Jetpack Composeで汎用的なAlertDialogを実装してみた
- 14. Android機械学習入門
- 15. JetpackComposeでテキストサイズを固定(dp指定)して端末の設定でテキストの大きさを変更しても依存しないようにする方法
- 16. 【Android】 RxJavaでsubscribeOnとobserveOnの違い
- 17. ZOZOTOWN Androidアプリホームバナーの実装をざっくり紹介
- 18. qiita始めてみた!(始めて数週間の初学者)
- 19. 【Android】画像読み込み時にヘッダー情報を付与する方法 by Picasso
- 20. 【Android】Module Graph Assert プラグインでマルチモジュールを健全に保つ
Playwrightで遠隔からAndroidデバイスをぐりぐり動かす。
この記事は、[ソフトウェアテスト Advent Calendar 2022](https://qiita.com/advent-calendar/2022/softwaretesting)の11日目の記事となります。
前日11日の記事は、@gremito さんによる「[Appium on Azure Pipelines](https://qiita.com/gremito/items/f2c981a05b8df1a21acb)」でした。本日の記事もアプリの自動操作関連です。https://qiita.com/advent-calendar/2022/softwaretesting
https://qiita.com/gremito/items/f2c981a05b8df1a21acb
## 概要
ChromeやWebKitを自動操作できるPlaywrightはもう皆さんご存知ですよね?
https://playwright.dev/
PlaywrightにはAndroidを自動操作する機能が実は備わっていて、AndroidネイティブアプリケーションもChromeブラウザ
Gradle Managed Devicesを使ってみた
こんにちは。メグリ株式会社でAndroidエンジニアをしている田邊です。
今回はGradle Managed Devicesを使ってみたという記事を書きたいと思います。今年10月に開催されたDroidKaigi 2022で外山さんがご発表された「[Gradle Managed Virtual Devicesで変化するエミュレータ活用術](https://speakerdeck.com/sumio/droidkaigi-2022-gradle-managed-virtual-devicesdebian-hua-suruemiyuretahuo-yong-shu)」を聴講し、個人的に試してみたいなと思っていたところ、今回のアドベントカレンダーのネタとしてちょうど良かったので実際に試してみました。
DroidKaigi 2022に参加したときの感想記事も書いていますのでよかったら御覧ください。
[DroidKaigi2022にオフライン参加してきました|メグリ株式会社|note](https://note.com/saiyou_mgre/n/n4822149218db)### Gr
Jetpack Composeで自動スクロールするカルーセルを実装する
Jetpack Compose の Pager を使って自動で動くカルーセルを実装するときの例になります。
(Jetpack Compose BOM 2022.12.00 & Accompanist v0.28.0 での実装です)#### 実装例
“`kotlin
@Composable
fun rememberAutoScrollPagerState(
interval: Long,
initialPage: Int = 0,
): PagerState {
val lifecycleOwner = LocalLifecycleOwner.current
val pagerState = rememberPagerState(initialPage = initialPage
AndroidでE2Eやってみる
[Ateam Finergy Inc.× Ateam CommerceTech Inc.× Ateam Wellness Inc. Advent Calendar 2022](https://qiita.com/advent-calendar/2022/finergy-commerce-tech-wellness) の14日目は株式会社エイチームウェルネス @yothio が担当します
レガシーなAndroidアプリ/最新のアーキテクチャを上手く追従できていないAndroidアプリを保守していこうと思った時「ロジックが正しいか」といったテストを書こうとしても、Viewとロジックが分離されていないことがあるためユニットテストを書き進めるのは難しく「見た目上変更がない」「アプリケーション全体で見た時に不具合が気づけるように」という思いの元、E2Eテストから先に作ってみようと思いました
# 初めに
最近Webばっかり書いていたのもあり「AndroidでのE2Eは難しそう、あんまりイメージがつかない」と漠然に思っていましたが、実際に触ってみると簡単にできたので「難しいと思って手を出したこと
flutter_webviewのWebViewをデバッグする
# はじめに
WebViewを組み込んだアプリを開発していると、WebViewのCookieや通信内容を見ながらデバッグをしたくなることがあります。
今回は、[webview_flutter](https://pub.dev/packages/webview_flutter)を使用しているwebviewのデバッグ方法を共有します。
※あまりフロントを触ってこなかったので、一部用語等が異なる可能性があります。ご了承ください。## 対象
Flutterのアプリ内WebViewを[webview_flutter](https://pub.dev/packages/webview_flutter)で実装している人## 用語
デベロッパーツール(Chrome)、Webインスペクタ(Safari)、などと呼ばれているアレを使用します。
どうやらChromeとSafariで呼び方が異なるようです。## 環境
– Mac
– Android Studio
“`
Flutter 3.3.9
Dart 2.18.5
webview_flutter: 3.0.4
“`# Flutter
UnityIAPで課金を実装する (個人開発者向け)
# 概要
課金アイテムを実装してと言われてUnityIAPを触ることになった人に向けて備忘録として残しておきます。
# 目次
[1.前提](#1-前提)
[2.UnityIAPをプロジェクトに追加する](#2-unityiapをプロジェクトに追加する)
[3.実装](#3-実装)
[4.ストアの設定](#4-ストアの設定)
[5.おわりに](#5-おわりに)# 1. 前提
CodelessIAPは使用しません。
レシート検証はこの記事では取り上げません。# 2. UnityIAPをプロジェクトに追加する
Unityプロジェクトを開き、雲アイコンをクリックしてUnityGamingServicesを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308814/18e1c421-74ce-7d85-efc0-2fb33ef02401.png)
InAppPurchasingをクリック
![image.png](https://qiita-image-store.s3.a
はじめてのAppsFlyer: (1)アプリを管理画面に追加する
AppsFlyerを試用してみる手順をまとめます。
エンジニアの方が手元でテストするための「デバッグアプリ」としてアプリを登録する手順でまとめますが、基本的な手順は、本番リリース済みのアプリでも同様です。
(スクリーンショットは2022年12月現在のものになります。)# サインアップ
まず、こちらのページからアカウントを作成するためサインアップします。
https://www.appsflyer.com/ja/start/
クレジットカードの情報などを入れなくても、アカウントを作れば下記の利用は無料でできます。試しにAppsFlyerを使ってみるのには十分かと思います。
– 12,000コンバージョン分(=計測リンク経由のアプリインストールもしくはアプリ再起動の数)の計測
– 各種有償のオプション機能の利用(30日間)
– ディープリンクを含むOneLinkの利用![Monosnap 無料でアカウント登録!クレジットカードは不要です 2022-12-09 17-28-04.png](https://qiita-image-store.s3.ap-northeast
クソデブだった僕のプラトー現象を救う為にAndroidアプリを作った話
[クソアプリアドベントカレンダー2022 13日目](https://qiita.com/advent-calendar/2022/kuso-app)を担当させていただきます[たかぎとねこ](https://twitter.com/takagimeow)です。
このアドベントカレンダーのテーマはご存知の通りクソアプリです。
なので、**クソ**デブだった僕がダイエットの停滞期を迎えた時に、モチベーションを落とさない為に作り続けた**アプリ**(略してクソアプリ)の開発からリリースまでの経緯を紹介をしようと思います。
## TL;DR
今回リリースしたのは「トレメモ」というアプリです。Google Play Storeでのみ配信中ですので、Androidユーザーの皆様には、ぜひご利用いただけると嬉しいです。
https://play.google.com/store/apps/details?id=com.takagimeow.trainingnoteapplication
## ダイエットを決意したきっかけ
振り返れば今年の1月、夜中に松屋の牛めしを1杯とセコマのおにぎり
Issue Tracker で Google へ問い合わせてみた
# 目的
– Androidアプリ開発において開発環境で不具合動作があったため、[Google Issue Tracker][link0] へ投稿しGoogleの中の人とやり取りしたので、投稿方法やその後の対応につきまとめる。# 環境
– OS:Windows10 Professional 22H2
– Android Studio Dolphin 2021.3.1 Patch 1# 概要
– [Google Issue Tracker][link1] はGoogle のバグトラッキングシステムであり、対象となるシステムは今回説明するAndroid開発に限らず、Google が Issue Tracker をツールとして使用することを認めた製品である。
– Issue Tracker は、Google製品一般のフィードバック収集用の汎用ツールではないため、Google製品であれば何でも問題点を投稿できるものではない。詳細は[こちら][link0]。
– 今回見つけた問題点は、Android Studio 内の AVD Manager からエミュレータ起動した際の不具合動作で
Proto DataStoreを使ってみる
# Proto DataStoreとは
ProtoDataStoreは、SharedPreferencesに変わるデータストレージであるDataStoreの一種であり、**Protocol Buffersを用いてプリミティブ型以外も保存できる**という特徴があります。# SharedPreferences, PreferencesDataStore, Roomとの比較
[DataStoreに関する公式ドキュメント](https://developer.android.com/topic/libraries/architecture/datastore?hl=ja)では、
>現在 SharedPreferences を使用してデータを保存している場合は、DataStore に移行することを検討してください。
>
と説明されており、DataStoreは、**小規模な永続的なデータを保存する際** に用いられていたSharedPreferencesの代わりとして使うことが推奨されています。## SharedPreferencesの代わりにDataStoreを使用すべき理由
なぜSha
【Jetpack Compose】可愛いBottomNavigation
# はじめに
この記事は[AdventCalender2022 Android](https://qiita.com/advent-calendar/2022/android)の12日目となります。何を書くか悩みましたが、Jetpack Composeの勉強の一環として、既存アプリを模倣してみたいと思います。今回模倣するアプリは、[東京都水道局アプリ](https://play.google.com/store/apps/details?id=jp.lg.tokyo.metro.waterworks.suidoapp&hl=ja&gl=US)のBottomNavigationBarです。
BottomNavigationBarがとても可愛いので、`Layout`や`Animation`の練習がてら、Composeで作ってみたくなりました。
成果物は下記です。
https://github.com/goutarouh/WaterworksBureauCloneなお私は当該アプリの開発などとは一切関係ありません。
(引っ越しを機に当該アプリを使い始めた利用者の一人です。)#
RecyclerViewのスクロールを減速させてふわっと着地させる方法
RecyclerViewのスクロールをふわっと着地させる方法の紹介です。
サンプルコードも掲載しますが、完全なコードはこちらにあります。list表示にGroupieを使っていますが、本記事では解説しません。
https://github.com/takarabe-hamuyatti/EasingTest
### 最終イメージ
![ezgif.com-gif-maker (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816697/1d5b2491-161d-7f8f-1dc2-8ecdc152a6e6.gif)### 減速させるためには
![dt_decel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1816697/e4df5c4c-542e-a4e2-760e-a5e34171fdbe.png)
目的地に到達する辺りで望んだ通りに減速させるということは、時間あたりに進ませる距離を事前に指示するということ
Jetpack Composeで汎用的なAlertDialogを実装してみた
:::note info
これは [ZOZO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/zozo) カレンダー Vol.5 の 12日目の記事です
:::Java, Kotlin, Jetpack Composeのそれぞれで作られた画面で同じデザインのAlertDialogを使用したいケースがあったので、Jetpack ComposeのAlertDialogを使って汎用的に使いまわせるDialogFragmentを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484337/d033df27-63b1-f098-c640-d8bad1073470.png)
## 概要
– AndroidViewsとComposeで使用するAlretDialogを共通化する
– 呼び出し元からテキストやボタンタップ時の処理を設定できるようにする## Jetpack Compose内でのダイアログ
C
Android機械学習入門
# Androidアプリにおける機械学習概要
アプリ開発における機械学習(ML)は、アプリがアプリ内の体験や経験に基づいて、学習と改善を自動的に実行できるようにします。
Androidでは、機械学習用のさまざまなツールと手法がサポートされています。
Android用MLアプリの開発でやることは主に以下の4つです。
1. 機械学習対応の設計: 製品の目標を明確にして、MLのデザインパターンを活用し、設計を行う
2. モデルの構築とトレーニング: MLモデルを作成するか、既存の学習済みモデルを追加する
3. 推論: Android端末またはクラウド上で動作する学習済みモデルを使用してデータを分析する
4. デプロイ: アプリのMLモデルのインストールと更新をする
## 機械学習対応の設計
製品の目標を明確にして、それを達成するためにMLのデザインパターンを活用し、設計を行います。これを繰り返し行う必要があります。
詳細を知りたい方は、Googleでは機械学習に関する2つのガイドがあるので、そちらを参照ください。
– [人間と AI に関するガイドブック](https://design.go
JetpackComposeでテキストサイズを固定(dp指定)して端末の設定でテキストの大きさを変更しても依存しないようにする方法
今回はJetpackComposeで端末の設定でテキストの大きさを変更してもテキストのサイズを変えたくない場合があったので、この方法を忘れないように残しておこうと思います。
# リファレンス
https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Density
# 実装方法
dpをspに変換して設定してあげれば良いのではないかと考えたので、変換方法を調べたところ上記リファレンスにリンクのある`Density`が見つかりました。
ではdpをspに変換して設定してみようと思います。“`TextSizeDemo.kt
@Composable
fun TextSizeDemo() {
val density = LocalDensity.current
Column {
Text(
text = “文字サイズ変わらない”, fontSize = with(density) { 14.dp.toSp()},
)
【Android】 RxJavaでsubscribeOnとobserveOnの違い
# はじめに
一度調べて使った後に、もう一度使おうとして全然覚えてなかったので
自分の中で整理しながら記事にしてみようと思いました# subscribeOn
subscribeされたときのスレッドを先頭から指定する
subscribeOnを複数設定したときには最初に設定されたものが使われる# observeOn
observeOnされたときからそれ以降の処理をどのスレッドで行うかを指定する
同じスレッド内で複数回使われることがある# 参考
https://www.kimullaa.com/posts/201806231026/#observeonhttps://chiiia12.hatenablog.jp/entry/2018/11/11/134612
https://qiita.com/hatt0519/items/c8875f822b752a188956
# おわりに
使い分けとしては通信などの時間のかかる非同期処理を行う場合はsubscribeOn
UI関係などの処理を行う際はobserveOn(UI関係での非同期処理はクラッシュの原因になることもあるので
ZOZOTOWN Androidアプリホームバナーの実装をざっくり紹介
この記事は[ZOZO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/zozo)その4の11日目の投稿です。本稿では、ZOZOTOWN Androidアプリホームバナーの実装を紹介しようと思います。
# 概要
ZOZOTOWNは2021年の3月にリニューアルしました。Impressさんの記事はこちら。
https://www.watch.impress.co.jp/docs/news/1312917.html
リニューアルにあたり、ホーム画面を新規で開発しています。本投稿では、このホーム画面に表示されるバナーの実装について紹介します。
# ホーム画面の実装
まずホーム画面全体の実装について紹介します。ZOZO
qiita始めてみた!(始めて数週間の初学者)
javaとawsとandroid studioを学習中!
覚えることは山ほどあるけどがんばります!
ところで「amazon web services 基礎からのネットワーク&サーバー構築」
という本は初学者にはハードルが高いのかな?完璧に読む必要がないだけ?
「エンジニアはめんどくさがりで効率を求める」とかよく聞くけど、基礎を勉強するうえでめんどくさいことは
避けては通れそうにないのかもね…
環境:windows10
基礎学習済:html,css,js,react,git,github,コンソール操作,SQL
(コンピューターはmacに変えたほうがいい?)
【Android】画像読み込み時にヘッダー情報を付与する方法 by Picasso
# はじめに
画像を非同期で読み込むライブラリは複数ありますよね。
最近はコルーチンを利用したcoilがよく使われている認識ですが、Picassoやglideもまだまだ現役かと思います。
そんな中でも今回はPicassoに関して、OkHttpライブラリと組み合わせて画像取得時に認証情報などのヘッダー情報を付与する方法を簡単にまとめたいと思います。# ヘッダー情報を付与する方法
実装としては以下になります。“`
override fun onViewCreated(
view: View,
savedInstanceState: Bundle?
) {
val builder = OkHttpClient.Builder()
.authenticator { route, response ->
response.request.newBuilder()
// 任意のヘッダー情報を設定してください
.addHeader(
“AU
【Android】Module Graph Assert プラグインでマルチモジュールを健全に保つ
# はじめに
モジュール分割することで、各機能の依存関係をクリーンに保つことができます。ただ、**モジュール分割されたものを正しく使わなければ、簡単に依存関係をゴチャついたものにできたりもします。**
例えば `:module1` と `:module2` があり、本来の設計思想として両者が依存しないようにしたいのに、下記の1行を追加することで簡単に `:module1` から `:module2` への依存関係を作り出すことが出来てしまいます。“`gradle:module1/build.gradle
implementation project(“:module2”)
“`それを防ぐためには、設計思想を開発者全体に行き渡らせ、意識することが大切になってきますが、そもそも間違った依存関係を作り出せないようにできたらそれに越したことはありません。
# Module Graph Assert
モジュールの依存関係にルールを作ることができるプラグインです。
https://github.com/jraska/modules-graph-assert
ざっくり説明する