- 1. 【Android】起動時パフォーマンス改善のためにBaseline Profilesを導入したときのメモ
- 2. 令和最新版 Google Play Console アプリアップロード自動化のための設定フロー
- 3. Dagger Hilt Constructor Injection
- 4. コルーチンとチャネル入門#9 コルーチンのテスト
- 5. Jetpack Compose で dp / px / sp の相互変換はどうやるのか
- 6. Nrealでの録画機能について
- 7. RecyclerViewのセルをKotlin Android ExtensionsからviewBindingに変更したい!!
- 8. Android Studio インストール
- 9. iPhoneのアプリはどうやってできるのか?
- 10. Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
- 11. Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
- 12. コルーチンとチャネル入門#8 チャネル
- 13. AlarmManagerの複数登録
- 14. 【Jetpack Compose】StateFlow でカウンターを作ってみる
- 15. ImageSpanで画像の高さを変えたい
- 16. 【備忘録】Geospatial API のサンプルを動かすまで
- 17. [Android] ActionBarのUpButtonを制御する
- 18. Kotlin 今どきよくある JSON リクエストからのパース
- 19. XMLのvariableパラメータでジェネリックな型を指定する方法
- 20. Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
【Android】起動時パフォーマンス改善のためにBaseline Profilesを導入したときのメモ
GoogleI/O 2022で話題にあがっていたBaselineProfilesを導入検討した際のメモを残しておきます。
# 背景
Baseline ProfilesはAPKに含まれるクラスとメソッドのリストです。インストール時に、Android Runtime(ART)によって、クリティカルなパスをプレコンパイルするために使用されます。
導入すると起動時間の短縮が期待できます。> Baseline Profiles are a list of classes and methods included in an APK used by Android Runtime (ART) during installation to pre-compile critical paths to machine code. This is a form of profile guided optimization (PGO) that lets apps optimize startup, reduce jank, and improve performance for end user
令和最新版 Google Play Console アプリアップロード自動化のための設定フロー
2022年6月時点の Google Play Console へのアプリバイナリ (apk, aab) アップロード自動化のための、主に Google Play Console や Google Cloud Platform の設定のやりかたです。
## ステップ
1. Google Play Developer API 用の鍵の発行
2. 適切な権限を設定する
3. リリース用のツールをセットアップ## 1. Google Play Developer API 用の鍵の発行
リリース用のツールで API を触るために鍵の発行が必要です。すでに鍵がある人はこのステップをスキップできます。
### 1-1. Google Cloud プロジェクトと紐づける
まず Google Play Console にログインして 「設定」 > 「API アクセス」を開きます:
![API_アクセス-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359439/bd359d90-7db1-d50b-
Dagger Hilt Constructor Injection
# 最初に
Dagger Hiltの利用でField Injectionはスッと理解できたのですが、Constructor Injectionは少し時間がかかりました。自分用にもメモとして残します。
Dagger Hiltの環境設定やプロバイダのスコープ範囲などの説明はここでは割愛して、シンプルにコンストラクタインジェクションがどのように記述されるのかだけをまとめてます。# 多分一番シンプルなコード
わかりやすくするためにString型を提供するプロバイダのサンプルです。
“`Kotlin
@AndroidEntryPoint
class HiltStringActivity : AppCompatActivity() {// StringImplのコンストラクタには引数があるのに何も渡していない
// コンストラクタの引数はインジェクトしろというアノテーション
@Inject
lateinit var myStringImpl: StringImploverride fun onCreate(savedInstanceState:
コルーチンとチャネル入門#9 コルーチンのテスト
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/09_Testing)
コルーチンを使うコードのテスト方法について議論しよう。我々の解法をテストし、並列なコルーチンの解法が、`suspend`関数の解法よりも速く、チャネルの解法が、単純な”進捗”の解法よりも速いことが確認できればと思う。
それではGitHubサービスをモックし、このサービスが与えられたタイムアウトの後、結果を返すようにしよう。
“`
リポジトリ一覧要求 – 1000ms遅延以内で、答えを返す
repo-1 – 1000 ms 遅延
repo-2 – 1200 ms 遅延
repo-3 – 800 ms 遅延
“`
その後、`suspend`関数でのシーケンシャルな解法は、4000ms前後かかるはずである。
`4000 = 1000 + (1000 + 1200 + 800)`
そして並列の解法は、2200ms前後かかるはずである。
`2200 = 1000 + max(1
Jetpack Compose で dp / px / sp の相互変換はどうやるのか
“`kotlin
val pxValue = with(LocalDensity.current) { 16.dp.toPx() }// or
val pxValue = LocalDensity.current.run { 16.dp.toPx() }
“`
[How to convert Dp to pixels in Android Jetpack Compose? – Stack Overflow](https://stackoverflow.com/questions/65921799/how-to-convert-dp-to-pixels-in-android-jetpack-compose/65921800#65921800)Kotlin スコープ系の関数で取得できる、というのだが気持ちが悪いです。
これは、以下でも同じ。
“`kotlin
val pxValue = 16.dp.value * LocalDensity.current.density
“`さらに、その他、それぞれの変換もみてみます。
[?【Jetpack Compose】d
Nrealでの録画機能について
# 動作環境
– macOS version 12.3.1 Monterey Intel Core i9
– Unity 2020.3.8f1
– NRSDKForUnityAndroid_1.8.0.unitypackage
– NrealLight モデル:NR-9101GGL
– Xperia 5 Ⅱ SOG02SLA
# 元からある録画機能
NRSDKForUnityAndroid_1.8.0.unitypackageをUnityにインポートすると、Assets/NRSDK/Demosの中にRGBCamera-Recordが作られており、これをbuildするとNrealのカメラから動画が取れる。
アプリを実行すると、録画の設定に関するパネルが表示されるので好きな設定を選んで、赤い丸をコントローラーでクリックする。
Android Studio インストール
# はじめに
Android初心者の方向けの記事です。Android Studioインストールからエミュレータ起動までを書いています!
## Android Studio インストール
AndroidのDeveloperにてインストールできます。
こちらを参考にインストールをして下さい。30GBとかあるのでMacのスペックによりますが、長いと1時間ほどインストールに時間がかかるのでお茶でもしながら気長に待って下さい。
https://developer.android.com/studio/install?hl=ja#mac
## インストール後のトップ画面
![スクリーンショット 2022-06-15 21.25.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1967088/fd2f6004-b680-4676-4f08-a7d30f69da7d.png)
### ① New Project
言葉の通り、プロジェクトを作成できます。「Finish」を押下でプロジェクトが
iPhoneのアプリはどうやってできるのか?
スマートフォンで日々使えるアプリたち。
これらは一体どうやって作られているのか、まとめました。## アプリとは?
アプリとは、「application software(アプリケーションソフトウェア)」の略で、目的にあった作業をする応用ソフトウェアのことです。
具体的には、スマホであれば、ゲームやメッセージアプリ、動画再生など
パソコンであれば。表計算やワープロなどこのアプリたちは、『OS(オペレーションシステム)』上にインストールして使用できるようになります。
#### OSとは?
OSとは私たちが使うすべてのコンピュータ(パソコン、スマホなど)を制御するのに必要な基本ソフトウェアのことです。簡単にいうと、パソコンやスマホを動かすためのソフトです。OSがないと電源を入れても何も表示されず、キーボードから文字も入力できなくなります。一般的なOSとしては、下記があります。
| パソコン | スマホ |
|:-:|:-:|
| Windows , MacOS , Linux , ChromeOS | iOS(iPhoneで使用)、Android|## iO
Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
# はじめに
Androidエンジニアのみなさん、こんにちは。
今年もDroidkaigiに応募したいけどネタが思いつかない @KentaHarada です。漠然とネタを考えていますが、なにも思いつきません :innocent:
まずはトリガーリストを作って脳を刺激するところから始めてみようと思います :rolling_eyes:# 1. 過去のセッションを振り返る
Droidkaigiでは初心者向けの内容からディープな内容まで幅広いセッションが開催されています。過去のセッションの内容を振り返って雰囲気を思い出してみます。全部みると大変なので 2019年からスタート!### 2019年
– [採択されたセッション](https://droidkaigi.jp/2019/accepted)
– [投稿されたセッション一覧](https://droidkaigi.jp/2019/proposals/)
– [Droidkaigi 2019 Day.1 (YouTube)](https://www.youtube.com/watch?v=4suIJHROcK0&list=P
Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
# 概要
* あるアプリで Flutterのバージョンを上げる対応をしたら、Android版として生成したAPKのファイルサイズが倍くらいに大きくなってしまった
* 色々調べると結構複雑な問題が絡んでおり、かつドキュメントが分散していて理解がしづらかった
* 今回APKのファイルサイズが大きくなったのはネイティブライブラリが非圧縮でアーカイブされていたことが原因だったが、これ自体は問題がなく、むしろ推奨動作であることがわかったなお、これは Flutterを使わない通常の Androidアプリにも適用される話です。
# 起こったこと
Flutterの バージョン1系を使っていたあるアプリをバージョン2系を使うようにしたところ、生成されたAPKのサイズが倍くらいになってしまいました。具体的には 100MBくらいだったものが 180MBくらいになったイメージです。
APKの生成は以下のような感じで行なっていて、この処理自体は特に変更していません。
“`
> flutter build apk –flavor production -t lib/main.dart –re
コルーチンとチャネル入門#8 チャネル
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/08_Channels)
共有の可変状態を含むコードを書くのは、とても難しくエラーを起こしやすいことが知られている。(このチュートリアルでさえ、コールバックを使用するソリューションを実装するかたわら、遭遇した) 共有の可変状態を使う情報の共有の代わりに、メッセージによる情報の共有により、これを簡単にしようとしている。コルーチンはチャネル経由でお互いにメッセージをやりとりすることができる。
チャネルは、異なるコルーチンの間でデータを渡すことを可能にする通信基本命令である。あるコルーチンはチャネルに対していくつかの情報を送ることができ、一方で他のコルーチンはチャネルからその情報を受け取ることができる。
![img1](https://play.kotlinlang.org/resources/hands-on/Introduction%20to%20Coroutines%20and%20Channe
AlarmManagerの複数登録
一定間隔や周期的なアラームではなく、指定した時間または決まった秒・分後などにアラームを鳴らしたい場合など、1個に限らず2個以上のアラームを登録したいということがあると思います。
普通にAlarmManagerを実装するだけでは複数個登録はできないため、複数個登録する方法を記します。
AlarmManagerは自分もかなり躓いた実装のため、実装の仕方と一緒に複数登録方法までメモ程度に書きますが、どなたかの参考にもなれればと思います。
(間違っていたらご指摘ください。。。)この記事では、時間を指定した場合の実装になります。
# AlarmManagerをセット
“`kotlin
class SettingAlarmManager : Application(){
fun settingAlarmManager(
context: Context,
timeDiff: Long,
id: Int,
) {
val alarmManager = context.getSystemService
【Jetpack Compose】StateFlow でカウンターを作ってみる
Composable 入れ子の更新具合を確認します。
“`kotlin
@HiltViewModel
class SampleViewModel @Inject constructor() : ViewModel() {private val _count = MutableStateFlow(0)
val count = _count.asStateFlow()fun inc() {
_count.update { count -> count + 1 }
}}
“`
[? StateFlow の View への公開](https://android.benigumo.com/20210830/expose-stateflow/)“`kotlin
@Composable
fun SampleScreen(
viewModel: SampleViewModel = hiltViewModel()
) {val count: Int by viewModel.count.collectAsState()
Column(
ImageSpanで画像の高さを変えたい
# はじめに
今回は spanを使っていく中で 画像と行の高さが合わずに、違和感がある状態だったので
色々試した結果 どこを変えたかを記事にして残しておきます# ImageSpan
public ImageSpan(@NonNull Context context, @NonNull Bitmap bitmap, int verticalAlignment)
とある様に
ImageSpanでは必須の引数として Context と Bitmap を必ず設定する必要があります
**必須の引数二つのみ**を設定していると画像の高さは行の下辺と画像の下辺が同じ高さになるのが
デフォルトの様です# 解決法
画像の高さを変えるにの注目したのは 第三引数にある verticalAlignment でした
intであるので はじめは適当な数字を入力してみましたが、特に変化はありませんでした
そこで0から順に入力してみることにしました
0では初期値である 行の下辺と画像の下辺が同じ位置になりました(変化なし)
1にしたところ、画像の高さは 行の上辺と下辺の間、つまり真ん中の高さ
【備忘録】Geospatial API のサンプルを動かすまで
# ARCore Geospatial API 使うためのメモ
Geospatial APIを試したくてGoogle CloudやUnity 上で設定とサンプルをとりあえず動かすまでの手順の備忘録。
基本的には以下を参照した。https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android
## 環境
* Unity 2021.3.4f1
* ARCore Extensions 1.31.0
* ARCore XR Plugin 4.2.3
* XR Plugin Management 4.2.1サンプルはARCore ExtentionsのGeospatial Sampleを手元にあったAndroidでとりあえず試す。
## 手順
手順は基本的に上記のサイトベースで実施
1. [Google Cloud プロジェクトを設定する](https://developers.google.com/ar/develop/unity-arf/geospatial/deve
[Android] ActionBarのUpButtonを制御する
## はじめに
Navigationコンポーネントを使用している時の、画面上部のActionBarにあるUpButton(←ボタン)の制御方法について記載します。
Navigationの導入は省きます。公式ドキュメントはこちら:[Navigationコンポーネント](https://developer.android.com/guide/navigation?hl=ja)## Activityをfinishする
“`MainActivity.kt
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
finish()
return true
}
}
return super.onOptionsItemSelected(item)
}
“`## 現在のFragmentによって処理を変える
“`MainActi
Kotlin 今どきよくある JSON リクエストからのパース
数年で一気に変わってます、JSONの取り扱い処理。
Gson も Moshi も不要です。
“`kotlin
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = “application/json”.toMediaType()
val json = Json {
ignoreUnknownKeys = true
isLenient = true
} // *
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
“`Kotlin 内蔵の serialization を使うのが良いでしょう。
[? Kotlin 今どきよくある JSON リクエ
XMLのvariableパラメータでジェネリックな型を指定する方法
# はじめに
XML上でジェネリックなパラメータを指定する実装を少し調べる機会がありましたので、議事録的に残しておこうと思います。# 指定方法
指定方法は以下です。“`
“`以上になります。
variableには特殊文字は使用できないので、記号部分は上記のように記載する必要があります。# さいごに
上記の実装頻度は高くはないものの、実装するとなると少し考えてしまう方もいるかもしれません。
その際にはこちらの実装をお役に立てていただけますと幸いです。
Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
Jetpack Compose 勉強記録その3です。
# 今回の内容
https://developer.android.com/jetpack/compose/tutorial?hl=ja
チュートリアルの続きをやっていきます。
今回はレッスン 4:リストとアニメーションをやっていきます。
リストは必ず使うと言っても過言では無いので、気になります。
# メッセージのリストを作成する
“`MainActivity.kt
@Composable
fun MessageCard(messages: List) {
LazyColumn {
items(messages) { message ->
CardItem(message)
}
}
}
“`“LazyColumn“ “LazyRow“
こちらを使用する事でリストを表示する事が出来るみたいです。
“LazyColumn“は縦のリストです。“LazyRow“は横のリストです。
“items“に渡