Android関連のことを調べてみた

Android関連のことを調べてみた
目次

300 contribution から毎月Qiita投稿して6ヶ月で 1000 contribution 到達した話

# アドベントカレンダーの季節ですね^-^
こんにちは!
STORES 株式会社で STORES 決済 のAndroidエンジニアをしています、[みっちゃん](https://twitter.com/mimimi_engineer)です!

今日は12月1日!

エンジニアのみなさんはそろそろ会社のテックブログやQiitaなどのアドベントカレンダーに参加するぞと意気込んでいることかと思います。

実は私、2023年の目標に「毎月1記事書く」というのを掲げておりました。

![スクリーンショット 2023-10-20 14.25.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/8dbbe723-f1fc-4df8-63db-3e9b0a4cb0d5.png)

:::note warn
急にこんなものを見せられて困っている方もいるかと存じますが、私は目標厨なので毎年一年の初めに目標を設定し、年末に振り返ります。
:::

2022年12月時点では300 contributionもないく

元記事を表示

【Jetpack Compose】特定の文字だけ色を変える

# はじめに

この記事は[and factory.inc Advent Calendar 2023](https://qiita.com/advent-calendar/2023/andfactory) 1日目の記事です。

and factoryでandroidエンジニアをやっていますが、
今年学んだ小さいチップスを共有したいと思います。

# 特定の文字だけ色を変えるComposable

Jetpack Composeネタです。
こういうことしたいケースは稀ですが検索候補でヒットした文字列だけ色を変えるとかで使えそうですね。

![スクリーンショット 2023-07-06 10.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193770/617c6dff-918b-cbf0-459b-2c72cfe5633d.png)

# とりあえずコピペしよう

サンプルは赤色ですが、上記のプレビュー画像はオレンジ色の独自のカラーを指定しています。

“`kotlin
// 指定文字列を指定色

元記事を表示

テスト自動化の実行環境について考えてみた

# はじめに :xmas-tree:
Airtestを使用したE2Eテストの自動化を行なっています。最近はiOSとAndroid環境でデイリーのビルドに対して自動テストの実行を行い、ブロッカーチェックとして活用しています。
元々検証用のPC環境を順次増やしていった経緯から、iOSとAndroidで実行するPCが分かれていました。最近、この環境を統合する必要が出てきたため、その作業を行う中でいくつかの課題と今後の構成を考える機会があったので、その内容についてまとめてみたいと思います。

# 統合前の環境
図のようにキューを使用したシーケンシャルな実行環境になっています。スマートフォン端末も1台だけなのでとてもシンプルな構成です。

![スクリーンショット 2023-11-28 10.49.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542670/6c01ec0e-570d-e4af-0094-c496bf399cf4.png)

– tirgger.py:ビルドが作成されるとSlackメッセージ

元記事を表示

[Delphi] Android のダークモードに対応する方法

# Delphi はダークモードに対応していない

Delphi はスタイルで見た目をコントロールしているので、ダーク系のスタイルにすればダークモードになるよ、などと一部の記事に書いてありますが、それは残念ながら嘘です。
スタイルでダーク系の色になるのと、ダークモードの対応は全く別の話です。

↓下記の画像はダークモードが有効な端末でダーク系のスタイルにした所です。
ナビゲーションバーが白背景になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/e445746f-c169-2cae-f031-65a51b52d081.png)

↓これはデフォルトのカメラのナビゲーションバーです
ちゃんとダークモードの色(黒背景)になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/a3f90e61-1c17-8626-ba65-15c3e4c1232a.p

元記事を表示

Jetpack ComposeでViewModelに任意のパラメータを渡したい

この記事は[ZOZO Advent Calendar 2023 シリーズ 3](https://qiita.com/advent-calendar/2023/zozo)の1日目の記事です。

# 概要

Android Architecture Componentsの[ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ja)を利用する機会は多いかと思います。[Hilt](https://developer.android.com/training/dependency-injection/hilt-android?hl=ja)と一緒に使用すると次のようになります。

“`kotlin
@HiltViewModel
class SampleViewModel @Inject constructor() : ViewModel() {
// ViewModelの実装
}
“`

この時、次のようにコンストラクタにパラメータを持たせ、ViewModelのインスタンス

元記事を表示

ViewModel に依存しない Composable を書こう

この記事は [Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android) 1日目の記事です。

Composable が ViewModel に依存すると Preview を書くのが難しくなったり、 ViewModel を Composable から触れすぎてしまうのでコードが複雑になりやすいので避けたいです。

Android Develpers のガイドで示されているサンプルからコードを抜粋して紹介します。

https://developer.android.com/topic/architecture/ui-layer#samples

## Good
次のような ViewModel に依存していない Composable を書きたいです。

“`kotlin
@Composable
fun HomeContent(
featuredPodcasts: PersistentList,
isRefreshing: Boole

元記事を表示

[チュートリアル4]compose multiplarformのサンプルコードを変更して勉強する

# はじめに
[公式ドキュメント](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-modify-project.html)の和訳と要約+αです。
前回は[これ](https://qiita.com/shunk0616/items/38177619d4d771685d7e)

# ライブラリを導入する
Kotlin Multiplatformのライブラリを導入する場合には、composeApp/build.gradle.ktsをいじります。
そういうライブラリがないときにはそれぞれのプラットフォーム固有のライブラリを使わないといけないらしい。(難しそう)

ちなみにKotlin Multiplatformのライブラリ一覧をまとめてくれているサイトもあります。
[Kotlin Multiplatform libraries](https://libs.kmp.icerock.dev/)

## 手順
1. composeApp/build.gradle.ktsを開く
2. comm

元記事を表示

[チュートリアル3]compose multiplatformのサンプルコードを解説する

# はじめに
[公式ドキュメント](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-explore-composables.html)の和訳+αです。
[前回はこれ](https://qiita.com/shunk0616/items/0ee8f513f953fed468fd)

そしてjetpack composeの基本的な解説になるので、compose multiplatformの解説って感じじゃないですね。知ってる方は飛ばしてください。

一応コードを貼っておきます
“`
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
impor

元記事を表示

[チュートリアル2]compose multiplatformでアプリを作るとき最初にやること[Compose multiplatform]

# はじめに
[公式チュートリアル](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-create-first-app.html)の和訳と要約+αです。
前回は[環境構築](https://qiita.com/shunk0616/items/747d651f2a94f6a6ec9c)

# 手順

## Android Studioで開くまで
1. [kotlin multiplatform wizard](https://kmp.jetbrains.com/?_gl=1*rxwzv*_ga*NDQ4NjkzNTk5LjE2OTY2NTYwODQ.*_ga_9J976DJZ68*MTY5OTI3MjEyMC4xMC4xLjE2OTkyNzI4MjYuNTEuMC4w&_ga=2.179882465.432039280.1699264914-448693599.1696656084)に行く
2. project nameに自分の作りたいアプリの名前を入力
3. androidとde

元記事を表示

[チュートリアル1]compose multiplatformの環境構築[compose multiplatform]

# 自分の環境
Intel版macです。OSはsonoma。
友達に頼んで確認してもらったら、同じ手順でM2でもいけたそうです。

# 手順
めちゃくちゃ簡単に書きます。わからないことがあればコメントお願いします。
1. 環境構築
1. チェック用のツール
1. kdoctorをインストール(homebrew経由)
2. kdoctorコマンドで出てきたエラーを潰していく
2. java
1. [ここ](https://www.oracle.com/java/technologies/downloads/#java17)からjava17をインストールしました
3. Android Studioのインストール
1. Android Studio Giraffe | 2022.3.1
4. プラグインのインストール
1. KMM(Kotlin Multiplatform Mobile)のプラグイン
5. XCode
1. アプリストアからインストール
2. 開いて初回のセットア

元記事を表示

【Android/Java】アプリ間データ共有(Android11)

## やりたいこと
アプリ間でデータの共有を行いたい
片方のアプリがプロセスKillされている状態でもデータの参照を行えるようにしたい

非推奨だが、SharedUserIDを使って実現できたので、その備忘録

## Step1.SharedUserIDとは
アプリA、アプリBを同一UserIdで実行することで、アプリAからアプリBの情報を参照することが可能な機能
UserIDは、”adb shell”でコマンドラインに入った後、”ps -A”コマンドでプロセス一覧を参照
以下の例では、UserIDが”u0_a56″のアプリが2個存在しているのが確認できる
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3468893/b7bd4b69-44a5-bb3c-6824-06eaa27fae2c.png)

UserIDが同一の場合、アプリAのSharedPrefrenceの内容を、アプリBからも参照することが可能となる

## Step2.実装方法
2アプリのパッケージ名を以下とした場合の説明

元記事を表示

Now in Android の ViewModelのテストコードを読めるようになろう

GANMA!のAndroidアプリの開発をしています。豊川です。

株式会社FLINTERSは2024年1月に10周年を迎えます。それを記念して全社員でブログリレーする企画を行なっています。こちらはその83日目のブログになります。

## 目的
Androidアプリ開発において、ViewModelのテストを書きたいが、どのように書けばいいかわからない、という方もいると思います。

その場合、Android にはNow in Android という公式が出しているサンプルのアプリがシンプルかつわかりやすいため、それを参照するのがおすすめなのですが、それでも初学者の方には慣れない書き方などが多くあり、読むのに苦労することがあります。

そこで本記事では、実際のテストコードを見ながら、そのテストコードで何が行われているのかを解説します。

本記事の目的は [Now in Android](https://github.com/android/nowinandroid)のViewModelのテストコードで何が行われているかを理解できるようになることです。

具体的には下記のテストコードを理解

元記事を表示

[Android]BottomNavigationViewのアイコンにpng画像を設定する方法

かなり前から実装されて便利なBottomNavigationViewですがこのアイコンに多色で作られているpng画像を設定すると基礎の色しか表示されていない状態になります。
それを回避する方法と回避後の非選択状態時の設定方法などを・・・

png画像を正常に表示させる方法
“`
viewBinding.bottomNavigation.itemIconTintList = null
“`
BottomNavigationViewのitemIconTintListにnullを入れるだけです。
bindingを使っていますが通常のやり方でも取得してセットすれば表示されます。

これで表示はされたんですが問題点が一つ
別のアイコンをタップして切り替わっても未選択状態のようなものにならなくて主張が激しい・・・
回避策としては画像の色調を非選択状態のものを用意して下記のコードで別ボタンが押された時にセットするやり方で実現しました。
“`
viewBinding.bottomNavigation.menu.get(変えたい画像のindex).setIcon(R.drawable.desele

元記事を表示

[Android]BottomNavigationViewのアイコンサイズ変更

BottomNavigationViewでハマったこと

・BottomNavigationViewの特定のアイコンサイズを変更したかった
まとめて全部のアイコンサイズを変更するのはXml等で比較的簡単にできたけど個別での変更がなかなか情報がなくて困った・・・

“`
private fun fixAllIconSize() {
// ※1
val menuView = viewBinding.bottomNavigation.getChildAt(0) as BottomNavigationMenuView
// ※2
0.until(menuView.childCount).forEach { index ->
// ※3
val icon = menuView.getChildAt(index).findViewById(R.id.navigation_bar_item_icon_view)
val displayMetrics = resources.displayMetrics

元記事を表示

Compose Material3 Adaptive Navigation Suite を使ってみる

Compose Material3 Adaptive Navigation Suite の 1.0.0-alpha01 が 2023/11/15 にリリースされたので、まだ alpha ではあるもののどのようなものか使ってみたメモのようなものになります。

https://developer.android.com/jetpack/androidx/releases/compose-material3#adaptive-navigation-1.0.0-alpha01

## 使い方

以下のライブラリの依存を追加します。
“`
androidx.compose.material3:material3-adaptive-navigation-suite:1.0.0-alpha01
“`

`NavigationSuiteScaffold` を使って Navigation で使用するアイテムの実装を行います。

“`kotlin
@Composable
fun SampleApp() {
val navBackStackEntry by navController.curr

元記事を表示

JetpackComposeで日時を設定する

(育休にてAndroidを久しぶりに触ったので、JetpackComposeを改めて勉強中)

# 概要
JetpackCompose Material3にて日時設定をしようと思ったら、いまだにDatePickerとTimePickerは別々になっていて面倒だったので、両方を呼び出してDateを取得できるようにする。
(2023/11/27時点だとTimePickerDialogも開発中でサンプルコードがあるのみ)

# 実装
## 日付を設定する
“`kotlin
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun DatePickerDialogComponent(
showPicker: MutableState,
onCanceled: () -> Unit,
onSelected: (dateMillis: Long) -> Unit
) {
if (!showPicker.value) {
return
}

val datePic

元記事を表示

「The application should not provide its own launch screen」のワーニングに対するとりあえず対応

↓のように「The application should not provide its own launch screen」のワーニングが出たとき、とりあえず消す方法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629308/b103f3fa-6b9d-903f-078e-46a91b806bf4.png)

Activity名の「Splash」の部分を別の適当な名前に変更する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629308/8873b889-6e04-e84a-b7e9-bebebbb59a52.png)

元記事を表示

超欲張りな(そして挫折必至な)スマホアプリ開発

## Android iOSを同時進行でマスターしたい
今までスマホアプリ開発はやってこなかった筆者でしたが、この度スマホアプリの開発を行うことになりました。開発と言ってもスクラムのプロダクトオーナーとしての立場で、プログラムを直接つくるわけではありません。ただ、作った中身がわかるように、スマホアプリについて学ぼうと思ったのがきっかけです。
Andorid(Andorid Studio:Kotlin)、iOS(Xcode:Swift)
の環境はすでにあり、そこでイチから学んでいこうと思っています。
## どうせならFlutterもやってやれ
個人的興味もあり、併せてFlutterにもチャレンジしてみようと開発環境まで作りました。
## やってきたことを記録に残す
ただ学習してもフィードバックできなければ意味はないですので、何らかの記録に残したいと思っています。例えばブログやnoteでもいいですし、Qiitaでもいいかもしれない。そのなかでQiitaは有力な候補なので今後も活用したい。
## You Tubeの動画で見直すのもありだな
ものを覚えるには、他人に教えるのが一番だというのがあ

元記事を表示

独学でChatGPTを組み込んだAndroidアプリを実装してみた【Kotlin / Jetpack Compose】

## はじめに
こんにちは、Haru([haru-ish](https://github.com/haru-ish))と申します。
独学でAndroidおよびKotlinを学び、ChatGPTを組み込んだAndroidアプリ「One Pick」を実装したので、その過程について振り返っていきたいと思います✍👀💻

### 自己紹介
私はSES企業で1年半強の実務経験(研修期間含む)があります。
JavaとJavaScriptは個人開発でも使用しており、ある程度の基礎知識はあるのかなと思っています。
また、Androidに関しては在職中に案件に関わったことがありますが、その際の言語はJavaであり、主にテスト用のコードを少し書いた程度で、ほとんどはテスターとしての参加でした。
そんな経験から、実質的に今回が初めてのAndroid開発となります。

#### Androidアプリを作ろうと思った動機
これまでJavaを学んできた中で、Kotlinはモダンで理解しやすい言語という印象があったので、ずっと学びたいと考えていました。
また、上記の実務での経験からモバイルアプリ開発はWEB開発とは異

元記事を表示

Deep Dive Into SKIE Part 1

# SKIEとは

[SKIE](https://skie.touchlab.co/)は2023年9月6日にTouchlabがOSSとして公開したKMPで使用するライブラリです。
2023年3月に[ブログ/Open Source Updates](https://touchlab.co/open-source-updates/)で開発中であることがアナウンスされてから半年後の公開でした。
Apache License V2で公開されており、誰でも使用できます。
TouchLabは[SQLiter](https://github.com/touchlab/SQLiter)や[Stately](https://github.com/touchlab/Stately)を開発しており、KMPでアプリを作ろうとしたことがある方は見かけた方も多いでしょう。

元記事を表示

OTHERカテゴリの最新記事