Android関連のことを調べてみた2021年11月17日

Android関連のことを調べてみた2021年11月17日
目次

Androidアプリで使用できる言語またはフレームワーク

# はじめに

以前 JavaScript で作成していたアプリを Android 向けにリリースしようかと考えています。
候補としては、Kotlin, ReactNative, Flutter の 3 つになります。
ということで、それぞれの特徴を調べて、自分用のメモとして以下に纏めてみました。

※これまでたくさんの方が比較されてきたかと思いますが、自分で書いてみた次第。

# Kotlin
– Java Virtual Machine 上で動作するオブジェクト指向言語。
– Java と比較すると、簡潔で安全性が高い。
– Java と互換性が高い、JVM 言語の一種。
– Java のプログラムやJava用のライブラリ、フレームワークなどを流用できる。
– プログラム作成後はコンパイルして使用する。(変更から反映まで時間を要する場合がある。)

# React Native
– JavaScript のライブラリであるため、iOS/Android 両方のアプリを開発可能。
– ホットリロードと言って、コードの変更点を保存して瞬時に反映することができる。
– React を使用し

元記事を表示

NavGraphで共有するViewModelでAssisted Injectをする

NavGraphのidで共有しているViewModelをAssistedInjectで生成したく、なおかつ今まで通り別フラグメントに共有したい要件がある際の解決方法を、どこにも記事がなかったため備忘録として残します。

:::note warn
今回は該当箇所のみを扱い、Dagger-Hiltの導入方法などは説明しません。
:::

Hilt導入の公式ドキュメント ->
https://dagger.dev/hilt/gradle-setup

## 動作環境
– Dagger-Hilt 2.39
– Navigation 2.3.0

