- 1. adbで「adb.exe: more than one device/emulator」が出るとき
- 2. 【Android】ライブラリの実装方法【AndroidStudio】
- 3. Jetpack Composeを現場のアプリ開発で使用してみて思ったこと
- 4. Composableをスクロールに応じて動かす
- 5. 【Android】起動時パフォーマンス改善のためにBaseline Profilesを導入したときのメモ
- 6. 令和最新版 Google Play Console アプリアップロード自動化のための設定フロー
- 7. Dagger Hilt Constructor Injection
- 8. コルーチンとチャネル入門#9 コルーチンのテスト
- 9. Jetpack Compose で dp / px / sp の相互変換はどうやるのか
- 10. Nrealでの録画機能について
- 11. RecyclerViewのセルをKotlin Android ExtensionsからviewBindingに変更したい!!
- 12. Android Studio インストール
- 13. iPhoneのアプリはどうやってできるのか?
- 14. Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
- 15. Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
- 16. コルーチンとチャネル入門#8 チャネル
- 17. AlarmManagerの複数登録
- 18. 【Jetpack Compose】StateFlow でカウンターを作ってみる
- 19. ImageSpanで画像の高さを変えたい
- 20. 【備忘録】Geospatial API のサンプルを動かすまで
adbで「adb.exe: more than one device/emulator」が出るとき
複数のAndroidがPCに接続されてたりエミュレータが立ち上がってるとき
“`powershell
PS C:\Users\frieren> adb devices
List of devices attached
192.168.1.8:39333 device
emulator-5554 device
“`そのまま`adb shell`するとエラーが出る
“`powershell
PS C:\Users\frieren> adb shell
adb.exe: more than one device/emulator
“`こういうときは`adb -t 1 shell`みたいにデバイスを指定する。
**デバイスを指定するためのオプションはshellの前に書かないと働かないので注意。**# USB接続のデバイスを指定: `adb -d shell`
> use USB device (error if multiple devices connected)複数台あるとエラー。
# TCP/IP接続のデバイスを指定: `adb -e
【Android】ライブラリの実装方法【AndroidStudio】
# ライブラリとは
ライブラリを直訳すると”図書館”です
図書館では それぞれの人が それぞれの目的で それぞれの知識を得るために それぞれの本を借りることができます
Android(プログラミング)における**ライブラリ**とは
その図書館のように 他の人が作った機能をお借りして使うことが出来るもの
と私は捉えています# 実装方法
Android Studio内の左辺にあるprojectタブにある
GradleScript から build.gradle(Module: app) を選択
その中の dependencies{} 内に 使用したいライブラリをコピペで貼り付けてくださいすると 右上に 「Sync Now」と出てくるので これをクリック
これでライブラリの実装が完了します# よく使われるライブラリ
Android開発でよく使われるライブラリをまとめてくれている方がいたので
記事をお借りして貼っておきます
↑の方法を使えばこの記事にあるライブラリを自分の
実装にそのライブラリの機能を使うことができます!https://qiita.com/tkhskt/it
Jetpack Composeを現場のアプリ開発で使用してみて思ったこと
最近、Androidのアプリ開発においてJetpack Composeを使用する機会が増えました。
ということで、私が特に現場でJetpack Composeを使用してみて感じた(ている)ことを書いていこうと思います。(2022/6/24時点の感想)
知識不足で間違っている点あればご指摘ください。# 良いと感じている点
### レイアウトの変更・管理がしやすい
– Kotlinコードでレイアウトを書いていくので、個人的にXMLベースよりコードのネスト構造が浅くなる(りやすい)傾向があります。
– Kotlinコードで管理するので、XMLファイルといった形式の異なるレイアウトファイルを管理する必要がほぼなくなります。見るのがKotlinコードに一元化されるので管理がしやすいです。
– 同じKotlinファイル内に複数のComposable定義を記述できるのでグルーピングしたい時とか便利個人差はあるので、上記はいまいちピンと来ない方がいるかもしれませんが、XMLよりKotlinに慣れ親しんでいるエンジニアは頷けると思います。
### 状態に応じたUIの出しわけがやりやすい
その
Composableをスクロールに応じて動かす
### スクロールで動かす
### やり方
ScrollStateの値でComposableのOffSetを変更し続ければよい以下のようなComposableを作る。
“`kotlin
@Composable
fun Blue(scrollProvider: () -> Int) {
Column(
modifier = Modifier
.offset {
val scroll = scrollProvider()
val offset = (ScrollHeight – scroll).coerceAtLeast(80)
【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 アクセス」を開きます:
 {// 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
## インストール後のトップ画面

### ① 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)
共有の可変状態を含むコードを書くのは、とても難しくエラーを起こしやすいことが知られている。(このチュートリアルでさえ、コールバックを使用するソリューションを実装するかたわら、遭遇した) 共有の可変状態を使う情報の共有の代わりに、メッセージによる情報の共有により、これを簡単にしようとしている。コルーチンはチャネル経由でお互いにメッセージをやりとりすることができる。
チャネルは、異なるコルーチンの間でデータを渡すことを可能にする通信基本命令である。あるコルーチンはチャネルに対していくつかの情報を送ることができ、一方で他のコルーチンはチャネルからその情報を受け取ることができる。
この記事では、時間を指定した場合の実装になります。
# 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