Android関連のことを調べてみた

Android関連のことを調べてみた

Jetpack Compose のプレビューが動かない状態に真剣に向き合う

# はじめに
Androidのモバイル開発では[Jetpack Compose](https://developer.android.com/jetpack/compose?hl=ja)が主流になってきていますが、その機能の1つに[プレビュー機能](https://developer.android.com/jetpack/compose/preview?hl=ja)があります。所謂ホットリロードって言われる機能ですが、UIを作る段階ではこの機能を活用すると効率よく開発できます。

しかし、この機能を使っているがいくつかのviewにおいてエラーとなり、プレビューが表示されないというプロジェクトに何度か出会ったのでその解決策を記します。これはリファクタリングにもつながることなので、是非直すことをお勧めします。

# 結論: ViewModelの依存先をmockにせよ
ViewModelやusecaseが、ネットワーク通信層あるいはデータベース層と接続しており、かつDIを使うことでこのエラーが発生することがほとんどです。
つまり、**プレビュー機能が依存関係を解決できない**ために発生しま

元記事を表示

Android(JetpackCompose)でグラフを表示させる方法

“`
vico ver 1.13.1
“`
## 準備
まずVicoの公式ページのGetting startedを見ながら依存関係にvicoを追加する。
[Getting started](https://patrykandpatrick.com/vico/wiki/getting-started)
“`gradle
dependencies {
// For Jetpack Compose.
implementation(“com.patrykandpatrick.vico:compose:1.13.1”)

// For `compose`. Creates a `ChartStyle` based on an M2 Material Theme.
implementation(“com.patrykandpatrick.vico:compose-m2:1.13.1”)

// For `compose`. Creates a `ChartStyle` based on an M3 Material Theme.
implem

元記事を表示

adbを用いて複数のAndroidデバイス接続時にスクリーンショットを取る方法

## はじめに
端末のスクリーンショットを撮る機会って、意外とありますよね。
PCにandroid端末を接続していると、adbコマンドを使って、簡単にスクリーンショットを撮ることができます。

“`
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
adb shell rm /sdcard/screen.png
“`

参考: https://qiita.com/TNaruto/items/b2407f5668e15e42bedd

## 問題点

しかし、複数の端末を接続していると、下記のようなエラーが出てしまいます。

“`
adb: more than one device/emulator
adb: error: failed to get feature set: more than one device/emulator
adb: more than one device/emulator
“`

これは、adbコマンドが複数の端末を認識してしまい、
どの端末に対してスクリーン

元記事を表示

【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その6)

# はじめに
【Flutter】Firebase Authenticationを使ってログイン/ユーザー登録画面を作成する(その5)の続きです。
前回はパスワードリセット画面を実装しました。
今回は入力フィールドのデコレーションとバリデーションチェックの実装を行なっていきます。
引き続きVSCodeのMac版を利用していますので、AndroidStudio利用の方は適宜読み替えて行ってみてください。

# 更新履歴
2024.1.27 初回投稿

## fontawesomeアイコンパッケージのインストール
1. ログイン,パスワードフィールドがフィールドだけでは少しわかりづらいので、アイコンをつけようと思います。今回はfontawesomeアイコンパッケージを入れます。
“`
% flutter pub add font_awesome_flutter
“`
1. lib>main.dartを開いて、fontawesomeパッケージのimportを追記します
“`dart
import ‘package:firebase_auth/fir

元記事を表示

Hayvanlar Alemi

Hayvanlar Alemi: Doğanın Eşsiz Canlıları”

Giriş:
Hayvanlar alemi deki çeşitlilik ve karmaşıklık, doğanın büyüleyici bir yaratısıdır. Dünya üzerinde milyonlarca farklı türde hayvan bulunmaktadır; bu türler arasında memeliler, kuşlar, sürüngenler, balıklar, amfibiler ve böcekler gibi birçok farklı grup yer almaktadır. Hayvanlar, ekosistemlerin dengesini koruma, bitkilerin tozlaşmasına yardımcı olma, besin zincirindeki rolleri ve birçok ekolojik süreçte önemli fonksiyonlar üstlenir. Bu makalede, h

元記事を表示

AndroidStudioのスペルチェック機能で特定の文字を警告しないようにする方法

AndroidStudioで開発中に地名などの名称で、スペルチェック機能により警告がでてしまいました。
自分で設定した文字を警告しないようにする方法です。

# スペルチェック機能で特定の文字を警告しないようにする方法

Preferences > Editor > Spelling で設定できます。

![スクリーンショット 2024-01-27 1.06.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/b9f9d5b7-a20c-4575-6cf5-ca275a218b95.png)

Spellingを開くとこのような画面が出てきます。

![スクリーンショット 2024-01-27 1.06.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/270f9e2d-3714-cef2-b64a-4febf52d8296.png)

赤矢印のAccepted wordsの+をクリックし

元記事を表示

BottomNavigationView + Jetpack Navigation 環境におけるタブ切り替え時の Fragment#onDestroy と ViewModel#onCleared

## はじめに

[`BottomNavigationView`](https://developer.android.com/reference/com/google/android/material/bottomnavigation/BottomNavigationView) + [`Jetpack Navigation`](https://developer.android.com/guide/navigation?hl=ja) の組み合わせで以下のようなサンプルアプリを作ってみたのだが、ふと `BottomNavigationView` をタップしてタブを切り替えた時に `Fragment#onDestroy` は呼ばれるが、`ViewModel#onCleared` は呼ばれないという事象に気づいた。

元記事を表示

GitHub ActionsによるktlintとDangerの導入事例

# はじめに

メグリのAndroid開発チームでは、Pull Requestを作成した際にktlintでコードフォーマットをチェックし、Dangerによってチェック結果を反映するようにしています。
これまでこれらの実行環境にはBitriseを利用していましたが、一部処理をGitHub Actionsに移行してので、その内容と経緯を含めてまとめておきます。

# 移行の背景

GitHub Actionsに移行した主な理由は以下の2つです。

– プロジェクト(GitHubリポジトリ)作成時の初期設定の容易さ
– コスト削減

ただし、すべてのワークフローをGitHub Actionsに移行したわけではなく、アプリのビルドや配布などは引き続きBitriseで実行しています。

## プロジェクト(GitHubリポジトリ)作成時の初期設定の容易さ

メグリでは毎月のように新しいプロジェクトが作られ、その度に初期設定をしていますが、その一つにDangerとの連携作業があります。

GitHub ActionsはGitHubのエコシステム内で直接動作するため、Dangerとの連携が容易です

元記事を表示

Node.jsを用いてTODOリストを管理するAPIを作ってみた(初学者向け)

# はじめに

私はAPIを作成したことがなく、サーバーサイドの知見が少ないです。APIを理解するために、Node.jsを用いてローカルでTODOリストを管理するAPIを作成します。初学者の私がAPIを作成することを目的としており、GET POST メソッドなどの基本的な部分に着目して記載しています。そのため、今回はデータの永続化などは考慮していません。

# セットアップ
まずは、新規プロジェクトを作成します。

新しいディレクトリを作成
“`
mkdir todo-api
“`

ディレクトリ内へ
“`
cd todo-api
“`

プロジェクトをセットアップ
“`
npm init -y
“`

出力結果) package.jsonが生成される
“`
Wrote to /Users/(自身のPCのディレクトリ)/ReactNativeProject/todo-api/package.json:

{
“name”: “todo-api”,
“version”: “1.0.0”,
“description”: “”,
“main”: “index.j

元記事を表示

Androidの単一選択UI、こんな方法もあるかも?

「複数の選択肢から1つを選ばせたい」ということがよくあると思うのですが、あなたならどんなUIを作るでしょうか?

私がパッと思いつくのはラジオボタンでしたが、改めてどんな選択肢があるのか、身の回りのアプリをチェックしながら考えてみました。

## 目次
1. [Segmented buttons (Material Components)](#1segmented-buttons-material-components)
2. [Chips (Material Components)](#2chips-material-components)
3. [Radio button (Material Components)](#3radio-button-material-components)
4. [Drop-down menu (Material Components)](#4drop-down-menu-material-components)
5. [独自UI](#5独自ui)
6. [まとめ](#6まとめ)
7. [終わりに](#7終わりに)

## 1.Segmented b

元記事を表示

Wear OS by Google 搭載スマートウォッチで心拍数を表示する

## はじめに
Wear OS by Google 搭載スマートウォッチに心拍数を表示したい。その方法を調べる

## 方法
調べたところ、以下の3つの方法があるもよう

– Google Fit API
2024年末でサポート終了とのこと

– Health Services
Google Fit API に代わる方法で Google は今後これを推していきたいように見える

– センサー利用

今回は Health Services を利用して心拍数を表示してみる

## 実装

#### ライブラリ追加
“`build.gradle.kts
implementation “androidx.health:health-services-client:1.1.0-alpha02”
“`
まだ alpha 版のもよう

#### 権限追加
“`AndroidManifest.xml

“`

#### 権限取得処理
実行時に `an

元記事を表示

KotlinでAndroidとMQTTを連携

![AndroidとMQTT: ステップ・バイ・ステップ ガイド](https://assets.emqx.com/images/blog_bg_en/android.png?imageMogr2/thumbnail/1520×684)

[MQTT](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt)は、IoTメッセージの交換とデータ配信を実現するための軽量かつ柔軟なプロトコルです。IoT開発者にとって、柔軟性とハードウェア/インターネットリソースのバランスをとるのに役立ちます。

[Kotlin](https://kotlinlang.org/)はJetBrainsによって開発されたプログラミング言語です。KotlinはJVMベースなので、開発者はAndroid開発に簡単に使用でき、KotlinとJavaの混合記述もサポートしています。

この記事では、主にAndroidプラットフォームでのKotlinの使用方法を紹介し、MQTTの利用方法を説明します。

## プロジェクトの初期

元記事を表示

[Android]マイナンバーカードの読み込みでjava.lang.SecurityException: Permission Denial: Tag ( ID: XX XX XX XX ) is out of date

## はじめに
AndroidでマイナンバーカードをNFCで読み込んだときに出たエラーの対応メモ

## エラー内容
Androidでマイナンバーカードを読み込んだときにこのエラーが発生しました。

“`
e = {SecurityException@30494} “java.lang.SecurityException: Permission Denial: Tag ( ID: XX XX XX XX ) is out of date”
backtrace = {Object[19]@30503}
cause = {SecurityException@30494} “java.lang.SecurityException: Permission Denial: Tag ( ID: XX XX XX XX ) is out of date”
detailMessage = “Permission Denial: Tag ( ID: XX XX XX XX ) is out of date”
stackTrace = {StackTraceElement[18]@30507}

元記事を表示

Android開発 FirebaseCrashlyticsの実装に少しつまづいた話 備忘録

FirebaseCrashlyticsをAndroidアプリに実装するにあたり、
公式ドキュメントを参考に進めていたのだが、、、

https://firebase.google.com/docs/crashlytics/get-started?hl=ja&platform=android#kotlin+ktx_1

“`app/build.gradle
plugins {
id ‘com.android.application’

// Make sure that you have the Google services Gradle plugin
id ‘com.google.gms.google-services’

// Add the Crashlytics Gradle plugin
id ‘com.google.firebase.crashlytics’

}
“`

これをどこに書けばいいのかわからなかった。

調べるとどうやら

“`app/build.gradle
apply plugin: ‘co

元記事を表示

Dagger-Hiltとは?

![スクリーンショット 2024-01-23 23.32.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3639815/26a88468-10a4-6559-9462-7a592a5fb035.png)

# *Dagger-Hilt*
HiltはGoogleが提供するDIライブラリで、Daggerを基に作られています。Dagger2と比べて理解しやすく、使いやすいです。また、Googleが積極的にサポートしており、Composeにも適しています。まだアルファやベータ版が出ている段階ですが、注目して学ぶ価値があります。

### 依存性注入に必要な要素

* Application class
: Hiltを使用するすべてのアプリは “`@HiltAndroidApp“` アノテーションを “`Application Class“`に必ず追加し、依存性注入の開始点を指定する必要があります。
Hiltは “`Ap

元記事を表示

Android 13でOpen SSTP Clientを使ってSoftEther VPNサーバにSSTP接続する

## はじめに

長らくリモートワークをしており、VPN接続して会社のサーバを自宅から見に行っています。
私は学生時代からずっとiPhoneユーザだったのですが、思うところあって今回Androidに買い替えました。
それまでは会社のsoftether VPNサーバにiOSの「[SSTP Connect](https://apps.apple.com/jp/app/sstp-connect/id1543667909)」(有料)を使って接続していました。
さいわい、Android購入前に、AndroidにもSSTP接続が可能な「[Open SSTP Client](https://play.google.com/store/apps/details?id=kittoku.osc&hl=ja&gl=US)」なるものがあるとの情報を得たため、Androidに乗り換えました。

ところが、「SSTP Connect」と違って、「Open SSTP Client」を使うには一手間、具体的には**CA証明書をAndroid端末側に入れ**なければなりませんでした。

数日かけてやっと接続できるように

元記事を表示

Androidダークモード対応方法

## はじめに
[こちら](https://qiita.com/sefwgweo/items/2c80356a14b74a5df827)でダークモード対応する際の見積もり手法という記事をあげましたが、本記事では短い準備期間でダークモード対応1画面にかかるコストをパターン化するためにどんな構成にしたのかを紹介します。

## 事前準備
NewsPicksのAndroidアプリは10年もののプロダクトであるがゆえに、いわゆるカラーパレットと呼ばれるようなものがアプリ内に複数セットありました。
ダークモード対応用のカラーパレットと変数名がかぶってしまう古いものもあったため、以下なルールで対処しました(いずれもIDEAのりファクタ機能を用いて作業しています)

– 使われていないリソースは削除、同一カラーを指定しているものは1個に可能な限りまとめる
– ダークモード対応用に新規追加するもの以外の変数名にoldというPrefixを付けてRename(例:blue_200 -> oldblue_200)

## 手順1:ダークモード対応用カラーパレット追加
UI層のres/values/col

元記事を表示

ReactNativeでTODOアプリ作ってみた

# はじめに
今回は、ReactNativeを用いてTODOアプリを作成していく。

環境構築がまだの方は、こちらを参考にお願いします。

https://qiita.com/muranakar/items/8d0cb2044fe836fe758e

今回はこちらのライブラリーを用いて実装していきます。

https://reactnativeelements.com/

https://github.com/oblador/react-native-vector-icons

# 内容
### ライブラリーをインストール
“`
npm install react-native-elements react-native-vector-icons
“`

### タスクの変数と関数を用意
“`react
const [task, setTask] = useState(”);
const [tasks, setTasks] = useState([]);
“`
`task`と`tasks`の状態変数:
– `task` は現在のタスクの文字列を格納します。ユーザーが

元記事を表示

Retrofit使ってみた

# はじめに
最近自分の周りでよく聞くRetrofitを使用して、API通信で取得したデータをAndroidアプリの画面に表示させてみました。
本記事はそのサンプルコード及び備忘になります。
変な箇所とかあれば、遠慮なく指摘いただけますと嬉しいです。

:::note info
Retrofitとは
HTTPクライアント通信を行うためのライブラリです。
これによりアプリからサーバと通信して情報を取得することが可能です。
:::

# 実装
実装について記載していきます。

**API準備**
コーディングに移る前にまずは取得するAPIの準備をします。
今回は[OpenWeather](https://openweathermap.org/)という天気情報を取得できるAPIを使用して実装していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308202/f7f31417-16d0-e65b-0751-5202f24d4c92.png)

**Manifest**
天気APIを使用す

元記事を表示

Bitriseのキャッシュ機構(最新)

Bitriseにはキャッシュ機構が3種類存在します。今回は使用頻度の高い2つについてまとめました。

1. Branch-based caching ⭐️
1. Key-based caching ⭐️
3. Remote build caching

# Branch-based caching
従来から使われているキャッシュ機構。ブランチ毎にキャッシュが作成されます。
作成したキャッシュは同一のサーバー上のみで使用することができます。

### 使い方
キャッシュの作成には`Bitrise.io Cache:Push`を使います。

このステップでは`Cache paths`にキャッシュ対象のパスを指定します。
例えば`CocoaPods`であればこうなります。
“`
# CocoaPods
./Pods -> ./Pod

元記事を表示

OTHERカテゴリの最新記事