Android関連のことを調べてみた2023年01月19日

Android関連のことを調べてみた2023年01月19日
目次

Jetpack Compose副作用 関数整理

### 副作用
[副作用(プログラム)Wikipedia](https://ja.wikipedia.org/wiki/%E5%89%AF%E4%BD%9C%E7%94%A8_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0))
>プログラミングにおいて、式の評価による作用には、主たる作用とそれ以外の副作用(side effect)とがある。 式は、評価値を得ること(※関数では「引数を受け取り値を返す」と表現する)が主たる作用とされ、それ以外のコンピュータの論理的状態(ローカル環境以外の状態変数の値)を変化させる作用を副作用という。

“` Kotlin
fun sideEffect(){
anyGlobalValue++ // 副作用
}

fun getValue(): Int {
return anyGlobalValue
}
“`
こういうの。
getValueをいつ呼び出しても同じ値が返ってくる状態にしておくのが副作用がないプログラム。いつ呼び出しても同じ値が返ってくる=>参照透過ともいう。

[Co

元記事を表示

【Android】別アプリのAARを回避して、起動中のアプリでNFCのインテントを処理する方法

# はじめに

この記事は、Android端末がNFCを読み取った際にAndroid Application Record、通称AARが記録されていれば、その値に基づいて紐づくアプリを起動またはGoogle Play Storeに移動することを防ぐための方法をまとめたものです。

経緯として、NFCの読み取りと書き込みを行うアプリを開発していたところから話は始まります。
ビルドバリアントごとにパッケージ名を変更するよう**build.gradle**で設定していたため、ビルドバリアントを変更した際に、別のパッケージ名でAARを書き込んだNFCを読み取るとそのアプリをインストールするためにGoogle Play Storeを開いてしまうという問題に直面していました。

LogCatを確認すると、次のようなインテントが発行されていました。

“`
ActivityTaskManager system_server I START u0 {act=android.intent.action.VIEW dat=market://details?id=com.takagimeow.examp

元記事を表示

Quick share / internal app sharing / 内部アプリ共有でaab、apkをURLで共有する

今まであった内部テストとは別に、internal app sharing upload pageというのがあるので共有しておきます。
aab/apkの突発的な共有が楽になるという感じだと思います

* 基本的にはinternal app sharingにアップロードする感じっぽい。
* そのaab apkのパッケージ名の権限があるアカウントからしかアップロードできない
* Release > Setup > Internal app sharingからUploaders and testers tabがあり、アップロードできるアカウントを追加できる。
* バージョンコードが重複しても大丈夫
* app bundle explorerなどに入らない
* なんの鍵で署名されていてもOK
* アップロードしたファイルのリンクを作ってくれる
* リンクは60日で失効

Quick share / internal app sharing upload pageのページ

https://play.google.com/console/internal-app-sharing

元記事を表示

【Android】onCreate()の外側でViewModelを使いたい場合の初期化方法

# はじめに

公式のドキュメントでは、`onCreate()`内で`ViewModel`をリクエストすることが推奨されています。

> 通常は、アクティビティ オブジェクトの onCreate() メソッドが最初に呼び出されたときに、ViewModel をリクエストします。

https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ja#lifecycle

`onCreate()`で`ViewModel`を初期化する場合は次のようになるでしょうか。

“`kotlin
import androidx.activity.ComponentActivity
import androidx.activity.viewModels

class ExampleActivity : ComponentActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(saved

元記事を表示

kotlinのラムダいろいろ(メモ)

## 記事が参考になりそうな人
– ラムダがよくわからんくなる人


### 変数に関数を格納する
“`
fun foo(){
println(“Hello”)
}
“`
を変数に格納したいときは(関数を呼び出すんではない)

“`
val aaa = ::foo
“`
で格納できる
![スクリーンショット 2023-01-17 21.00.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/aefb08d9-2ae9-628e-2a82-786527d9ea06.png)


### funを使わず関数をつくる
“fun”を使わずに関数を定義するには
“`
val foo = { println(“Hello”)}
“`

![スクリーンショット 2023-01-17 21.00.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731109/f07cdfcf-7049-

元記事を表示

AffinityDesignerでエクスポートしたsvgファイルをAndroid Studioでインポートしたときに崩れてしまった場合の対処法

# はじめに

僕は普段Androidアプリのアイコンを作成するときは、Affinity Designerを使用します。

https://affinity.serif.com/ja-jp/designer/

しかし、Affinity DesignerでエクスポートしたSVGをAndroid Studioでインポートしたときに度々デザインが崩れてしまう現象が発生していました。

今回は、次のアイコンを作成したときに発生した問題について解決方法が見つかったのでまとめていきたいと思います。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/61c39c57-3548-10c0-1f00-1eaec75390f7.png)

# Affinity Designerの問題

まずは、エクスポートした上記のSVGファイルをAndroid Studioで読み込んだときの画面をご覧ください。

![1.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

Androidの通知アイコンが指定通りの色にならない問題

# Androidの通知アイコンが指定通りの色にならない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134740/9613993b-acc4-6ed9-b275-1dbd51cf9ab2.png)

Androidの通知アイコン(①)が指定した通りの色にならず、なぜか黒ずんでしまうので原因を調べたら、Androidの仕様によるものでした。

“`kotlin
val builder = Notification.Builder(context, id)
.setColor(ContextCompat.getColor(context, R.color.colorAccent)) // ←この色が正しく出ない
“`

## Androidの仕様が原因?
どうやら、背景色とコンテンツ色の**コントラスト比が一定以下だと自動的に補正される**というAndroidの仕様があるらしい。
公式ドキュメントの記述を見つけられなかったが、ソースを見たところでは **4.5** がしきい値のよう

元記事を表示

GitHub ActionsでBaseline Profilesを生成する

[android-emulator-runner](https://github.com/ReactiveCircus/android-emulator-runner) のような Android Emulator の Actions を使うパターンもあるのですが、今回は Gradle Managed Device を使っての Baseline Profiles を生成する Actions を作ってみます。

## 実装

“`build.gradle
dependencies {
implementation ‘androidx.benchmark:benchmark-macro-junit4:1.2.0-alpha09’

}
“`

`benchmark-macro-junit4` は 1.2.0 の alpha 版を使用します。
これは benchmark モジュールのテスト実行時に Baseline Profiles の生成以外のテストが走ってしまうのを防ぐ機能が 1.2.0 以降に入っているためです。

“`benchmark/build.g

元記事を表示

AndroidのエミュレーターでFirebaseがタイムアウトになる事象の対応

# 背景
– Flutterアプリを開発中に複数デバイスで動作確認を行っていた際、Androidのエミュレーター使用時のみFirebaseへの接続がうまくいっておらず、データが更新されないことが起こった。
– ちなみに前日までは同じエミュレーター上で正常に動いていた。

# エラー内容
“`
Could not reach Cloud Firestore backend.
Backend didn’t respond within 10 seconds
“`

# 解決方法
– どうやらエミュレーター側の問題のようで、新しいエミュレーターを作成してインストールすることで、Firebaseに接続することができた。

# 参考
– [Firebase doesn’t work on Android Studio Emulator](https://stackoverflow.com/questions/73370728/firebase-doesnt-work-on-android-studio-emulator/73584389#73584389)
– [Could not re

元記事を表示

抽象クラスとインターフェースについて | Kotlin

抽象クラスとインターフェースについて、
やっと納得できた!!!(はず)

今まで調べて雰囲気理解して見様見真似で使用して、また調べて…を繰り返してた…(抽象クラスに限ったことではないけど)

なので記録として残しておく:unamused:
これで全然違うよって思ったら、教えてください。お願いします。

## 1.抽象クラスと抽象メソッド
#### 抽象クラスとは
・継承されることを目的としたクラス
・インスタンス化できないクラス(抽象的であるので具体化は無理)
#### 抽象メソッドとは
・中身の実装ができないメソッド
・抽象クラスを使用したクラスは、強制的に使うことになる

#### 定義方法
“`kotlin:MainActivity.kt
abstract class Engine(name:String){
var engineName = name
abstract fun speed():Int
fun breake(){
}
}
“`
・”abstract”を先頭に付ける(“open”は不要)
・コンストラクタを設定できる
・プロパティに値を

元記事を表示

[android] https://twitter.com/shareのendpointが利用できなくなった模様

# 結論
twiterのシェアには
`https://twitter.com/intent/tweet`
を使う

# 起きていること

twitterのシェアには
– https://twitter.com/share
– https://twitter.com/intent/tweet

などのendpointがありますが、`https://twitter.com/share`を用いている場合、androidでtwitterア
プリがインストールされている環境だとツイートができなくなった模様です。
(2023/1/16時点。確認したバージョンは9.71.0-release.0)
![IMG_20230116_131501.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324924/efe454b3-fa07-ba5d-d901-893292f09a92.jpeg)
何故か検索扱いになる

不具合として修正される可能性もありますが、ドキュメント的には`https://twitter.com/int

元記事を表示

Androidで実機をPCにミラーリングするのはAndroid Studioだけで簡単にできるよ

# 概要

Android Studio Electric Eelがリリースされました。
意外と気づいてないかもですが、このバージョンから、なんと実機をPC上でミラーリングできる機能が追加されました!!

特にリモートで開発している場合、周りに自分の実機画面を表示しながら説明したいことがあると思います。これが簡単にできるのです。

今までは、以下のようなサービスを使ってましたが、もう不要かもです。(個人的にはApowerMirrorにお布施してたのが残念ですが、最近安定してなかったのでよかった)

* ApowerMirror
* LetsView
* Vysor

# やり方

Preferencesを開いて、以下の画像のように 「Experimental」 の 「Device Mirroring」 を ONにします。

元記事を表示

SplashScreenについて(静止画編)

こんにちはandroidでアプリ開発を学習中のみのむしと申します。
今回は、SplashScreenを学びましたので、実装方法を忘備録として残したいと思います。

SplashScreenを表示させるActivityを作成する

今回は、新規作成したActivityにSplashScreenを表示させ、その後にMainActivityにIntentする流れで作成していきます。

drawableに新規xmlファイルを作成する

“`xml




元記事を表示

【Android】Guidelineとは【Kotlin】

# はじめに
今回はたまたまコードを眺めているうちに見つけたXML上のLayoutについて気になったので
記事にしようと思いました
発見した要因は、「~~Layout」や「~~View」といったものはよく目にしますが、全く違うものがあったので目に留まったといった感じでしたw

# Guideline
直訳すると そのまま「ガイドライン」ですね
いわゆる 補助線を追加できるといったものになります
このGuidelineは垂直または、水平のいずれかに設定できます

配置方法は3種類で
|説明|実際のコード|
|:—|:—|
|レイアウトの左辺or上辺からの固定距離の指定|layout_constraintGuide_begin|
|レイアウトの右辺or下辺からの固定距離の指定|layout_constraintGuide_end|
|レイアウトの幅または高さのパーセンテージを指定|layout_constraintGuide_percent|

よく分かってないKotlin Coroutine

## はじめに
Android開発でKotlin Coroutineを使用しているのですが、なんとなく使用していて「あ〜非同期処理を簡単に書けて便利だな〜」くらいの理解しかなかったため、今回はCoroutineの理解と備忘録として記事を作成したいと思います。

## Coroutineとは
Coroutineとは軽量のスレッドのようなもので、スレッドのように他の処理をブロックすることなく並列に行うことができます。
スレッドよりは軽量で10000個のCoroutineを同時に走らせることもできるみたい。

なにより一番の魅力は**非同期処理を同期的に書くことができます。**
また、非同期処理実行途中であっても **中断/再開** することが可能です。

## Coroutine登場とそれ以前
以下の典型的な非同期処理をCoroutineを使用しない/使用するパターンで比べてみる
1.サーバーから情報を取得する(ここではただの文字列)
2. 取得した情報をViewに反映する

### Coroutineを使用しない非同期処理
Coroutineが登場する前のAndroidアプリでの非同期処

元記事を表示

App Store / Google Play の フィーチャー枠獲得について

# はじめに
App Store / Google Playのアプリストアには、特定のアプリをピックアップして宣伝するフィーチャー枠というものがあります。フィーチャーされればアプリの知名度は飛躍的に向上し、ダウンロード数の増加にも直結します。
広告などによる地道な宣伝も、もちろん重要ですが、アプリのリリース後やアプリを盛り上げるイベントの際はフィーチャー枠を利用して集中的にアピールすることも大切です。

この記事では、アプリの注目度を高めるフィーチャーという制度の基本と、フィーチャーされるためのポイントであるAndroid バックキーについてまとめました。

### 参考になる本
– [スタートアップ・個人で作れる スマホ向けUnity ソーシャルゲーム開発ガイド](https://amzn.to/3QKy2rc)

## App Store / Google Play の フィーチャー枠とは
App Store / Google Playなどのアプリストアには、特定のアプリをピックアップして宣伝するフィーチャー枠というものがあります。フィーチャーされればアプリの知名度は飛躍的に向上し

元記事を表示

AndroidStudoでBuildVariantsを追加すると実行の構成がエラーになる事象の解消方法

# AndroidStudoでBuildVariantsとは
BuildVariants(ビルドバリアント)とは、単一のプロジェクトからさまざまなバージョンのアプリを作成する方法です。
公式ホームページ
[ビルド バリアントを設定する](https://developer.android.com/studio/build/build-variants?hl=ja)
デフォルトでは「表示」→「ツールウィンドウ」→「BuildVariants」を開くと以下のように
![Screenshot_20230115_124447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933408/d5f42f77-a223-39cf-100c-11c1395576a8.png)
* debug
* release

の2つのVariatntsが定義されています。
VariatntsはbuildTypeとproductFlavorsの組み合わせで構成されます。
buildTypeはビルドの方法、debug、release、s

元記事を表示

【Android】webviewにアプリで作ったヘッダーを入れ込みたい

# やりたいこと
こんな感じで、webviewとアプリ側のヘッダーを連結させる画面を作成しようとしていました。
今までLinearLayoutでヘッダーを上部に固定し、その下にwebviewを配置していたので、このような実装ができるか調べてみた次第です。
(紫の`Scrollable Header`がアプリ側で作成したヘッダー。その下のGoogleのページがwebview)
![タイトルなし.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/c47ebdc2-d21b-7f09-ba79-115a8d3e7e60.gif)

# 解決策
ScrollViewを使うことでめちゃくちゃ簡単に解決しました。

“`Sample.xml

元記事を表示

【GA4】Androidアプリ検証の準備(Windows 11)

Windows環境にてAndroidアプリのGA4計測を検証するための準備方法をスクリーンショット付きでご紹介します。

## 0. Androidアプリの準備
Androidアプリを用意して、Firebase SDKを導入&GA4アプリストリームと連携する。
詳しくは以下記事の
– Android プロジェクトに Firebase SDKを導入
– FirebaseプロジェクトをGoogleアナリティクスに接続

を参照。

https://qiita.com/aqril_1132/items/5997fc611ee227e7a567

## 1. Android Studioのインストール
公式ガイドの案内通りにWindowsにAndroid Studioをダウンロード&インストール。Android Studioをインストールしておくと細かいデバッグ時や検証用アプリを作成するときなど後々便利。インストールに結構な時間が掛かります。
https://developer.android.com/studio/install
## 2. PATHを通す
1. 自分のユーザー名のフォル

元記事を表示

[iOS][Android] NFCタグを使ってスマホアプリを起動する

# やりたいこと
NFCタグにスマホを近づけてアプリを起動する
対象は Android/iOS 両方。
実現するには、NFCタグへの情報書き込みとアプリの実装などが必要となります。

# 1. NFCタグへの書き込み
NFCタグへの書き込みは [NFC Tools](https://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=ja) を利用しました。
登録したNDEFレコードは以下の2つです。
 1. Data (MIME)
 2. URL/URI

## 1.1 Data(MIME)レコード
Androidアプリを起動するための情報です。
| 項目 | 内容 |
|:-:|:-:|
| content-type | application/{ユニークなURI} |
| データ | 任意のテキスト |

ここではcontent-type は以下とします。
`application/vnd.dev.sunskysoft.myapp`
詳細は以下を参照。
https://developer.android.com/gu

元記事を表示

OTHERカテゴリの最新記事