- 1. 恥ずかしがり屋の ViewModel
- 2. Pixel6のNativeカーネル上でdockerを動かす(Androidのカスタムカーネル)
- 3. Compose MultiplatformでいつものQiitaビューアを作ってみた
- 4. ExoPlayer供養
- 5. 【体験記】私がモバイルエンジニアになった経緯
- 6. Androidのアニメーションオフ設定が地味だけど結構インパクトでかかった話(Composeでボイボ劇場も作ったよ)
- 7. Android 階層型アーキテクチャ データレイヤについて
- 8. 300 contribution から毎月Qiita投稿して6ヶ月で 1000 contribution 到達した話
- 9. 【Jetpack Compose】特定の文字だけ色を変える
- 10. テスト自動化の実行環境について考えてみた
- 11. [Delphi] Android のダークモードに対応する方法
- 12. Jetpack ComposeでViewModelに任意のパラメータを渡したい
- 13. ViewModel に依存しない Composable を書こう
- 14. [チュートリアル4]compose multiplarformのサンプルコードを変更して勉強する
- 15. [チュートリアル3]compose multiplatformのサンプルコードを解説する
- 16. [チュートリアル2]compose multiplatformでアプリを作るとき最初にやること[Compose multiplatform]
- 17. [チュートリアル1]compose multiplatformの環境構築[compose multiplatform]
- 18. 【Android/Java】アプリ間データ共有(Android11)
- 19. Now in Android の ViewModelのテストコードを読めるようになろう
- 20. [Android]BottomNavigationViewのアイコンにpng画像を設定する方法
恥ずかしがり屋の ViewModel
この記事は [Android Advent Calendar 2023](https://qiita.com/advent-calendar/2023/android) 2日目の記事です。
恥ずかしがり屋の ViewModel ということで property を公開しすぎないようにしたいです。
[1日目](https://qiita.com/ykws/items/a418572adffc8192ef30)に続き Android Developers でガイドで示されているサンプルからコードを抜粋して紹介します。
https://developer.android.com/topic/architecture/ui-layer#samples
## Good
`StateFlow` を公開するのがシンプルでわかりやすいです。
“`kotlin
private val _state = MutableStateFlow(HomeViewState())val state: StateFlow
g
Pixel6のNativeカーネル上でdockerを動かす(Androidのカスタムカーネル)
## はじめに
Android上でdcokerが動けば便利じゃないかな〜と思いつつ、ズバリそれなページがあったのでチャレンジしてみました。**Docker on Android(こっちがメイン)**
https://gist.github.com/FreddieOliveira/efe850df7ff3951cb62d74bd770dce27**Docker-native-on-Termux-on-Android(上記ページの補足的な情報として)**
https://github.com/Morakhiyasaiyam/Docker-native-on-Termux-on-Android
セルラー通信(4G / 5G)ができるスマホ端末をホストに、docker絡みの開発やら動作環境が作れるので便利かな〜と。色々な
Compose MultiplatformでいつものQiitaビューアを作ってみた
この記事は[NTTテクノクロス Advent Calendar 2023 シリーズ1](https://qiita.com/advent-calendar/2023/ntt-tx)の2日目です。
こんにちは、NTTテクノクロスの戸部@etctaroと申します。
普段は社内でモバイルアプリ開発関連の技術支援や社内向けのノウハウ記事執筆、社内研修講師活動、社内コミュニティ活動などを行なっています。
毎年恒例のアドカレですが、今年も私はComposeで記事を一本を書きました。
今回のお題は「Compose Multiplatform」です。
★ところで、記事の前に宣伝です。
先日まで開催されていた技術書典15では当社の仲間と書籍を出しています。
今回私が執筆した本は以下の通り。– [ゼロから始めるFlutterアプリ開発入門 2023.11版](https://techbookfest.org/product/5925951072370688)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon
ExoPlayer供養
# ごあいさつ
この記事は[Globeeアドベントカレンダー](https://qiita.com/advent-calendar/2023/globee)2日目の記事です。この度はExoPlayer供養にご列席下さりありがとうございます。
ExoPlayerがDeprecatedになったことで、出す機会を失ったナレッジを記事化し、ExoPlayerの供養としたいと思います。# この記事で書きたいこと
* ExoPlayerを使用して、俺俺HLSのマニフェストをパースして再生する
* ExoPlayerを使用して、DRMコンテンツを再生する
* 複数のフォーマットのコンテンツ保護を共存させる# この記事でやらないこと
* コンテンツ保護の意義や解説
* 一般的な使い方# ExoPlayerで俺俺HLSのマニフェストをパースする
HLSはDRMに比べると弱いと言われていますが、逆を言えば融通が聞くということでもあります。
マニフェストファイルを独自フォーマットに変更すれば鍵の取得など、コンテンツ管理に融通を利かすことができます。## 1. パサーを実装する
HLSのP
【体験記】私がモバイルエンジニアになった経緯
## はじめに
初の一人アドベントカレンダーの記念すべき1日目となります。(うっかりしていて、日付を超えてしまったのは内緒:innocent:)1日目ということで、少し自分の過去について考えてみようと思います。
もしよければ最後までお付き合いいただけると幸いです!:writing_hand:## 情報系の学校に入学した経緯
私は幼い頃から、PCと触れ合っていて機械大好き!!という人間ではありません。
初めて自分のPCを持ったのは専門学生になる際に学校から言われた時です。
それまで家庭ではPCに触れ合う機会は全くなく、中学や高校での情報の授業で触るくらいのレベルでした。ですので、ローマ字入力もまともにできない。そんな状態で情報系の専門学校に行きました。
(正直いうと第一志望校に落ちてしまい、家庭事情などからその専門学校しか行ける学校がなかった:rolling_eyes:)では入ってみてどうだったかというと。。。
– 周りはPCに詳しい連中が多い。
– 既にプログラミングを齧ってきている人が半数以上。
– タイピングの実力テストでは**ダントツの最下位**。と中々のハー
Androidのアニメーションオフ設定が地味だけど結構インパクトでかかった話(Composeでボイボ劇場も作ったよ)
# 導入
発覚など結構リアルに近いシナリオのボイボ劇場をComposeだけで作ってみましたのでもしよければご覧になってください!こちらの記事で同様のノリで書くと抵抗ある方もいると思ったため、こちらでは動画で触れていないコード部分について中心にいつも通り書いていきます。
## 意外と見落としがちな「ユーザー補助」
動画でも触れているのですが開発者オプションで昔からある、アニメーションスケールを一律オフにするかなり強めのオプションと
Android 階層型アーキテクチャ データレイヤについて
# はじめに
Android Developersで紹介されている階層型アーキテクチャの中にはデータレイヤという層が存在するので、簡単にまとめてみる。# データレイヤの構造
データレイヤにはアプリに必要なデータとビジネスロジックが含まれる。UI関連の状態やUIロジックに関してはUIレイヤの責任範囲になる。
また、データレイヤはRepositoriesとDataSourcesによって構成される。## Repositories
命名規則は
データの種類 + Repository
例:NewsRepositoryなど
### リポジトリの持つ役割
– アプリの他の部分にデータを公開する。
– データの変更を一元管理する。
– 複数のデータソース間の競合を解決する。
– アプリの他の部分からデータソースを抽象化する。
– ビジネス ロジックを格納する。### リポジトリはコンストラクタでデータソースを受け取る
“`kotlin
class ContentRepository(
private val contentRemoteDataSource: Con
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