- 1. Compose multiplatformで作ったデスクトップアプリを実行可能な形にする
- 2. N予備校 Android アプリで Android 14 の「写真と動画への部分的なアクセス権を付与する」に対応した話
- 3. Azure Maps をAndroidで使ってみる
- 4. Android の Gboard で全角チルダを入力する「さまぁ~ずハック」
- 5. FlutterアプリのUIテスト自動化を取り組んでみた話
- 6. Play Consoleで個人デベロッパーの氏名、住所が公開されることになります
- 7. 盗まれても安心(?)Android端末管理(前編)
- 8. 【Android】GoogleMapで自分の向いている向きを示す方法【kotlin】
- 9. [JetpackCompose] SavedStateHandleでUiStateを保持しながら、StateFlowでライフサイクルを意識する
- 10. Android 正規表現 カタカナ判定方法
- 11. Hiltの実行時エラーを防ぐKSPプラグインを作ってみた
- 12. 【Android】WorkManager でファイルのダウンロードの進捗を監視する
- 13. [2023年12月版]ElixirDesktopでスマホアプリを作る – Phoenix1.7のアプリを起動(モバイルアプリ化する)
- 14. 特定のタイミングでバックボタンを無効化する
- 15. LINEログインの実装を検討してみた
- 16. GitHub Copilotを調教してAndroid開発してみた
- 17. runCatchingの代替関数を作って警告&Quick Fixを提供するCustom Lintを作る
- 18. Androidの権限自動削除でプッシュ通知はどうなるか調べてみました
- 19. SnapFlingBehaviorを使ってLazyListのスクロールで要素を常に真ん中に表示する
- 20. 【Android】Paging 3で実装するEndless Grid Design
Compose multiplatformで作ったデスクトップアプリを実行可能な形にする
# やりたいこと
ComposeMultiplatformを使ってアプリを作成し、そのアプリを実行可能な形でビルドしたい。# 手順
今までgradleコマンドでrunにしていたところをpackageに変えるだけ。
例えばComposeApp:run→ComposeApp:packageただし自分はボタンからやりたかったので
AndroidStudioのBuildConfigurationsからプラスボタンを押してGradleを選択。
以下のような設定を書き込んでApply。
![](https://storage.googleapis.com/zenn-user-upload/41e335c0cef0-20231225.png)# エラーが起きた
>Failed to check JDK distribution: ‘jpackage’ is missingというエラーが出た。
しかし
>jpackage –versionしたところちゃんと入っている。
# 解決策
Android StudioのSettingからBuild. Execution, Deploym
N予備校 Android アプリで Android 14 の「写真と動画への部分的なアクセス権を付与する」に対応した話
#
[N予備校 Android](https://play.google.com/store/apps/details?id=nico.ed.nnn.zane&hl=ja&gl=US&pli=1) チームでテックリードをしている鎌田です。
本記事は [Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android) の 25 日目の記事です。
2023 年 10 月、[Android 14](https://developer.android.com/about/versions/14) がリリースされ、今回も様々なアップデートがありました。
その中でも`N予備校` Android アプリでは、[写真と動画への部分的なアクセス権を付与する](https://developer.android.com/about/versions/14/changes/partial-photo-video-access)について対応する必要がありました。
本記事では、「写真と動画への部分的なアクセス権を付与する
Azure Maps をAndroidで使ってみる
この記事は[NTTテクノクロスアドベントカレンダー2023](https://qiita.com/advent-calendar/2023/ntt-tx)、シリーズ 2 の25日目の記事です。
こんにちは、NTTテクノクロスの中島進也([なかしょ](https://twitter.com/nakasho_dev))と申します。
シリーズ 2 の1日目の記事では[よりよいペアローテーションを求めて](https://qiita.com/nakasho-dev/items/7acd356a06677177848b)という記事を書きました。
本記事ではAzure MapsをAndroidで利用する方法について自分で学習しながら紹介していきたいと思います。
本記事を書く時点で私のAzure Mapsの利用経験は0です。## Azure Maps とは?
[Azure Maps](https://azure.microsoft.com/ja-jp/products/azure-maps)はインテリジェントな位置情報対応およびマップ ベースのエクスペリエンスを構築することを可能にする一連の
Android の Gboard で全角チルダを入力する「さまぁ~ずハック」
# 波ダッシュと全角チルダ
全角の「から」としてよく用いられる記号には、「波ダッシュ」と「全角チルダ」の2種類が存在する。
[波ダッシュ・全角チルダ問題 – とほほのWWW入門](https://www.tohoho-web.com/ex/dash-tilde.html)
「波ダッシュ」は[MDNでは好まれる](https://github.com/mozilla-japan/translation/wiki/Editorial-Guideline)が、フォントとして「MS ゴシック」を設定した[サクラエディタ](https://sakura-editor.github.io/)では太い不自然な表示になり、SJIS では保存できないとみなされる**特殊な記号**である。
一方の「全角チルダ」は、フォントとして「MS ゴシック」を設定したサクラエディタで普通の表示になり、SJIS での保存も普通にできる**普通の記号**である。
![波ダッシュと全角チルダ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/
FlutterアプリのUIテスト自動化を取り組んでみた話
この記事は、[テスト自動化の成功事例を語ろう by T-DASH Advent Calendar 2023
](https://qiita.com/advent-calendar/2023/t-dash02) の8日目です。# はじめに
Flutterアプリを趣味で作っていて、UIやLintなどのテストを自動化するCI/CDを一度やってみたくて、この度取り組んでみました。
今回は様々あるテストの中でも、UIのビジュアルテストに取り組んでいきます。毎度デグレしていないかアプリのUIを見て触って確認するのも大変ですしねぇ。
ではやっていきましょう。# 今回実施するテスト
## Golden Test
FlutterのGolden TestはFlutterフレームワークで使用されるUIコンポーネントやWidgetのビジュアル外観をテストするためのアプローチの一つです。
Golden Testにより、UIが期待通りに変更やレンダリングされていることを確認することができます。Golden TestはGolden Fileと呼ばれる正しいUIの画像ファイルと、スクリーンショッ
Play Consoleで個人デベロッパーの氏名、住所が公開されることになります
## 今後、Play Consoleで氏名、住所が公開されることになります
デベロッパーアカウントで有料アプリ、アプリ内課金を有効にしている場合、アプリページ上で開発者の氏名、住所が公開されることになります。## 無料アプリだけを公開している開発者の氏名、住所は公開されない?
有料アプリ、アプリ内課金を有効にしていないデベロッパーアカウントについては現在、どのようになるか検証を行っていないため未知数です。## どのように表示されるの?
下画像は実際にどのように表示されるかPC上のブラウザからPlayストアのアプリページを表示した場合の様子です。Android端末から閲覧した場合もレイアウトが縦方向になるだけで基本的には変わりはありません。
![PlayStore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3660841/20190e95-4435-ce85-f766-cd69b696a247.png)「デベロッパーについて」という項目が新規に追加され、そこに提出した書類の氏名・住所が掲
盗まれても安心(?)Android端末管理(前編)
後編:
## 最近のお話
いつものようにゴロゴロしながらX(旧twitter)を眺めていると[「デモに紛れて強奪が発生。Apple Storeが襲撃された」](https://news.tv-asahi.co.jp/news_international/articles/000317657.html)というセンセーショナルな記事が目につきました。
しかしながら自分の居住地は日本。対岸の火事よろしく「大変そうだなぁ」なんて思っていたところ
続報で[「強奪されたiPhoneは遠隔操作ができるようになっている」](https://front-row.jp/_ct/17367545)との情報が目に飛び込んできました。日本でも物騒なニュースが見られる昨今。
いつ何時、暴力が支配する弱肉強食の世界へと変貌するやもしれません。
ヒャッハーと言いながらスマホを強奪していくモヒカン頭が現れる可能性もあります。
そんな時 **「盗られても安心。そうiPhoneならね」** と、Apple最強卍みたいになるのは避けなければなりません(Android狂信者)というわけで、 **Androi
【Android】GoogleMapで自分の向いている向きを示す方法【kotlin】
# はじめに
今回はタイトルにもある通り、GoogleMapを使った時に自分の向いている向きを示す方法を記事にします。
GoogleMapの機能を使用して簡単に実装できそうなものですが、調べて見てもなかなか出てこなかったので記事に残して今後すぐに思い出せるようにしておこうと思います。# 実践
以前記事にした
と、下の参考記事にあるGoogleMapのマーカーをアレンジする方法を併せて実装していきます。private var myDirectionMarker :Marker? = null
override fun onSensorChanged(event: SensorEvent) {
val azimuth = event.values[0] // 方位
if (event.sensor.type == Sensor.TYPE_ORIENTATION) {
if (myDirectionMarker == null) {
// 初めての場合はaddMarkerでマーカー
[JetpackCompose] SavedStateHandleでUiStateを保持しながら、StateFlowでライフサイクルを意識する
## 前提
`lifecycle-runtime-compose:2.6.0`から[collectAsStateWithLifecycle](https://medium.com/androiddevelopers/consuming-flows-safely-in-jetpack-compose-cde014d0d5a3)が追加されました。
これを使用することで、ライフサイクルを意識した方法でFlowを収集することができます。デフォルトではonStartからonStopの間にFlowが更新されたとき、再Composeが走ります。
例えば私は下記のように使っています。
“` AuthorViewModel.kt
@HiltViewModel
class AuthorViewModel @Inject constructor() : ViewModel() {
val _uiState: MutableStateFlow= MutableStateFlow(UiState())
val uiState: StateFlow= _u
Android 正規表現 カタカナ判定方法
正規表現の文字判定です。
カタカナを判定する方法のサンプルです。“`Validation.kt
fun isKatakana(inputText: String): Boolean {
val regex = Regex(“^[\u30A0-\u30FF ]++\$”)
return inputText.matches(regex)
}
“`個人的に正規表現があまり得意ではなく、すぐ忘れ使う時にまた調べ直したりするので、理解していきたいです。
Hiltの実行時エラーを防ぐKSPプラグインを作ってみた
Android Advent Calendar 2023の24日目の記事です。
みなさん、Hiltは使ってますか?
Hiltとは、公式が出しているDIライブラリで、
私はHiltがないと、もうアプリ開発できないぐらいにお世話になっています。https://developer.android.com/training/dependency-injection/hilt-android?hl=ja
今回は、Hiltをもっと使いやすくするKSPプラグインを作ってみました!
## Hiltってどんなの?
まずは、Hiltの説明から。
例えば、
こんな感じで自前のクラスを作ったとして、“`kotlin
class InjectTarget {
fun doSomething() {
println(“doSomething”)
}
}
“`こちらのクラスをHiltを使って、ViewModelにInjectしたいとなったら、
まず、コンストラクタに`@Inject`アノテーションを付与したのちに、“`kotlin
class Inj
【Android】WorkManager でファイルのダウンロードの進捗を監視する
MIXI DEVELOPERS Advent Calendar 2023 24日目の記事です
https://qiita.com/advent-calendar/2023/mixi
WorkManager の [Long-running worker](https://developer.android.com/develop/background-work/background-tasks/persistent/how-to/long-running) を使用すると、時間のかかるタスクをバックグラウンドで実行できます。
数年前までは[フォアグラウンドサービス](https://developer.android.com/develop/background-work/services/foreground-services?hl=en)を自力で実装する方法が一般的でしたが、現在では WorkManager を使って[進捗状況の監視](https://developer.android.com/topic/libraries/architecture/workmanager/ho
[2023年12月版]ElixirDesktopでスマホアプリを作る – Phoenix1.7のアプリを起動(モバイルアプリ化する)
こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop Phoenix1.7のアプリをWindows11 + WSL2で動かす手順をまとめなおします。# 目的
Phonenix+LiveViewでCRUD機能のあるアプリを実装してエミュレータやスマホ実機で動かしたい。## 実行環境
Windows 11 + WSL2 + Ubuntu 22.04
Elixir v1.15.7-otp-26
Erlang v26.1.2
Phoenix v1.7.3# 今回やりたいこと
Phoenix1.7をElixirDesktopの環境で動かしたい。
前回、デスクトップ(PC)での動作確認ができたので、android-studioのプロジェクトを作ってモバイル(SP)での動作確認をしたい。# android-studioプロジェクトの作成
## android-example-appのリポジトリをクローン
プロジェクトのルートディレクトリまで戻って、android側の設定をしていきま
特定のタイミングでバックボタンを無効化する
## はじめに
この記事はand factory.inc Advent Calendar 2023 24日目の記事です。
昨日は @arusu0629 さんの「[スクラムマスターに俺はなる!](https://qiita.com/arusu0629/items/1613717b611b9076b0b9)」でした。特定のタイミングでバックボタンの操作を無効にする方法について記載します
## やりたいこと
– ViewPagerのような親Fragmentと子Fragmentを使っていて、親Fragmentで既に、OnBackPressedDispatcher を使ってバックボタンの操作をカスタマイズしている
– 子Fragmentでアニメーションなどを再生中はバックボタンの操作を無効にしたい
– アニメーション再生中以外は親Fragmentでバックボタンのイベントを受け取リたい## 実装
“` 子Fragment.kt
private val backPressedCallback by lazy {
// OnBackPressedCallback
LINEログインの実装を検討してみた
## やりたかったこと
– webアプリ
– スマホアプリ
LINEログインをどちらも実装したい。## 実際にどうやるのか
細かい事は公式マニュアルに細かく記載してあるのではしょりますが、
簡単な図を使ってざっくりと説明して行こうと思います。### 必要な設定・情報
実装するにあたり必要な前設定ですが。
– 公式アカウントを作成
– LINE Developersにビジネスアカウントでログイン
`サービスを利用するにはLINEアカウントと連携してください。`と表示されるので、連携する。
(公式アカウントで始めていれば問題ないと思いますが個人のLINEアカウントが必要ケースもあります)
– プロバイダーとチャンネルを作成#### チャンネルを作成と以下の情報の取得が必須
:::note info
Channel ID: チャンネル登録時に発行されるID
Chennel secret: チャンネル登録時に発行される秘密鍵
Callback URL: 認証後の遷移先 URL 登録(複数可)
:::### ユーザーに認証と認可を要求する
LINEプラットフォームとユーザーの
GitHub Copilotを調教してAndroid開発してみた
今回はイヤイヤ期に入ってしまって意地でもコードを書きたくなくなった僕がGitHub Copilotを調教して代わりにAndroid開発をさせてみた結果を共有したいと思います。
## GitHub Copilotって何?
AIがコードの補完をしてくれる機能です。
ZOZOでは[GitHub Copilotが全社導入](https://techblog.zozo.com/entry/introducing_github_copilot)されているので僕も試しに使ってみる事にしました。Android StudioにてPluginsを入れてGitHubにログインする事ですぐに使えるようになりました。![スクリーンショット 2023-12-22 20.31.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617906/5037d2c4-ec7d-b259-0c8c-6fe7f2f109a8.png)
![スクリーンショット 2023-12-23 18.46.41.png](https://qiita
runCatchingの代替関数を作って警告&Quick Fixを提供するCustom Lintを作る
runCatchingつかっていますか?
kotlinではJavaの検査例外もcatchしなくてもエラーにならなくなったこともあり、よく分からないけど念のためcatchしておくかー、などと使ってしまいがちです
“`kotlin
runCatching {
someMethod()
}.getOrNull()
“`としておけば、仮にsomeMethodが何らかのExceptionを投げたとしてもすべてcatchした上で結果をResultにラップしてくれます。getOrNull()をコールすれば、Exceptionが投げられた場合はnullと置換することもできます。
ただ、このrunCatchingの実装は以下のようになっていて、Throwableすべてをcatchしています。
“`kotlin
public inline funrunCatching(block: () -> R): Result {
return try {
Result.success(block())
} catch (e: Throwabl
Androidの権限自動削除でプッシュ通知はどうなるか調べてみました
Androidアプリの開発を行っているsinoです。
アプリが長期間利用されなかった場合にアプリの権限が自動削除されますが、プッシュ通知についてどういった動作をするか調べたので結果を残しておきます。
結論を先に記載しておくと、何もしなくてもアプリを起動したらプッシュ通知を受信するようになります。Googleのアナウンスは [こちら](https://developer.android.com/topic/performance/app-hibernation?hl=ja) です。
Android 12以上でプッシュ通知に関する内容を抜粋すると
`アプリの実行時の権限はリセットされます。`
`アプリはプッシュ通知(Firebase Cloud Messaging を介して送信される優先度の高いメッセージなど)を受信できません。`と記載されているので、プッシュ通知は届かなくなります。そして
`ユーザーが次にアプリを操作すると、アプリは休止状態を終了し、再びジョブ、アラート、通知を作成できるようになります。`
とありますが
`ただし、以下の処理がアプリに対して行われることは
SnapFlingBehaviorを使ってLazyListのスクロールで要素を常に真ん中に表示する
## SnapFlingBehaviorの紹介
https://developer.android.com/reference/kotlin/androidx/compose/foundation/gestures/snapping/SnapFlingBehavior
LazyRowやLazyColumnにてスクロール後,中心に近い要素がセンターにSnapされるようになります.
![画面収録 2023-12-23 22.37.28.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691046/93c13ae7-04bd-265c-5654-1fba61b3cf91.gif)
## 基本的な形
“`kotlin
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SnapX(){
val state = rememberLazyListState()
val flingBehavior = rememberSnapFl
【Android】Paging 3で実装するEndless Grid Design
:::note info
この記事は、[ラクスアドベントカレンダー 2023](https://qiita.com/advent-calendar/2023/rakus) の 24 日目の記事です 🎄
:::## はじめに
最近チームの育成で使用するサンプルアプリを作成してますが、育成カリキュラムの中でページングの実装を取り入れようと検討しています。モバイル開発では、API からデータを取得し、リスト表示するようなユースケースも多いと思いますので、今回はAndroid の Paging 3 ライブラリの基本的な使い方を紹介したいと思います。
## ページングライブラリの概要
ページングライブラリは、[Android Jetpack](https://developer.android.com/jetpack) で提供されるライブラリの 1 つです。現在のバージョンは3系なので、Paging 3 と呼ばれたりします。
さて、このページングライブラリですが、使用することで大規模なデータセットからローカルストレージやネットワーク経由でデータのページを読み込んで表示させることがで