- 1. Appiumを用いたモバイルネイティブアプリVRT(Visual Regression Testing)環境を構築する
- 2. WSAを自作アプリでざくっと調べた感想
- 3. 命名規則の名称と実例をまとめてみた
- 4. 【Android】FABのアイコンのTintについて
- 5. ViewStubを含むレイアウトは、ViewStubをinflateしたあとにViewBindingへのbindができないので注意しよう
- 6. Androidで保険業界の単語帳を作る vol.2 ~画面を作成する~
- 7. Android: Kotlin でファイルの MD5 を計算する
- 8. [Android][Kotlin]圧縮ネイティブ・ライブラリについて
- 9. Androidで保険業界の単語帳をつくる vol.1 ~いざ、Android Studio!~
- 10. Androidで保険業界の単語帳をつくる vol.0
- 11. [Flutter]デプロイゲートでAndroidのプロジェクト名を変えるには
- 12. 【Flutter/Android】DartDefinesで、flavorをする
- 13. 【Flutter】intro_slider の使い方
- 14. 【Android】時間を表示するView『AnalogClock』
- 15. AndroidStidioファイル内のコード置換方法(Mac)
- 16. Room等で作成したDBの配置先とDB内を参照する方法
- 17. Jetpack ComposeでViewModelを使わずに、Composable関数を使って状態とロジックを切り出す!
- 18. AndroidのAPN Type一覧
- 19. Jetpack Composeで画面幅を取得して4分割する方法
- 20. Unity で Google Mobile Ads (AdMob) を使うコード
Appiumを用いたモバイルネイティブアプリVRT(Visual Regression Testing)環境を構築する
これまで、iOSネイティブアプリのE2Eテスト実現のために、Appium+TypeScript環境を構築してきました。
最後に、これまで構築してきた環境にVRT環境を追加します。webdriverioにのサービスに`wdio-image-comparison-service`という画像回帰テストのサービス(プラグイン的な立ち位置)があります。しかし、こちらのサービスはWebブラウザ向けであり、モバイルネイティブアプリでは動作しません。
そこで、筆者は[wdio-native-app-compare](https://github.com/wswebcreation/wdio-native-app-compare)を導入し、モバイルネイティブアプリ上でのVRT環境を構築しました。
# 前提
これまで構築してきたAppium+TypeScript環境についてはこちらの記事をご参考ください。https://qiita.com/5enxia/items/3e84b3eaaf54fd8e5f00
# 環境構築
## VRT(Visual Regression Testing)の導
WSAを自作アプリでざくっと調べた感想
Windows Subsystem for AndroidがWindows Insider Previewに載ったということで、ついついうっかり試してしまったので、Android屋から見た雑感をメモっておきます。(2022/8/24現在)
# 結論
ChromebookのAndroidよりもマシ。
以下、雑感。他人のアプリはほぼ使ってません。
# Android バージョン
昨年書かれた記事ではAndroid 11となっていたのですが、インストールされたのはAndroid 12でした。ホーム画面がないのに、Material Youテーマとか死なずに動く。(意味はないけど)
Androidのメジャーアップデートに追随できているので、この先のメジャーアップデートにもついて行けるかも?# メモリ使用量
Surface Laptop Go (RAM 8GB)にインストールしたところ、起動前 4GB→Androidアプリ起動後 6GB(2GB空き)ぐらいの状態。もう少しメモリ欲しい。
# CPU利用率
Core i5 (4C8T)で、アイドル状態でも4core x 1.0~1
命名規則の名称と実例をまとめてみた
# 初めに
今回は、Android実装で使う命名規則の名称と実際の形を合わせて紹介していこうと思います。
### 本文
基本的には下記の4種類のみとなります。
* ローワーキャメルケース
* アッパーキャメルケース
* ローワースネークケース
* アッパースネークケース***ローワーキャメルケース***は`forExample`と記述します。
先頭の頭文字を小文字にして、そのあとに来る要素語の頭文字を大文字にしていく命名規則になります。
関数名や変数名などに多く使われています。—
***アッパーキャメルケース***は`ForExample`と記述します。
こちらは***ローワーキャメルケース***の先頭の頭文字も大文字にした場合の書き方です。
こちらはクラス名に多く使われており大きな括りであることが多いです。—
***ローワースネークケース***は`for_example`と記述します。
全て小文字で記述し、アンダーバーでつないでいく命名規則になります。
xmlファイルや要素名に使われることが多いです。—
***アッパースネークケース***は`FOR_EXA
【Android】FABのアイコンのTintについて
## 結論
FAB(FloatingActionButton)の色は、
`app:tint=”@null”` もしくは `app:tint=”@color/xxxx”` で指定する。`app:tint=”@null”` は元のアイコンの色が表示される。
`app:tint=”@color/xxxx”`では、colors.xmlで定義した色やandroidの色を使用できる。
(元のアイコンの色は無視される)たとえば、Vectorアセットで白色でアイコンつくったけどやっぱ青にしたいなーってときは、
`app:tint=”@color/xxxx”`で指定したほうが便利。## 備忘録として書くきっかけ
Vectorアセットで作成した白のアイコンを、
FAB(FloatingActionButton)のsrcに設定すると、アイコンの色が黒くなってしまった。`android:tint=”@color/white”` と指定しても直らなかった。
![スクリーンショット 2022-08-24 162245.png](https://qiita-imag
ViewStubを含むレイアウトは、ViewStubをinflateしたあとにViewBindingへのbindができないので注意しよう
タイトル通りの罠にはまったので書きます
通常ViewBindingはActivityやFragmentの最初にinflateもしくはbindするだけなので問題は起こらないでしょうが、常時必要ではないモジュールにviewだけを渡して内部で再bindしている箇所があり、そこにViewStubを追加したことで問題が発生しました。
ViewStubを含むレイアウトを扱う際に、以下のようにinflate後にViewBindingへbindしようとすると
“`kotlin
val binding = HogeBinding.bind(view)
…
binding.viewStub.inflate()
…
HogeBinding.bind(view)
“`NullPointerExceptionが発生してクラッシュしてしまいます。
“`
Caused by: java.lang.NullPointerException: Missing required view with ID: com.example.myapplication:id/view_stub
“`V
Androidで保険業界の単語帳を作る vol.2 ~画面を作成する~
# オブジェクト構成
単語帳に最低限必要な機能といえば単語の一覧を表示することと、データを保存するデータベースの2点かなと思ってます。
いろいろ調べていたところ、まあうさブラザーズさんが書いている以下のブログの記事のオブジェクト構成がヒントになるんじゃないかと思ったので、こちらを参考にしながら開発していこうかなと思います。https://www.ma-chanblog.com/2021/02/android-listview.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/9b5cc170-ed04-6727-23e3-7d528564098b.png)
「テキスト画面」は今のところ作るつもりはないので、メイン画面とデータベースとそれをつないでいるオブジェクトを作成していこうかなと思います。
今のところどんな風に開発するか、まったく見当がついていませんw
# メイン画面を作成する
メイン画面を作ろうと思いますが、記事を読むとメイン画面も「メイン画面」の
Android: Kotlin でファイルの MD5 を計算する
Android や JVM 環境の Kotlin でファイルの MD5 を計算する実装です。
# 前提
InputStream からデータを読み込み、JDK の `java.security` を利用して MD5 を計算する方針とします。
ファイルサイズがある程度大きい (1MB ~) 状況を想定し InputStream からの読み込みとしています。
# 実装
“`kotlin
import java.io.InputStream
import java.security.DigestInputStream
import java.security.MessageDigest…
val inputStream: InputStream = … // File の inputStream など
val md5 = DigestInputStream(inputStream, MessageDigest.getInstance(“MD5”)).use { input ->
val buffer = ByteArray(1024 * 1024) // buf
[Android][Kotlin]圧縮ネイティブ・ライブラリについて
新規アプリケーションをPlay Consoleにアップロードする場合はAndroid App Bundle (AAB) 形式が義務付けられているが、既存アプリケーションでリリース手順を変更したくないとか、デバッグ用途でadbコマンドで端末にアプリケーションをインストールする場合はAndroid Application Package (APK) 形式でアプリケーションを生成することになる。
Play ConsoleにアップロードされたAABは、ストアによってインストールする端末に対応しAPKを生成し、ストアによって署名して端末にダウンロードされインストールされる。
![AAB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12540/ec80ade4-4223-cc42-9cf7-f75b5ded54a4.png)
アプリケーションのサイズを縮小するという目的で、デフォルト値がサイズ縮小の方向になるようになった。
Gradleで署名されたAPKを生
Androidで保険業界の単語帳をつくる vol.1 ~いざ、Android Studio!~
# Android Studioを立ち上げる
Androidアプリを作成する開発環境はAndroid Stuidoを使用していきます。
Googleから提供されているIDEで無料でだれでも使えます!Android Studioを立ち上げるとアクティビティと呼ばれる開発をする際のベースとなる画面の選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/534e54f2-4dbe-ee67-ef4e-2b9c439083df.png)いろいろあるみたいですが、よくわからないのでEmpty Activityを選択します。
# ソースコードについて
最初に表示されるのは以下の画面
かっちょいい✨
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/9c301353-2695-67f2-191d-166fcaf0b9ff.png)基本的には画像の通り[activi
Androidで保険業界の単語帳をつくる vol.0
# この記事について
この記事ではAndroidアプリ開発未経験である私が簡単な単語帳の開発とGoogle Playへのリリースまでを記事にしてまとめていきたいと思ってます。
自分のアウトプット兼学習教材みたいなものです。# なんで保険業界?
自分自身保険業界に身を置く人間なのですが、専門用語がとにかくたくさんある、、、
保険はその業界で働いている人だけではなく、生きている限り全員関わるものなので、会って損することはないかなと思いました。かなりニッチなものですが、、、
単語帳なんて学習用にみんな開発しそうだし、ニッチなほうがいいでしょ!少し真面目なことを言うと、義務教育の中で金融教育が実施され始めた時代背景とかもあり、
保険という金融商品をもっと知っていく必要があるのではないかなと思ってます。
その一歩としてこういう単語帳があってもいいんじゃないかなと考えてます^^# とりあえずやってみる
Googleが提供している学習教材とかやってみたけど、実際に自分が作りたいもの作ってるほうが身につくと思うのでとりあえず開発してみる。
[Flutter]デプロイゲートでAndroidのプロジェクト名を変えるには
AndroidManifestのlabel名を変更すればOKです。
ディレクトリの場所はこちら。
アプリ名/android/app/src/main/AndroidManifest.xml
![スクリーンショット 2022-08-22 17.26.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/e51bd2fc-3f2d-fea4-1328-70c96387d58f.png)
Flutter側のプロジェクト名を変更したのに、なぜか変わらないなーって思って調べたらこんな単純なことでした。
どなたかの参考になれば幸いです。
【Flutter/Android】DartDefinesで、flavorをする
### FlutterのAndroidで、flavorをする場合、下記の2つある
* flutter_flavorizrを使う
* DartDefinesを使うflutter_flavorizrは、コマンドで自動的にファイルを作成・変更を行ってくれるので楽なのですが、ファイルが複数出来たり、管理が煩雑になります。
DartDefinesは、手動でファイルを修正する必要がありますが、ファイルが増える訳ではないので、管理が楽になります。
今回は、DartDefinesでflavorを実現したいと思います。### build.gradleを編集
“`diff_gradle:app/build.gradle
…def flutterVersionName = localProperties.getProperty(‘flutter.versionName’)
if (flutterVersionName == null) {
flutterVersionName = ‘1.0’
}+def dartDefines = [:]
+if (project.hasP
【Flutter】intro_slider の使い方
## 初めに
intro_slider とは、以下のようなチュートリアルの画面を作成するためのパッケージです。
![intro_slider_sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/7316c25b-ecb8-0b73-4b22-d77848f9862c.gif)## 準備
まずは、[intro_slider パッケージ](https://pub.dev/packages/intro_slider) を「 pubspeck.yaml 」に記述します。
パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。“`yaml: pubspeck.yaml
dependencies:
flutter:
sdk: flutterintro_slider: ^3.0.9
“`
Pub get をして準備は完了です。## 実装
まずは実装したい画面で intro_slider をインポートします。
“`dart: ma
【Android】時間を表示するView『AnalogClock』
# はじめに
前回は デジタル時計を表示する『TextClock』を記事にしました。
よければそちらも見てください →[【Android】時間を表示するView『TextClock』
](https://qiita.com/Tsubasa12/items/443db0ce5d89667a25bf)今回は アナログ時計を表示する『AnalogClock』を紹介します。
# AnalogClock
使い方としては 先述したTextClockの記事に書いてあるのと同じで
AnalogClockクラスか LayoutにAnalogClockタグを追加して用います。AnalogClockではデジタル時計のように時計の型式を変えることはできませんが、
AnalogClockでは時計の見た目を変更することができます。xml側で
android:dial属性で, 時計の文字盤の画像
android:hand_minute属性で, 時計の長針の画像
android:hand_hour属性で, 時計の短針の画像
をそれぞれ指定することができます。また、AnalogClockはAPI le
AndroidStidioファイル内のコード置換方法(Mac)
今回はxmlなのでViewのidの名前を変更するときなど、ConstraintLayoutを使用しているとViewのidを複数箇所に記載している事などがあるので、その場合に便利だったりします。
# ファイル内のコード置換方法
`command + F`でまず、検索を表示させます。
ここにリネーム前文字を入力します。`command + R`でリネーム後の文字を入力します。
Replaceを押すと置換されます。
Replace Allはファイル内全て置換されます。![スクリーンショット 2022-08-21 19.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/c97cdd19-3266-b2de-afc8-fb7b077f0bd1.png)
このスクリーンショットの場合androidがappに置換されます以上です。
Room等で作成したDBの配置先とDB内を参照する方法
# はじめに
Room等でデータベース絡みの実装を行う際に、DB内のデータを参照したり、DB消してみたり等色々検証が必要ですよね。
その際に必要不可欠なDBの配置先とDB内を参照する手順を備忘録的にまとめておこうと思います。# DB配置先確認方法
画面右下のDevice File Exprorerから、[data] > [data] > [パッケージ名] > [databases]の中にroom等で作成したdbが配置されています。
こちらから対象のdbを消したりできるので、検証時に便利です。# DB内参照方法
Jetpack ComposeでViewModelを使わずに、Composable関数を使って状態とロジックを切り出す!
## はじめに
最近、Androidアプリ開発においてJetpack Composeを使用する機会が増えたことを嬉しく感じています。この記事では、**Jetpack Compose** で、 **ViewModelを使わないで** に **Composable関数(Factory Function)** を使って、**状態とロジック** をViewの外に切り出す方法 について、説明しています。
**Composable関数(Factory Function)** を使えば **「状態やロジック」** を簡単にViewの外に切り出すことができます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f39333730332f65613365366164372d306130302d323436342d323935392d3737386566313365363232372e706e67.png](
AndroidのAPN Type一覧
# 前提
Androidのモバイルネットワークの設定においてAPNを登録することがあります。その中でもAPN Typeに関してまとまった記事がなかったため、メモがてらに作成します。## Android コード
https://android.googlesource.com/platform/frameworks/base/+/a79bad63a3a813d0c38babd8d74c4076a43d47d/telephony/java/android/telephony/data/ApnSetting.java# Type 一覧
| 内容 | 文字列 | 概要 |
| —- | —- | —- |
| TYPE_ALL_STRING | “*” | データ接続用のAPNタイプ |
| TYPE_DEFAULT_STRING | “default” | デフォルトのデータトラフィックのAPNタイプ |
| TYPE_MMS_STRING | “mms” | MMS(Multimedia Messaging Service)トラフィックのためのAPNタイプ |
| T
Jetpack Composeで画面幅を取得して4分割する方法
## はじめに
今回はまず画面の幅を取得して、その上で最小値を設定して4分割した値を取得し、Jetpack ComposeのRowの中でそれぞれ要素に横幅を設定して呼び出していこうと思います。## 画面の幅を取得
まず、画面の横幅を取得するところからやっていこうと思います。“`Kotlin
@Composable
fun Root() {
DetailSection(
modifier = Modifier
.fillMaxWidth()
)
}@Composable
fun DetailSection(
modifier: Modifier = Modifier
) {
val configuration = LocalConfiguration.current.screenWidthDp.dpRow(
modifier = modifier,
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.
Unity で Google Mobile Ads (AdMob) を使うコード
## 前提
– Unity 2021.3.8f1
– Google Mobile Ads Unity Plugin v7.1.0
– Apple App Store、Google Play Store
– この記事では、Google Mobile Adsの一部機能を限定的に使用し、汎用性のない部分があります。
– この記事では、以下の内容を扱いません。
– Google Mobile Adsのルールやコンソールの使い方など
– Unityエディタの使い方やモバイル向けのビルド方法など
– この記事のソースは、実機でテストしていますが、本番広告でのテストはしていません。
– プロジェクトで使用したIDはテスト用のもので、ストアで公開する製品に使用できるものではありません。## できること
– AndroidまたはiOSで、AdMobを利用します。
– 複数のバナー、インタースティシャル、リワードビデオ広告の表示を制御し、シーンに応じて広告を切り替えます。
– 報酬の獲得を検出します。## リソース
### このプロジェクト
– [ソース (GitHub)](https