## 前提
AssistedInjectを楽にするためにFragmentの拡張関数としてtakahiromさんの記事を参考に作成しています。
[ステップバイステップでDaggerを使った引数ありのViewModelの初期化を理解する](https://qiita.com/takahirom/items/f28ceb7a6d4e69e4dafe)

“` kotlin:assistedViewModels
inline fun

元記事を表示

無料でAndroidアプリのパフォーマンスをテストする方法の紹介

現在のAndroid端末では、主にGoogleモバイルサービス(GMS)搭載のAndroid端末とHUAWEIモバイルサービス(HMS)搭載のAndroid端末が存在しています。

一般的にアプリをリリースする前に、アプリの品質を確保するために、テストを行います。このテストでは、アプリにバグがあるかどうか、クラッシュするかどうかだけでなく、アプリの安定性や、速度、リソース消費など、見えにくい部分もテストします。このテストを人でやると、非常に時間も手間もかかるので、テスト自動化でやらないと、コストが莫大になります。

ここで、GMSのAndroid端末とHMSのAndroid端末における、無料なパフォーマンステストの方法を紹介します。

# Googleモバイルサービス(GMS)搭載のAndroid端末
Firebase Test Labの無料プランを使います。

### 手順
(1) Firebase consoleを開きます。
https://console.firebase.google.com/

(2) プロジェクトを作成します。
![firebase01.PNG](https

元記事を表示

Azure AD による モバイルアプリのデバイス証明書認証の実現方法

#はじめに

本記事では、モバイルアプリ(iOS または Android ネイティブアプリ)の証明書認証連携時の注意点とその対応方法をご説明いたします。

現在、大変多くの モバイル SaaS アプリケーションが Apple AppStore や Google Play ストアから提供されており、その中にはビジネスアプリも多数存在しています。ビジネスアプリを企業で利用する場合、セキュリティを考慮する必要があり、組織で管理されたデバイスのみに利用を制限することが多くの企業で求められます。このデバイス制限のセキュリティポリシーの実現方法として Azure Active Directory (Azure AD)の条件付きアクセスポリシーがあります。Microsoft Intune(Microsoft Endpoint Manager)で管理された準拠デバイスのみ SaaS アプリのアクセスを許可することが可能です。しかしながらこの方法を **Microsoft(Office 365アプリ等) 以外のモバイルアプリで実施する場合、注意点があります**。
※ちなみに、Microsoft のモバ

元記事を表示

Androidのプッシュ通知実装マニュアル

# 概要

プッシュ通知の実装って結構難しいと思っていたんですが、ニフクラ mobile backendをプッシュ通知 ASP サービスに利用するとすぐに実装できますので今回はこちらを使っていきます!
ニフクラ mobile backendはBasicプランなら 無料で使えますので、気軽に使ってみてください:point_up:

* 公式ドキュメントはこちら
* https://mbaas.nifcloud.com/doc/current/push/basic_usage_javascript.html

# 事前準備

* PC(最新版のGoogle Chrome)
* 動作確認用Android端末(OS4以降)
* 【無料】Android, iOS を自動判定するURLリンク(QRコード)を作る。OS別のサイトに飛ばす。

一つのリンクで、OS判定して、

* iOS
* AppStoreリンクへ。
* Android
* GooglePlayリンクへ。
* 他OS(Windows,Mac OSなど)
* 公式サイトリンクへ。

飛ぶようなリンク(もっと言えばQRコード)が欲しい!
とのことで、「無料」で制作してみました。

こんな感じです。
https://games.kaedeee.com

QRはこれ

![qr.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/c799fd06-5b22-92dc-decf-7acf921630d0.png)

ちなみに、既にあるツールとして、4つご紹介しますが、個人開発者としては、どれも一長一短という感じ。
お先にその4つをご紹介いたします。
#既存ツール

#One Link
https://onelink.to

![スクリーンショット 2021-11-16 12.55.17.png](https://qiita-image-store

元記事を表示

Navigation ComponentのstartDestinationでもHomeAsUpボタンを表示したい

Navigation Componentを教科書通り、BasicActivityなどのサンプルのまま実装すると、NavigationGraphとActionBarがリンクして、startDestinationに指定したFragmentではActionBarのUPボタンが表示されず、遷移先ではUPボタンが表示されるという動作になります。

|FirstFragment|SecondFragment|
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/9dc4392f-21d0-bd5f-3823-f75afd3bb85a.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/6e70643b-f045-4625-0a7f-9afa03a50b63.png)|

しかし、SingleActivityで最初から作る場合はともかく、一部画面からNavigation Componentを適用

元記事を表示

【個人開発】シンプルな単語帳アプリを作ってみた【Android】

# はじめに
少し前から開発を進めていた単語帳アプリの審査が通り、めでたくGoogle Play Storeで公開されました。
https://play.google.com/store/apps/details?id=com.warpstudio.android.simplevocabulary

せっかくなので簡単に開発を振り返ってみたいと思います。
![フィーチャーグラフィック.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1073313/477b7643-088f-6a5f-6ed1-c744ae62498f.jpeg)

# 作ったもの
「**SimpleVocabulary**」というその名の通りハチャメチャにシンプルな単語帳アプリです。
会員登録やログイン等は一切不要です。
**ストアの紹介文に書くことが無さ過ぎて困ったくらい**にはシンプルです。

↓は簡単なデモです(gifなんで見づらかったらゴメンナサイ)。
![demo.gif](https://qiita-image-store.

元記事を表示

HMS Scan Kit実装入門

# HMS Scan Kitの特徴
HMS Scan KitはQRコードやバーコードのスキャン機能を提供するライブラリです。簡単に導入できるのが特徴です。

# サポートデバイス
Android 4.4以上

# サポートコード
– QR Code
– Data Matrix
– PDF417
– Aztec
– EAN-8
– EAN-13
– UPC-A
– UPC-E
– Codabar
– Code 39
– Code 93
– Code 128
– ITF-14

# 実装手順

## 前準備
(1) Huaweu Developerを登録します。

(2) AppGallery Connectでアプリのプロジェクトを登録します。
スクリーンショット 2020-10-01 155726.png

元記事を表示

【無料】ゲーム・アプリ開発におすすめのアイコンダウンロードサイトまとめてみた。6つ

アプリ制作におすすめの、アイコン素材サイト【無料】をまとめてみました。

それぞれの短所・長所も追加でまとめて行きます。

https://kaedeee.com/app-famous-icon-download-site/

#Streamline

https://app.streamlinehq.com/icons
![スクリーンショット 2021-11-15 14.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1900756/884c2559-1ba2-4702-4d4e-47c348a7af08.png)

**長所**
ライナーデザインから、マテリアルデザインまで。
一つのアイコンに対し、複数のデザインを選ぶことができる。

**短所**
無料版では、使えないデザインもある。

#ICOON MONO

https://icooon-mono.com
![スクリーンショット 2021-11-15 14.16.35.png](https://qiita-image-store.s3

元記事を表示

【Android】Imageをブラー加工する方法【Jetpack Compose】

# はじめに

Imageをブラー加工したい場合ってあるよね。
xmlだと結構面倒で、Glide使ってる場合なんかは[wasabeefさん作のGlide Transformation](https://github.com/wasabeef/glide-transformations)を入れるとさっと実装できたりする。

僕が担当させてもらっているプロジェクトでは着々とJetpack Compose導入の準備をしていて、その過程でブラー加工をしなきゃいけない箇所があった。
xmlでやった時困った記憶があったのでかなりびびっていたのだけど、Composeではとってもシンプルかつ簡単に実装できたので紹介させて欲しい。

## Modifier.blurを使う場合

そもそも、ComposeにはModifierでブラー加工のAPIが用意されていて、これを使えば一発で実装できる。

■こんな感じ

“`kotlin
Image(
painter = painterResource(id = R.drawable.droid),
contentDescription = nul

元記事を表示

Couchbase Lite機能解説:ピアツーピア同期〜プログラミング構成と設定項目

## ピアツーピア同期プログラミング構成

Couchbase Liteのピアツーピア同期機能を利用するためには、`URLEndpointListener`クラスを利用します。

`URLEndpointListener`を初期化する際に、`URLEndpointListenerConfiguration`を使用して構成を実行します。

ここでは、Couchbase Liteのピアツーピア同期で行えることの理解を助けるため、`URLEndpointListenerConfiguration`で設定できる項目を紹介します。

## ピアツーピア同期設定項目

`URLEndpointListenerConfiguration`を使用して、リスナーを初期化するために使用できる構成オブジェクトを作成します。

#### `port`
リスナーがリッスンするポート。

ポートがnullまたはゼロの場合、リスナーは使用可能なポートを自動割り当てします。

#### `networkInterface`
IPアドレスまたはネットワークインターフェイス名の形式で指定する、リスナーが利用する使用するネ

元記事を表示

【Android】新規画面の追加、別画面として扱い(Java)

最近、Android Studioを使って、JavaのAndroidアプリを独学で作成しているので、その過程で勉強した内容です。
作成したコードはGithubで公開しているので、気になる方は下記をご覧ください。
https://github.com/NagaJun1/OriginalCalendar

#新規画面作成においての前提
まず、Androidで新規画面(アプリ起動後の初期画面とは別の画面)を表示するには、Javaの場合は`setContentView();`を実行することで表示できます。
ですが、この場合、Androidのライフサイクル(`onStart()`や`onStop()`などのイベント)を使用することが難しくなります。
その問題を解消するために、`Intent`を使用した処理を実装する必要があります。

#新規画面の作成
新規画面の’.xml’作成は、プロジェクト作成時に作成される`\res\layout\activity_main.xml`と同様の作りにすればOKです。
(例として、`activity_sample.xml`としておきます。)
ついでに書いておくと

元記事を表示

APKのサイズを約80%削減した

# TL;DR

– 結果

“`
# ls -l *.apk
-rwxrwxrwx 1 kabocha kabocha 293997572 Nov 14 20:22 original.apk*
-rwxrwxrwx 1 kabocha kabocha 289364774 Nov 14 20:54 minifyEnabled_shrinkResources.apk*
-rwxrwxrwx 1 kabocha kabocha 97902257 Nov 14 21:34 abiFilters.apk*
-rwxrwxrwx 1 kabocha kabocha 49605621 Nov 14 22:48 extractNativeLibs.apk* # 最終結果
“`

(49605621/293997572)*100 ≒ 16.87…

– `app/build.gradle` で,`ndk.abiFilters` を指定

“`
android {
defaultConfig {
// arm64のみサポートする.
ndk

元記事を表示

Android Navigation : DialogFragmentのレスポンスは ResultReceiverで処理したほうが良くないですか? という話

__[追記]だめっぽいです。コメント参照__

タイトルでほぼすべて。 この方法が正しいかどうかわかってないので request for commentsです。

GitHubにプロジェクトを置きました

https://github.com/Nunocky/NavigationAndDialogFragment

* 一般的に紹介されている方法 (app)
* 今回提案する方法 (app2)

## 動機
「コールバックでDialogFragmentの結果を取得するなんてレガシー(笑」 と言われたこと。

とはいえ Navigationによる Dialogの定義と結果の取得は今まで非常に気に入らなかった。

## 一般的に紹介されている方法 (app)

ViewModelに LiveDataをもたせて ダイアログの結果を Fragmentと DialogFragmentで共有する方法が一般的。

“`DialogResultViewModel.kt
class DialogResultViewModel : ViewModel() {
val result = Mutab

元記事を表示

【Android】Kotlin + Firestore + RecyclerViewを使ってTodoアプリを作る

# Cloud Firestoreとは
Cloud Firestore(以下Firestore)とはFirebaseのサービスの1つです。
サーバー上にデータを保存できるデータベースです。
またデータの変更を**リアルタイムで**アプリに反映してくれます。

参考:[Cloud Firestore | Firebase Documentation](https://firebase.google.com/docs/firestore)

# 実際に使ってみる
それでは実際にFirestoreを使ってTodoアプリを作ってみましょう。
ソースコードは[こちら](https://github.com/Kaito-Dogi/android-sample-firestore)にあります。(GitHub)

![firestore-sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/933349/ed2a404c-7e61-fd9d-bcf8-5c95753196b1.gif)

## 手順
1. Fi

元記事を表示

ActivityResultContractのリクエストと結果の処理をより強く結びつかせる

ActivityResultContractsの仕組み、個人的にちょっとどうかな?と思っているところがあります。
それは、リクエスト内容と、結果の処理の結びつきが弱く、余計な自由度が残されてしまうところです。

例えばパーミッションのリクエストの場合、以下のように記述します。

“`kotlin
private val launcher =
registerForActivityResult(RequestPermission()) {
// 結果の処理
}

// リクエスト
launcher.launch(Manifest.permission.CAMERA)
“`

ここで、リクエストしているパーミッションと、その結果の処理は紐付いています。にもかかわらず、コールバックの登録時点でリクエストするパーミッションは決まっておらず、lauchをコールする時点で自由度が残されています。ここで間違って異なるパーミッションを指定してしまうと意図した動作となりません。
registerをコールした時点でこの対応関係が固定できないところがちょっとモヤモ

元記事を表示

AndroidアプリのCircleCiによる自動ビルドからPlayストア自動アップロードまで試してみる

## 概要
AndroidアプリのCircleCiによる自動ビルドからPlayストア自動アップロードまで試してみる
これでアプリを自前でビルドして作成し、手動でPlayストアにアップロードする手間が省かれる

## 前提条件
前提条件として既にPlayストアに公開済みのアプリがあること。app bundleに対応していること(apkではなくaabを対象とする)

## ビルド設定
`./gradlew bundleRelease` で署名付きaabが出力されるよう設定しておく

“`build.gradle

android {

signingConfigs {
release {
storeFile file(‘../keystore/xxxx.jks’)
storePassword ‘xxxx’
keyAlias = ‘xxxx’
keyPassword ‘xxxx’
}
}

buildTyp

元記事を表示

.ideaのgit管理について Android Studio

Android Studioでプロジェクトを開始するときに.ideaファイル内のgit管理についていつも迷うのメモします。

### 結論
[こちら](https://takemikami.com/2018/08/29/GitIntelliJ-IDEA.html)によると以下3個をgit管理しておけば良いみたいです。

– `build.gradle`
– `.idea/gradle.xml`
– `.idea/misc.xml`

### 自分の場合

しかし自分の環境では`misc.xml`にはユーザー固有のファイルパスが記述されていました。とりあえずユーザー固有のファイルパスの部分を`$PROJECT_DIR$`に変更しておけば良いと思います。

上記以外も基本的にユーザー固有ファイルパスの部分を適宜`$PROJECT_DIR$`に直してさえいればgit管理して問題ないかと思います。

### .idea内のファイルについて

記事を各過程で各ファイルがどのような役割なのか簡単に分かったことをまとめたいと思います。(適宜更新していくかと思います。)

– `workspace.x

元記事を表示

【Android】BottomNavigationView(画面下部のナビゲーションビュー)の実装(Java)

最近、独自でAndroid のアプリを書いているので、それのメモ書きぐらいのつもりで書いています。
独自で書いているコードは下記に収めてあるので、気になる方は下記をご覧ください。
(「カレンダー_設計書.xlsx」に完成図がざっくりと書いてあります。)
https://github.com/NagaJun1/OriginalCalendar

#「BottomNavigationView」とは?
下記画像の、赤枠の部分がそれです。
今回の記事の題名には「Java」と書いてありますが、実装方法自体は「xml」で実装します。
![ナビゲーションバー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/762492/b5204b73-9f70-d32e-a279-d3b00bde96dd.png)

#実装
ソースコードは下記の通りです。
(各ソースの配置位置は、Andoid Studioでプロジェクトを生成した基本的な構造を想定しています。)

“`xml:\res\layout\activity_main.x

元記事を表示

OTHERカテゴリの最新記事