- 0.0.1. DatePickerDialogで日付選択 + 曜日表示 | Kotlin
- 0.0.2. コンポーザブルのテストを爆速にする方法
- 0.0.3. androidxで見るMetadataHolderとはなんぞや
- 0.0.4. [Android]Jetpack ComposeのComposableのModifierを条件によって切り替えたい
- 0.0.5. Android Studio を Electric Eel にアップデートしたときにやったこと
- 0.0.6. HTMLのパースにjsoupを使って見た
- 0.0.7. Playground 環境を導入して機能開発を爆速にする
- 0.0.8. Android Studio Electric Eelで導入された新機能「App Quality Insights」を使ってみよう
- 0.0.9. 独学のプログラミングのヒント
- 0.0.10. [Android][Jetpack Compose]You cannot access the NavBackStackEntry’s ViewModels after the NavBackStackEntry is destroyed.
- 0.0.11. Androidの基本のキ!!!compileSdk・targetSdk・minSdkをざっくりまとめて理解する
- 0.0.12. Android FCMの実装
- 0.0.13. 【Android】Groupについて
- 0.0.14. fbjni を使ってみる (1): ビルド設定と簡単なメソッド
- 0.0.15. [material3] Jetpack ComposeでDate Pickerを表示する
- 0.0.16. MotionLayoutを使ってSplashScreenにアニメーションをつけてみた
- 1. MotionLayoutとは
DatePickerDialogで日付選択 + 曜日表示 | Kotlin
DatePickerを使って日付選択を行う!ということをしていたところ、
あれ?曜日が表示されない。
曜日出そうと試行錯誤しても、番号だけ表示される….
ということにぶち当たってしまいました:frowning2:結論、
DatePickerDialogで日付表示をさせて、
その日付から曜日を求めている感じで落ち着いた。ただ、DatePickerではCalenderを使用していますが、
曜日表示するところではLocalDateを使用しているので、
良くないとかあるのかな?という疑問は残ってる。ので、これで良いのか悪いのか、もしよろしければ何故良くないのか、普通はこうやってやるんだよ~って教えてくださる方がいたら嬉しいです:pray:
(おかしくないよ!って事もお知らせいただけると安心します..)## 完成図
![DatePicker選択前.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2499099/2ec702b5-3b09-51bd-f020-ad89877d3b80.j
コンポーザブルのテストを爆速にする方法
# はじめに
コンポーザブルのテストを行う際に、AndroidTestディレクトリを使ってテストを行うことが多いと思います。その際に、毎回エミュレーターを立ち上げて実行するため一回のテストにかかる時間は通常のユニットテストと比べて多くかかります。
そこで、エミュレーターを使わずにコンポーザブルに対するテストを行うために、`Robolectric`を使ってユニットテストとしてテストを行ってみようと思います。
:::note
この方法は、Droid Kaigi 2022のアプリでも採用されています。
:::
https://github.com/DroidKaigi/conference-app-2022# 依存関係の追加やテストのための設定
一番大事なのが、依存関係の設定です。
`testImplementation`や、`androidTestImplementation`を正しく使用しないとエラーが発生してテストが正しく実行されない可能性がありますのでご注意ください。## モジュールレベルのbuild.gradleの設定
**unitTest**と**androi
androidxで見るMetadataHolderとはなんぞや
# 背景
ちょうど最近ライブラリが更新されたということで、アプリ別言語設定を触っていてAndroidManifestで設定した項目がこちら。“`xml:AndroidManifest.xml
“`あるいはandroidx.credentialsでも見た項目はこちら。 (追記: 実際利用する際にこの記述は不要でした)
“`xml:AndroidManifest.xml
[Android]Jetpack ComposeのComposableのModifierを条件によって切り替えたい
例えば
“`kotlin
val modifier =
if (isMax) {
Modifier.fillMaxWidth()
.fillMaxHeight()
} else {
Modifier.fillMaxWidth()
.wrapContentHeight()
}AnyComposable(modifier = modifier)
“`
というようにheightの部分だけ条件によって変更したい時
以下のコードだと.applyの中身はmodifierとして適用されない
“`kotlin
AnyComposable(modifier =
Modifier.fillMaxWidth()
.apply {
if (isMax) {
fillMaxHeight()
} else {
Android Studio を Electric Eel にアップデートしたときにやったこと
# 概要
業務で開発しているアプリを Android Studio Electric Eel でビルドできるようになるまでに対応したことを記載する。
# Electric Eel 対応
– Android Studio Electric Eel をダウンロード
– ビルドが通らなくなる可能性を考慮し、既存の Android Studio をアップデートするのではなく新規でインストール
![スクリーンショット 2023-01-31 15.36.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34926/775277ef-6968-4064-eaef-93b5c45ea1bd.png)– Android Studio Electric Eel でプロジェクトを開くと ↓ のようなバルーンが表示されるので `upgraded`
![スクリーンショット 2023-01-26 17.54.40.png](https://qiita-image-store.s3.ap-northeast-1.
HTMLのパースにjsoupを使って見た
# HTMLをパースするライブラリ
今回あるサイトのHTTPのレスポンスのHTMLをパースする必要がありました。HTMLは基本はXMLなので色々なパーサがありますが、jsoupを使ったら意外とよかったのでそれを紹介したいと思います。## そもそも・・・なんでHTMLをパースする必要があるのか?
今、開発しているアプリがAndroid端末内でCSVファイルを作ってそれをWebサイトにアップロードする仕組みなんですが、そのWebサイトがWEB APIを提供していなくて、(おそらく、10年以上前に作った、そのまま)普通のブラウザからHTMLでのアップロードのインタフェースしか提供していません。
1. ログイン。
1. CSVを添付して送信。この時正常か、エラーになる
1. 送信結果を過去の履歴も含めて取得
1. ログアウトという、一連の流れになっています。こんなの、APIあれば一発なのに・・・と思うのが普通でしょうが。各リクエスト/レスポンスのやり取りで、ブラウザから来る前提なので、結果のレスポンスは全てHTMLです。そのHTMLの中の特定のタグの値を見て正常か、失敗かを判定する必要
Playground 環境を導入して機能開発を爆速にする
## はじめに
こんにちは。with で Android エンジニアをしている [石田(@maxfie1d)](https://github.com/maxfie1d) です。
本記事では 最近導入して機能開発が爆速になった Playground 環境について紹介します。## Playground 環境とは
アプリ全体ではなく、アプリの一部の機能のみをサポートしたアプリのことを with では Playground 環境と呼んでいます。ミニアプリやデモアプリと呼ばれることもあるようです。
アプリが大規模化していくにつれ、アプリ全体をビルドしたり、実際に触って動かしてみたりといったことが徐々にツラくなってきます。
記事執筆時点で with はサービス提供開始より 7 年が経過しており、with Android 版の LOC は 20 万行を越えそこそこの規模のコードベースになりつつあります。フルビルドをしてアプリが起動した上に何回も画面をタップしてやっと動作確認をしたい画面にたどり着く…。これを 1 日に何度も繰り返すのは大変です。
この課題に対応するために 先日 wi
Android Studio Electric Eelで導入された新機能「App Quality Insights」を使ってみよう
# はじめに
現在のAndroid Studioのバージョンである「Electric Eel」において、**Crashlytics**レポートを表示することができる**App Quality Insights**という機能が導入されました。
今回は、Firebaseは導入済みだけれど、**Crashlytics**はまだ使ったことがない開発者の方向けに記事を書きました。
プロジェクトでの**Crashlytics**の導入から、Android Studioで**App Quality Insights**を使ってそのレポート内容を確認する方法までをざっくりとカバーしておりますので、開発の際のご参考にしていただけると幸いです。
:::note warn
Firebase SDK自体の導入については解説しておりませんのでご注意ください。
:::# Crashlytics for Androidを使うメリット
Crashlytics for Androidを使うことによって、次のレポートを取得することができます。
– クラッシュ
– 致命的でないエラー
– アプリケーションが
独学のプログラミングのヒント
今日の洗練された時代では、すべてを簡単に学ぶことができます。たとえば、プログラミングは独学で学ぶことができます。プログラミングとは正確には何ですか?プログラミングは、コンピューター上でプログラムを作成するプロセスです。作成されたプログラムは、ソフトウェア、Web サイト、Android または iOS アプリケーションなどの形をとることができます。
本題に入る前に、重要な情報があります。プログラミングを始めたい方はDicoding Academyで学べます . Android、iOS、クラウドからフロントエンド、バックエンドのWeb開発者まで、さまざまな分野があります。これらの各フィールドには、初心者から上級者までさまざまなレベルもあります。すごいでしょ?すぐにクラスを確認して登録してください。
はい、本題に戻ります。この記事では、プログラミングを独学で学べるように、さまざまなヒントについて説明します。すでに興味がありますよね?さあ、よく見てみよう。
プログラミングとは?
![programming-eunoiamediaID.png](https://qiita-imag
[Android][Jetpack Compose]You cannot access the NavBackStackEntry’s ViewModels after the NavBackStackEntry is destroyed.
NavControllerのpopBackStackを使って前画面に戻るという実装をしたが
実行時にエラーが起きてアプリが落ちた。“`
FATAL EXCEPTION: main
Process: …….., PID: 6785
java.lang.IllegalStateException: You cannot access the NavBackStackEntry’s ViewModels after the NavBackStackEntry is destroyed.
at androidx.navigation.NavBackStackEntry.getViewModelStore(NavBackStackEntry.kt:202)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:104)
at androidx.navigation.compose.NavHostKt.NavHost(NavHost.kt:67)
.
.
.
省略
“`解決方法
===
popBackStack(
Androidの基本のキ!!!compileSdk・targetSdk・minSdkをざっくりまとめて理解する
# はじめに
中古のAndroidスマートフォンを調べていたのですが、安価で買えるのがどれも2017年や2018年に販売された端末でAndroid 8.0などのOSがデフォルトでインストールされているものがほとんどだったりします。
そこで開発中のアプリがそれらの中古スマートフォンで正しく動作してくれるのかを調べていくと`compileSdk`や`targetSdk`、それに`minSdk`などの設定が大事だとわかりました。
今まで、ふんわりとした意識で使っていたこれらの設定を改めて調べて、まとめて自分の忘備録として使用しようと思いこの記事を書きました。あくまで忘備録として書かれているということを意識しながら読んでいただくと幸いです。
# Android SDKとは
AndroidSDKはGoogleが開発したAndroidプラットフォーム用のソフトウェア開発キットです。
AndroidSDKには、Androidアプリの開発に必要な開発ツールやテストのために必要な全てーのツール及びライブラリがコンポーネントという形で含まれています。
![13.png](https://q
Android FCMの実装
# 実装の流れ
#### 資格情報
実装する FCM 機能によっては、Firebase プロジェクトから次の[資格情報](https://firebase.google.com/docs/cloud-messaging/concept-options?hl=ja&authuser=0#credentials)が必要になる場合がある。#### AndroidManifestの編集
バックグラウンドでアプリの通知を受信する以外のメッセージ処理を行う場合に必要です。
フォアグラウンド アプリで通知を受信したり、データ ペイロードを受信したり、アップストリーム メッセージを送信したりするには、このサービスを拡張する必要があります。
“`
【Android】Groupについて # はじめに
前回、前々回とXML上で利用できるGuidelineとBarrierという補助線についての記事を書きました
[【Android】Guidelineとは【Kotlin】](https://qiita.com/Tsubasa12/items/04a3676922cbfe2a7ba3)
[【Android】Barrierとは【kotlin】](https://qiita.com/Tsubasa12/items/a73448cf2ca261ff4d87)
それと関連したもので、今回はGroup について記事にしようと思います。# Group
Groupとは、簡単に言うと いくつかのViewを一つの指示で同時に操作できるようなものです。
例えば、画面に表示されたViewをすべてGONEにしたい場合にそれぞれのViewにGONEの指示を出すのではなく、けしたいView達を一括りにしたGroupに対してGONEの指示を出すだけでそれらを画面上から非表示にすることができます。使用方法は
“`
fbjni を使ってみる (1): ビルド設定と簡単なメソッド
# はじめに
Java と C++ を連携させるためには JNI を使うのが基本だけど、あまり使いやすいものではない。これを少し簡単にするために Meta が [fbjni](https://github.com/facebookincubator/fbjni) というライブラリを公開している。使ってみたところ、次の点が便利に感じた。
* C++ から Java のメソッドを呼ぶときに、長い Java のメソッドシグニチャ文字列を書く必要がない。
* Java から C++ の関数を呼ぶときに Java のパッケージ名、クラス名、メソッド名をくっつけた長い C++ 関数名書く必要がない。
* Java の `String` と C++ の `std::string` の変換を自動的にやってくれる。
* 一部を Java, 一部を C++ で実装した様なハイブリッドクラスというものを作れ Java と C++ の密な連携がやりやすい。
* `std::function` を内包した Java のオブジェクトを C++ で作って Java に渡しておいて、後で Java から C++
[material3] Jetpack ComposeでDate Pickerを表示する
## 背景
Compose Material3の[1.1.0-alpha04](https://developer.android.com/jetpack/androidx/releases/compose-material3?hl=ja#1.1.0-alpha04)で `Date Picker` が追加されました。
これの使い方について、現時点で日本語の記事が見つからなかったので、簡単にまとめます。
なおアルファ版での確認のため、今後変更される可能性が大いにあります。## 実行環境
“` app/build.gradle
implementation ‘androidx.compose.material3:material3:1.1.0-alpha04’
“`## まず表示してみる
“` MyDatePicker.kt
@ExperimentalMaterial3Api
@Composable
fun MyDatePicker() {
DatePicker(datePickerState = rememberDatePickerState())
}@Expe
MotionLayoutを使ってSplashScreenにアニメーションをつけてみた
こんにちはandroidでアプリ開発を学習中のみのむしと申します。
今回は、前回に引き続きSplashScreenでアニメーションをつける方法について学びましたので、忘備録として残したいと思います。
MotionLayoutとは
アプリ内のモーションとウィジェットのアニメーションを管理できるレイアウトタイプで
ConstraintLayoutのサブクラスと公式ドキュメントに書かれています。
早速参考サイトや動画見ながら、実装していきたいと思います。https://developer.android.com/training/constraint-layout/motionlayout?hl=ja
drawable(background_bg.xml)に新規xmlファイルを作成する
“`xml
Jetpack composeでMaterial2とMaterial3を同時に使用すると色変わらなかった話
## 言いたいこと
Material2とMaterial3はちゃんと分けて使用したほうがいい。
と言うか、可能ならMaterial3にちゃっちゃと移行するべし。
(まだまだなところはあるから、めちゃくちゃ様子見しているが、、、)## 起こったこと
`contentColor`の色が適応されないやんけ!!
|想定|実際|
|—|—|
|![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064382/d149af49-cd97-19da-cbdf-e916df2b7fb5.png)|![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064382/36cb55e8-10e1-6a0d-0f70-f7379180209a.png)|
|![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2064382/78859879-
Androidの全角/半角の正規表現には注意が必要
## 結論:Androidで半角/全角区別する正規表現は`[0-9]`や`[a-zA-Z0-9_]`を明示的に使用しよう
端的に言うと`\d`を使用しても全角数字もマッチ、`\w`は全角英数字もマッチするよ、というお話## 起こったこと
先日、業務で「インプットからの文字列に、半角数字以外が含まれている場合はバリデーションエラーを表示する」というごくごく普通の要件を満たす正規表現を書いていました。
KMMでロジックを記載しテストコードもバッチリ通っているのに、いざAndroidで試そうと全角数字を入力してところバリデーションエラーが出ない!!という状況に至りました。もしかして、Kotlin/Native → Kotlin/JVMでの不具合か?と思って
[Kolint online](https://pl.kotl.in/Q_Fa3S0Oc)で試したところ“` kotlin
fun main() {
println(“全角 1 is ${isError(“1”)}”)
println(“半角 1 is ${isError(“1″)}”)
}fun isE
Android+OpenCVで特徴点マッチングをやってみた
# はじめに
Android Application(Java)上で画像認識をやってみたいなと思い、OpenCVを使ってて特徴点マッチングをやってみました。Windows 10 64-bit
Android Studio バージョン:Dolphin 2021.3.1 Patch 1
Android APIレベル:33
OpenCV SDKのバージョン:4.7.0
開発言語:Java# OpenCVの取り込み
Android StudioへのOpenCVの取り込みはすでに分かりやすくい記載されている方がいるので以下を参照https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802
※GradleのSync errorが発生する場合は以下を参照
https://qiita.com/yoshiyuki-N/items/b6dba2c7167681dba7b2
# 特徴点マッチングについて
画像認識の手法の一つ(という理解)です。
画像中に含まれている特徴量を計算して特徴点を抽出します。
異なる画像間で抽出した特徴量を比較し、近
String型やInt型に直接拡張関数を生やすのはいかがなものか(value classを検討しよう)
## 要約
– プリミティブ型に拡張関数を書くと、必要以上に広いスコープが対象になってしまう
– `value class`を活用するとスコープと用途を限定できて良いかも
– 絶対こうすべきという強い思想はまったくなく、検討する価値のある方法の1つという意## よくある場面
?<`1500`のようにIntで扱っている値を画面に表示する際に、`1,500円`のようにカンマ区切りにして「円」をつけたStringに変換したいな ```kotlin val formatedPrice: String = "%,d".format(1500) + "円" println(formatedPrice) // -> 1,500円
“`?<この変換はいろいろな箇所で使うから`Int.kt`ファイルに拡張関数として追加しておこう ```kotlin Int.kt fun Int.format(): String = "%,d".format(this) + "円" ``` ?<簡単に呼び出せるようになって、コードもスッキリした ```kotlin val formatedPrice