Android関連のことを調べてみた2022年12月11日

Android関連のことを調べてみた2022年12月11日
目次

【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

ざっくり説明する

元記事を表示

ImageLoaderとCompose

bitFlyerでAndroidプロダクトを担当しています藤原です。
最近はガンダムエボリューションばかりやってます、メイン機体はザクⅡ(射撃)を使っています。いやー面白いです。

さてさて、突然ですがみなさんCompose書いてますか?
弊社Androidプロダクトでは少しずつですが移行を進めています。

Compose化を検討しだした辺りで弊社ではImageLoaderをGlideからCoilに移行しました。
ComposeでのImageLoaderですが、Coilを使うのが一般的と思われます。公式ドキュメントでも画像読み込みにはCoilの例が挙げられています。CoilはもともとAccompanitに含まれていたので当然かもしれませんが。
今更ですが、CoilをComposeで使うとこんな感じです。

“`kotlin
@Composable
fun CoilImage() {
val painter = rememberImagePainter(
data = “https://picsum.photos/300/300”,
builde

元記事を表示

Android Jetpack Composeを試してみた

# はじめに
[CYBIRD Advent Calendar 2022](https://qiita.com/advent-calendar/2022/cybird “CYBIRD Advent Calendar 2022”)の11日目担当の@chikako_ikedaです。
スマホアプリを専門に担当するチームにてAndroid側の担当をしています。
10日目は@kyukkyu81さんの「[クリスマスの夜に向けて密かに歌を練習するアレクサ](https://qiita.com/kyukkyu81/private/569c6b84be6e7687b068 “クリスマスの夜に向けて密かに歌を練習するアレクサ”)」でした。
まさか、アレクサに歌を歌わせることができるとは…昨年よりもパワーアップしてますね!

# 概要
最近のAndroidアプリ開発の動向を追っている方であればご存知かもしれませんが、Googleから「JetPack Compose」というコンポーネントが正式リリースされました。
このコンポーネントは、**素早くデザイン込みの開発**ができることが売りとなっています。
とても良

元記事を表示

5分で出来るCompose風画像編集機能

Androidで、できるだけ簡単に画像編集機能を作成したい。
できればUIは自分で弄りたい。
更にできればUIはXMLではなく、Composeで作成したい。

という方法をこれから説明致します。

まず、画像編集機能はこちらのライブラリを利用します。
https://github.com/burhanrashid52/PhotoEditor

PhotoEditorでは画像編集機能を持ったViewを提供してくれて、
描く、文字表示、消しゴム、フィルターといった機能が実現できます。
PhotoEditorの良いところは機能のみを提供してくれてそれを実現するUIは利用側が好きに作ることができるところです。

PhotoEditorを使用する方法をざっくり説明すると、
PhotoEditorViewという専用のViewをXMLレイアウトにセットして
PhotoEditorViewとContextからPhotoEditorを作成します。
そのPhotoEditorに対して設定を行うことで描く、文字表示、消しゴム、フィルターといった機能を利用できます。

Jetpack Composeにはご

元記事を表示

【Jetpack Compose】List型のMutableLiveDataがViewに発火しない原因はこれだった

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77444/59e03f96-cf52-3f7e-352f-79ecf8a5fef3.png)

しばしハマってしまったのですが、原因がわかったらそらそうだ!となったメモです。

# List型の要素が追加されたらViewを更新したい
MutableLiveDataにList型を入れて、要素が追加されたらViewを更新しようとするサンプルです。

“`kotlin:kotlin
class SampleViewModel : ViewModel() {
val items = MutableLiveData>(ArrayList())
var counter = 0

init {
add()
}

fun add() {
counter++
items.value?.add(counter.toString())

元記事を表示

【Android】Jetpack DataStoreの単体テストをサクッと行ってみた

# はじめに
皆さん、ごきげんよう!れぶです!

今回の記事では、SharedPreferencesの代替策である`Jetpack DataStore`に関して、基本的な単体テストの手順を整理します。

**Preference DataStore(以降、DataStore)を用いた値の読み書きを単体テストレベルで検証したい方**に特に参考になればと思います。それでは、参りましょう!!

# 開発環境
* MacBook Air
* Android Studio Dolphin | 2021.3.1
* Kotlin
* compileSdkVersion 33
* targetSdkVersion 33
* minSdkVersion 21
* Jetpack DataStore 1.1.0-alpha01

# 前提
Boolean値を読み書きするDataStoreを対象とします。“saveLaunch()“の呼び出し前後で、保存された値が正しく変更できているかをテストします。

“`LaunchDataStore.kt
val Context.dataStore: Data

元記事を表示

iPad/Androidから仮想デスクトップを使いたい【Azure Virtual Desktop活用】

# Azure Virtual Desktopを活用しよう

こんにちは。Minecraft Education Edition の記事の続きになります。

https://qiita.com/mana_cat/items/b62b4fb5c11086ff3ed6

## AVDのメリット

### BYOD端末接続時のセキュリティ確保にも

様々な端末でWindowsを楽しみたい。または、Windowsに固定して、セキュリティポリシーを統一化したいなどの観点から、Windowsを標準OSとして使うパターンがあります。構成管理も一元化できますし、端末のセキュリティ設計について十分な対策ができるメリットがあります。

接続元が macOSでも、iPadでも、Androidでも、接続先の仮想デスクトップにWindowsを入れて活用できるサービスがあるんです。
そう、その名も「Azure Virtual Desktop」(以降、AVD)

様々な用途で楽しむことができると思います。楽しみ方は無限大なので、ぜひご活用下さい。

– macOS/iPad/Android から W

元記事を表示

Flutter・webViewで、Webサービスをモバイルアプリ上に実装し、個別通知機能を追加した話

# ? はじめに ?
アドベントカレンダー参加したいなということで・・・
今日は、「Flutter × webView で開発したサービスに個別通知機能を追加」した話をします。
同じような境遇の方がいたら、ぜひ実装方針参考にしてみてください。
また、他の方法がある方はアドバイスお願いします。

# ? 背景 ?
現在、会員制ECサービス Pantrii のバックエンド兼クライアントエンジニアをやっています。
こちらのサービスは「オンライン版コストコ」というキャッチフレーズで活動しています。

https://prtimes.jp/main/html/rd/p/000000005.000084659.html

こちらのECは主にアプリ利用をメインターゲットにしており、開発に Flutter を用いています。
是非、記事を読む際に、下記からアプリをダウンロードして触りながら読んでみてください。
– [iOS](https://apps.apple.com/jp/app/pantrii-%E3%83%91%E3%83%B3%E3%83%88%E3%83%AA%E3%83%BC-%E3%82

元記事を表示

UnityでAndroidアプリのメモリ使用量を軽量に取得する

こんにちは、[グレンジ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/grenge)の10日目担当のmesshiです。
Advent Calendar駆動の発信となっていますが、今年もニッチな記事を書こうかなと思います。

さて本記事は、Androidアプリのメモリ使用量を「 **軽量に** 」取得する方法について取り上げます。
Unityを前提とした記事とはなっていますが、取得方法に関してはAndroid OS共通の手法となります。

# 背景
## よくある取得方法
UnityでAndroidのネイティブコードからプロセスのメモリ使用量を取得する方法は、パッと探しただけで以下の記事がありました。
– [標準Profilerだけに頼らないUnityのプロファイリングに挑んでみる](https://www.klab.com/jp/blog/tech/2015/1046552735.html)
– [【UnityAsset】FPSMemoryFriends – UnityでAndroid/iOSのFPSとメモリ使

元記事を表示

【Kotlinで学ぶCS】第1回 コルーチンを1から理解する

# はじめに
みなさんこんにちは、[たかっしー](https://twitter.com/takashiho_2)と申します。
今月から毎月、「Kotlinで学ぶコンピュータサイエンス」という題目で、Kotlinの文法の深い理解とともに、コンピュータサイエンスへの知識を深めていくという目的で記事を執筆していきます。
かくいう私もCSについての深い理解があるわけではないので、記事を執筆しながら学ばせていただきます。誤植や間違いがありましたらご指摘の程よろしくお願い致します。

第1回は「Corutineとは何者なのか」を1から理解するという記事になっています。

# 今回必要なコンピュータサイエンスの知識
それでは早速、コルーチンを理解する上で必要な知識の解説を行います。

## CPUについて
私たちが普段使用しているPC、スマホにはCPUが入っています。
このCPUには、**コア**、**スレッド**というものが用意されており、これらによって処理が実行されています。

ここで大事なことが、CPUの一つのスレッドは**ある瞬間に1つのタスクしか行うことができない**ということです。

元記事を表示

ModalBottomSheetLayoutの使い方とTips・トラブルシューティング

Android Advent Calendar 2022の10日目の記事です。
本記事では、[Compose Material](https://developer.android.com/jetpack/androidx/releases/compose-material) のライブラリで提供されている ModalBottomSheetLayout の使い方とTipsを紹介します。

※ 2022年12月10日(ver 1.3.1)時点で ExperimentalMaterialApi であることから動作は今後変更される可能性があります。

# ModalBottomSheetLayoutについて

マテリアルデザインにおけるBottomSheetとしては、Standard, Modal, Expanded の3種類が紹介されており、その中のModalが本記事で紹介するLayoutに該当します。

Android Viewの中では [BottomSheetDialogFragment](https://developer.android.com/reference/com/googl

元記事を表示

2つ(以上)のAPI先をAndroid HiltでDIするときの備忘録

Androidにて向き先が違うREST APIを1つのアプリで投げることがあると思います。
実際DIしようとしたらちょっとハマったので、その備忘録。
HiltはDaggerから発展したのでDaggerでも同じことができるかもしれません。

# 結論
DIが競合しているので(この表現が正しいか分からないが)
@Namedアノテーションを利用して区別するだけ。

# 例
他のライブラリ構成はRetrofit、okHttp、Gson
~~~ ApiModule.kt
@Module
@InstallIn(SingletonComponent::class)
object ApiModule {

@Provides
@Singleton
fun provideApiOneRetrofit():Retrofit{
return Retrofit.Builder()
.baseUrl(REST_ONE_URL)
.client(provideApiOneHttpClient())
.a

元記事を表示

始めてのAndroid

AndroidスマホとOBD2アダプターを使って車の内部情報を取得するのに「obd2-lib」を活用

https://qiita.com/naoto_deuxchats/items/33564ad8eec4ad310041

【Android】バックグラウンド(フォアグラウンド サービス)とマルチスレッド(Thread)の動きを簡単な事例で実験的に調査

https://qiita.com/naoto_deuxchats/items/447d609166bc639c9436

【Android】Variable is accessed from within inner class, needs to be final or effectively final

https://qiita.com/naoto_deuxchats/items/30be27ac368f8898ba6a

「状態ホイスティング」の説明

https://qiita.com/uhooi/items/6b3ccac83539576d20f3

Android UnitTestでR.stringのテストを劇的に

元記事を表示

無職の開発未経験者が、KotlinでAndroidアプリを独学でリリースするまでを振り返ってみた

こんにちは。halkoです。
私は現在、駆け出しのAndroidエンジニア(志望…?)として日々個人開発をしている21歳女です。
**つい先日、KiNaという、単語帳を自作できるAndroidアプリをリリースしました。**
![feature_graffic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3026395/14f2eaa6-24aa-dfb5-3e68-9f6c5a631d2c.png)

https://play.google.com/store/apps/details?id=com.koronnu.kina
開発というものに初めて触れたのは約1年前。
**スクールや教材などにはお金をかけずに、独学でリリースまでこぎつけました。**
開発未経験の状態から、リリースができるようになったまでの流れを、自分のため、そしてあわよくば同じように未経験からアプリリリースを目指している方のために、振り返ってみたいと思います。

※(注)私は、現在無職無収入で、リリースしたKiNaの利用者は3人(ぜ

元記事を表示

5G対応アプリをつくろうZ!Ⅱ

この投稿は、私が所属するKDDIテクノロジーで行っているアドベントカレンダーの9日目の記事となります。
モバイル通信の第5世代目の通信規格「5G」。対応エリアも広がり、5G端末を使っていれば、アンテナ横の「5G」のマークが点いていることも事も多くなりました。
しかし、まだまだ5Gは進化中です。
私の本日のアトレベントカレンダーでは、この「5GのアプリつくろうZ」の続きとして、前回紹介されてもらった機能をアプリ上でどのように実装するのか紹介させて頂きます。
# 前の記事
「5G対応アプリをつくろうZ!」
https://qiita.com/simdroid/items/4c755cac1357c6afe72c

# 5Gエクスペリエンス機能を使おう
## 前回からの続き
前号では5Gの特徴とともに、大容量通信を実現する際に、配慮すべき「5Gエクスベエンス機能」の紹介をさせてもらいました。

 1 5Gエリア判定
 2 5G通信速度の推定
 3 従量課金の判定

これらの判定や推定、従量期間判定を行う理由に対て紹介させてもらいました。
今回は具体的に、どのように設定するのかを紹介させて頂き

元記事を表示

TextViewで文字列があふれたときに自動スクロールさせる

リソース側
“`

“`

ソース側
“`
binding.textView.setOnClickListener {
it.isSelected = true
}
“`

元記事を表示

PagerDutyからの電話にマナーモードを貫通させる方法

PagerDutyなどオンコールが深夜になったとき、スマホがマナーモードになっていた結果対応できなかった、ということはないですか?
しかし、オンコールに対応するためスマホのマナーモードを常に解除しておくとそれ以外の電話も音が鳴ってしまいます。

# 問題

マナーモードがONでもPagerDutyからの電話だけは音を鳴らしたい。

# 解決法

PagerDutyの電話番号を特別な連絡先に追加して、マナーモードを貫通するようにしましょう。

## iPhoneの場合

[iPhoneで特定の人からの着信は常に音を鳴らす方法 \- 週刊アスキー](https://weekly.ascii.jp/elem/000/001/860/1860259/)

## Androidの場合

AndroidはOSによって方法が違う。

### Galaxy等の場合

お気に入りを使用する。
[Androidスマホの「サイレントモード」とは? 設定・解除からマナーモードとの違いまで解説 \| アプリオ](https://appllio.com/android-smartphone-quickly-tur

元記事を表示

EditTextでエンターキーが押されたらSWキーボードを閉じる

“`
binding.editText.setOnEditorActionListener { _, actionId, keyEvent ->
val isPushedEnter = actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_NEXT ||
actionId == EditorInfo.IME_ACTION_DONE ||
(keyEvent != null && keyEvent.action == KeyEvent.ACTION_DOWN &&
keyEvent.keyCode == KeyEvent.KEYCODE_ENTER)
if (isPushedEnter) {
// ソフトキーボードを消す
val imm = requireContext().getSystemService(Co

元記事を表示

LinearLayoutで固定サイズの子ビューの残りを別の子供ビューに割り当てる

layout_heightに0dp、layout_weightを1にするだけ。
“`

【Jetpack Compose】Pagerを使った画面でもCollapsing Toolbarを実装したい

この記事はand factory.inc Advent Calendar 2022 9日目の記事です。
昨日は @KKusumi さんの 【Android】Android StudioのPullRequest機能が便利すぎるので絶対使った方がいい【IDE】でした。

## Jetpack Composeで折りたたみツールバーを実装したい

Android Viewで折りたたみツールバーを実装するときは、CoordinatorLayoutやCollapsingToolbarLayoutを使うことで実装することができました。

Jetpack Composeではまだそのようなものは用意されてはいません。
現時点で僕が今把握しているCollapsing処理を実装するにあたって参考になるものは以下のようなものがあります。

### 1. Material3のTopAppBarでのcollapsingサポート

Material3の[TopAppBar](https://developer.android.com/reference/kotlin/androidx/compose/materia

元記事を表示

OTHERカテゴリの最新記事