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

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

【Coroutinesガイド】チャネル

※ソース記事は[こちら](https://kotlinlang.org/docs/channels.html)
Deferred値により、コルーチンの間で、単一の値を転送する便利な方法が提供されている。チャネルによって、値のストリームを転送する方法が提供されている。
# チャネルの基本
[Channel]()は概念的には、`BlockingQueue`に非常に良く似ている。一つの重要な違いは、blocking`put`操作の代わりに、suspendする[send](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/-send-channel/send.html)を持っており、blocking`take`の代わりにsuspendする[receive](https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.channels/

元記事を表示

Jetpack Composeで親のPaddingを無視してサイズ指定する(ネガティブマージンのようなものを作る)

こういうやつ。例えばGridで、基本的には`16.dp`の余白を左右に取るが、トップの画像だけは余白を無視したい、みたいな場合。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53293/0dca8119-aaeb-4376-50b7-ef6968df8a9a.png)

## 解決策
`Modifier.layout`で調整する。拡張関数を作っておくと良さそう。
“`kotlin
fun Modifier.extraWidth(width: Dp) = this.layout { measurable, constraints ->
val placeable = measurable.measure(
constraints.copy(
maxWidth = constraints.maxWidth + width.roundToPx() * 2,
),
)
layout(placeable.width

元記事を表示

最小限 の Kotlin を最短で学ぶ

### 1. 変数

変数は「var」。

“`kotlin
var username: String = “some user name”
“`

定数は「val」。Java の final と等価。

“`kotlin
val API_DELAY_CONSTANT: Int = 100
“`

null で初期化するには「?」。 null を利用可能にします。

“`kotlin
var myString: String? = null
“`

static な定数には「companion object」。

“`kotlin
class Animal {
companion object {
const val DEFAULT_NUM_OF_EYES = 2
}
}

animal.numOfEyes = Animal.DEFAULT_NUM_OF_EYES
“`

遅れて初期化するには「lateinit」。

“`kotlin
lateinit var user: User
lateinit var items: List

元記事を表示

MVVM Architecture with Android

# 概要
アーキテクチャ:アプリーケーションやソフトウェア開発をする上での設計手法
意識することで開発者はある程度同じ構造で開発することができレビューも行うことができる

アーキテクチャが存在しないとどうなる?
ActivityやFragmentの処理が膨らみ可読性が低くなる
LifeCycleの破棄時などに処理が再実行されCPUやメモリへの負荷が大きくなる
→よってUIをモデルで操作して永続なデータとして保持することを推奨されている

MVVMは大規模なアプリのアーキテクチャに向いている

View → ViewModel → Model
の依存関係がある
※矢印の向きには意味があり向いていない方向の層のことを知らない
(VVMMモデルって覚えた方が楽そう…)

### メモ
よく見るMVVMのモデル図がGoogleのアーキテクチャのドキュメントから消えている気がするのですがComposeが主流になりつつある中でアーキテクチャも変化しているんですかね?
理解深まったら記事更新します、詳しい方教えてください

# View
### 担当

画面の表示や更新
– ViewMode

元記事を表示

ReactNativeでAPKファイルを作成する方法【Windows】

# ReactNativeでAPKファイルを作成する方法

## 1. Node.jsインストール
1. 以下のURLからインストーラーをダウンロードする。
– [https://nodejs.org/ja/](https://nodejs.org/ja/)
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/f1b145e9-9cd7-c7b1-ce4d-28098e3c52ce.png)
2. インストーラーを起動し、インストールする。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5be3d647-b449-a94d-0cc6-cae17c437c88.png)
3. コマンドプロンプ開き、以下コマンドを実行する
“`
node –version

npm –version
“`
4. バージョンが表示されれば成功
![03.

元記事を表示

oss-licenses-pluginがOSSをリストアップする仕組み

## はじめに

[OSS Licenses Gradle Plugin](https://github.com/google/play-services-plugins/tree/master/oss-licenses-plugin)は、ビルド時にOSSリストを作成ます。そのリストをもとにOssLicensesMenuActivityでライセンス表示できます。

これまではcookpadさんの[LicenseToolsPlugin](https://github.com/cookpad/LicenseToolsPlugin)を使わせてもらっていたのですが、deprecatedということで代わりにお勧めされたGoogleのOSS Licenses Gradle Pluginを使おうとしました。ところが使ってみるとSTLやらICU4CなどのOSSがリストアップされて、どういうこと?となったのでソースコードを調べて確認しました。

## 仕組み

ビルドを開始すると、OSS Licenses Gradle Pluginは初めにGradleでdependenciesのリストを作成します。以下

元記事を表示

a-1-1-3.ActivityとFragment間のデータ受け渡し

### a-1-1-3.ActivityとFragment間のデータ受け渡し

#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)

#### 課題
3. ActivityにFragmentで定義したXMLを組み込めるか。
3. Activityに配置したFragmentのイベントをActivityで受け取れるか。
3. ActivityからのイベントをFragmentで受け取れるか。
3. ActivityからFragmentの呼び出しにパラメーターを追加できるか。

#### Github

https://github.com/rwakizaka7/AndroidTest

#### テスト実装

“`kotlin: FragmentTestActivity.kt
class FragmentTestActivity : AppCompatActivity(), TestFragment.OnButtonClickListener {
lateinit var fragment

元記事を表示

2022年のAndroidプロジェクトセットアップ

Qiita Nightの資料になります。  ↑ **右下の拡大ボタンを押すと読みやすくなります。**
https://increments.connpass.com/event/251564/

# どうAndroidプロジェクトをセットアップするか?

takahiromという名前で活動しています。
Androidが好きです。

GDE for AndroidやDroidKaigi Co-organizerやCyberAgent Developers Expertなどの活動をしています。

初めてQiitaスライドを使いました。

## 初めてAndroidアプリを作りたいという方

Googleから公式のチュートリアルが提供されているので、最新のAndroidの開発について確認してみてください!一緒に開発していきましょう?

元記事を表示

ANRのやりかた

## ANRを発生させたい!
結論
“`.kt
//onClickイベントでタイマー仕込んで、画面上のクリックイベントのオブジェクトを連打する
TimeUnit.SECONDS.sleep(10)

// runOnUiThread { while (true) }
//無限ループはいい感じにANRにならない??
“`

## どうしたの?
androidエンジニア的には何言ってるんだという内容ですが、悪意はありません。
公式見る限り、起こさせないようにしたり、確認する方法はあるのですが、意図的に発生させる方法がパッと見当たらなかったのでメモに残します。
参考記事を見てもらえればわかるように、ANRの発生条件は以下の2つです。

* 入力イベント(キーの押下や画面タッチなどのイベント)に対する応答が 5 秒以内にない
* BroadcastReceiverの実行が 10 秒以内に終了しない

個人的にUIスレッドで止まればいいんでしょくらいの認識でいたため、
いざANR起こすぞってなったら、どうやるの?状態でした・・・

これでfirebase CrashlyticsでANRが見れ

元記事を表示

【2022年】AndroidStduio + Kotlinでゲームの土台作ってみる

# 前置き

AndroidStudio+KotlinでAndroidで動くゲームの土台作る(2D限定)

# iOS版も作りたいよ

UnityとかUnrealEngine4使えばいいと思うよ
あれならAndroidやiOSの他にも、理論上NintendoSwitchとかPS4とかに吐き出せるっぽいし
(Nintendoは、Nintendoに開発者登録して専用のUnityを落とす必要があった気がする)

iOSは開発者登録とか色々めんどくさいから
正直個人で楽しみながら作るにはおすすめできない

# 対象読者

Androidだけで軽くゲームっぽいのを作りたい人や
当たり判定とかを自前で実装してみたい人向け
ただゲーム作りたいだけならUnityとかUnrealEngine4使(略)

# ゲームとして成立するのに必要な条件

以下の4つを満たす必要がある

### ループ

ゲームはユーザーが止めるまで処理を実行し続ける必要がある

### 入力処理

ユーザーからの入力を受け取る必要がある

### 逐次処理

入力処理や状態変化に基づいて、各オブジェクトの情報を変更する処理

#

元記事を表示

通信内容をlog catに出したい

# 初めに
今回は、`retrofit2`と`OkHttp`を使った通信処理の内容をlog catに出す方法を紹介していこうと思います。
すごく単純ではありますが大事な設定なので備忘録として残しておきます。
### 本文
まず、下記の内容をimportします。
最新のバージョンはこちらのリンクから確認してください。
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
“`kotlin
implementation(“com.squareup.okhttp3:logging-interceptor:4.10.0”)
“`
あとはコードで実装するだけです。
“`kotlin
.addInterceptor(
HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
}
)
“`
`OkHttpClient.Builder`を作成時に下記のコードを挿入するだけです。

#

元記事を表示

【2022年】PowerShellでExcelからAndroidのstrings.xmlを自動生成する

# 前置き

https://qiita.com/princess114514/items/a25920aeff1d86c04694

この最後で紹介した、「翻訳用の文字列を列挙したExcel」から
自動でstrings.xmlを作成するというので
実際どう作ればいいのかというのをPowershellを使って実装してみる

# なぜPowerShellなのか

まぁExcel読み込んでテキストファイル吐き出せれば
C#でもPythonでもBrainFuckでもぶっちゃけなんでもいいんだけど
PowerShellはデフォルトでWindowsに搭載されてて
余計な物やエディタをインストールする必要ないので、これがお手軽かなと
macとかは知らん。Python使えばいいんじゃない?(適当)

エディタはサクラエディタ使ってる
(batファイルがctrl+Bで実行できるので)

# ファイル構成

LangFileConverterというフォルダを作り、この階層にbatやps1や翻訳用excelをぶち込む

![image.png](https://qiita-image-store.s3.a

元記事を表示

海外展開を視野に入れるなら文字列の扱いを最初から考えようという話

# 前置き

なろう系の小説タイトルみたいに長いタイトルですが、そういう話です

# 想定読者

主に今から海外展開も視野に入れたアプリを作るぞって人
(Android開発をベースに話しますが、根本的な考え方はどのアプリでも通ずると思います)

# 海外展開を視野に入れるときに注意すること

単純で「文字列を外部化しよう」と「文字列が翻訳される事前提で扱おう」という話です
これを想定してない文字列処理があちこちになると、急に海外展開するってなった時に地獄を見ます

「いや、俺のプロジェクトは日本にしか展開しないって経営者や社長が言ってた」といっても
あいつら、急に海外展開とか欲深い事を言い出すんで
商業アプリとかは海外展開することを前提で最初から設計したほうがいいです
ちょっとめんどくさいですが、最初からやっておけば後で地獄をあまり見ずに済みます

# お前の説明なんて見たくない

https://developer.android.com/guide/topics/resources/string-resource?hl=ja

じゃあドキュメントでも眺めるんだな

# とりあえずプ

元記事を表示

【2022年】LegacyだけどListViewにソース側からデータを渡して表示する(半ソース依存)

# 前置き

ソース内で用意したアイテムのListをView側に用意したListViewに渡して表示するだけの
簡単な処理を作ります

# 作る物

下記のListViewを表示するだけのActivityを作ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740385/dece4cab-f8fb-40db-df6a-0fac2450e2c9.png)

人選は、個人的にホットな奴らを採用してます
別にちびまる子ちゃんの登場人物とかでもいいです

# なんでLegacy

なんでか知らんけど、分類がLegacyになってた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740385/45bfcbdd-0ca9-a873-3d2e-881a1d0720d0.png)

Legacyって書いてあるから、今後の追加機能とかは望めないけど
消したら影響受けるアプリも多そうだし、残り続けは

元記事を表示

【Android】他アプリを起動する

# 概要
`Aアプリ`から`Bアプリ`への遷移を行う方法について。
`getLaunchIntentForPackage`が常にnullを返していたので、同じ間違いをしないためにもメモ。

# コード
マニフェストファイル。Android11以降は`queries`内のコードを追加する必要がある。
“`AndroidManifest.xml








“`

処理部分。`packageName`を指定して他アプリを起動させる。
“`Kotlin
val packageName = “com.hoge.fuga”
val intent = packageManager.getLaunchIntentForPackage(pa

元記事を表示

【2022年】少し複雑な懐中電灯アプリを実装してみる

# 簡単な懐中電灯アプリ実装方法

https://qiita.com/princess114514/items/b22db4cd6774bff9833b

記事の最後に課題と書いてある通り、問題点があるので、それを修正する

# 修正案・仕様定義

・アプリ起動時にライトが点灯しない(ソースの簡略化のためにわざと切ってる)

実行時にライトが点灯するようにする

・ライトを点灯した状態でアプリをバックグラウンドにしたり終了してもライトつけっぱなし

アプリをバックグラウンド等にやった時等に実行される「OnStop」関数
アプリを再度フォアグランドにやった時等に実行される「OnRestart]関数

上記を用いて対応する

・画面の縦横切り替え等でライトの点灯フラグが初期化されておかしくなる

ViewModelクラスを用いて、上記場合に点灯フラグを保持するようにする

・UIの見た目でライトのOn/Offの判断ができない

Buttonを「ToggleButton」に変えて対応

# Viewの見た目

![image.png](https://qiita-image-store.s

元記事を表示

Jetpack Compose のパフォーマンス確認するための2つ公式のツール

その @Composable が compose/recomposeされるタイミング、把握したいですよね。

Google や Android 公式から公開されている2つのツールを使ってみましょう。

### サンプル

Button を使ったカウンターを ViewModel を使って作成します。

![1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/2916ef89-840d-46a4-7397-8196972d9d86.gif)
[? 「Compose Compiler Reports」 recompose される条件とタイミングと範囲を知りたい](https://android.benigumo.com/20220719/recompose/)

### RecomposeHighlighter

シンプルな Modifier Extension Functionです。

視覚的に、recompose の処理の回数を確認できます。

[? RecomposeHighlighter.

元記事を表示

【2022年】簡単な懐中電灯アプリを実装してみる

# 前置き

使ってる懐中電灯アプリが、なぜかライトつけるだけなのに長いローディング画面があったり
広告があったりで、「もー本当クソクソクソクソですわ~(私の中のお姫様)」って感じだったのですが
そういや、自分が鬱病で腐った元プログラマーだった事を思い出したので
自分が理想とする懐中電灯アプリを作ってみては?と思い、作るに至りました

# そもそもAndroidデフォルトの機能で懐中電灯あるのでは?

お黙りなさい

# 参考

https://qiita.com/L_A_P_119611/items/826f3f0e96fe0de1d23b

こいつのワンタップで点灯機能とか不要な機能を切った、簡潔なバージョンを作ります

# プロジェクト作成

Empty Activityで作成
今回はbuild.gradle等には触らない

# main_activity.xml

Hello worldを表示するTextViewを消して、単純なボタンのみにする

~~~ main_activity.xml

元記事を表示

【2022年】Androidアプリで必要最小の双方向バインディング実装

# 前置き

2022年09月19日現在の情報です
出来るだけ最新のやり方を調べてますが、古いやり方が混入してるかも

# 今回作るもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740385/fbf02a8b-7e83-a880-cd92-e73a4496aeb0.png)

・On、Off(めんどくさいのでtrue=On false = Off )の内部情報を表示するTextView
・On、Offの情報を切り替え、自身もOn、Off情報の外部変更によって状態を変えるToggleButton
・On Offの内部情報をフリップフロップする単純なButton

上記仕様を満たすアプリ

# 環境

OS:Windows10
IDE:AndroidStudio
実機:Galaxy A20
言語:Kotlin

# 参考

https://qiita.com/princess114514/items/909826f0553f3c73bab6#baseobservale%E3%82%

元記事を表示

【2022年】Androidアプリで必要最小の単方向バインディング実装

# 前置き
**2022年09月19日現在の情報**です
出来るだけ最新のやり方を調べてますが、古いやり方が混入してるかも

# 作るもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740385/50cadc84-9811-113d-be80-2a3509dfd104.png)

こんな感じで、EditTextに入力した文字の文字数をカウントするだけのシンプルなアプリを
バインディング機能で実装します

# 環境
OS:Windows10
IDE:AndroidStudio
実機:Galaxy A20
言語:Kotlin

# 参考

https://qiita.com/zakimiiiii/items/2d0de51bc37f8e3789e0

相違点
・Flagmentクラスを使わない

こいつ何のために使うんでしょう
なんかあったら教えてください

# プロジェクト作成

AndroidStudioでEmpty Anctivityが作れる事前提で話します

パッケージ名は

元記事を表示

OTHERカテゴリの最新記事