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

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

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 Design)](#1segmented-buttons-material-design)
2. [Chips (Material Design)](#2chips-material-design)
3. [Radio button (Material Design)](#3radio-button-material-design)
4. [Drop-down menu (Material Design)](#4drop-down-menu-material-design)
5. [独自UI](#5独自ui)
6. [まとめ](#6まとめ)
7. [終わりに](#7終わりに)

## 1.Segmented buttons (Material Design)
!

元記事を表示

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

元記事を表示

WEBからAPKをダウンロードすると拡張子が.zipになる問題

APKをウェブサーバーにアップロードして、そこからダウンロードすると何故かZIPファイルになることがある。

色々試した結果、APKとしてダウンロードする方法をメモっときます。

– WEBサーバーのmimeにapkを追加する(追加方法はhttpdによって違うので自分の使っているサーバーに合わせた設定をしてください)
“`
application/vnd.android.package-archive .apk
“`

– ダウンロードリンクに?dl=1を追加する
“`
ダウンロード
“`

もしかすると、リンクパラメータの方だけでも行けるかもしれないですが
念の為、mimeの方も書いてあります。

元記事を表示

【Android] Jetpack Compose を使って OSSライセンス一覧を表示する

## はじめに

公式の [Google Play 開発者サービス](https://developers.google.com/android/guides/overview?hl=ja) API である `oss-licenses` プラグインを使うと以下のような OSS ライセンス一覧を表示することができる。(詳細は[ここ](https://developers.google.com/android/guides/opensource?hl=ja#display-license-info)を参照。)
公式の OSS ライセンス表示

同プラグインは build.gradle(.kts)の `dependencies` セクションに追加したライブラリを収集してくれるのだが、`oss-licenses` プラグインの `Activity` 上に表示され、本体アプリとデザインの

元記事を表示

【Android】Mathクラスについてpart3【Kotlin】

# はじめに
以前Mathクラスについての記事を書いたのですが、今回また別のものを使ったので
忘れないために記事にしておきます。

https://qiita.com/Tsubasa12/items/709cbd01b1abbfe8e209

https://qiita.com/Tsubasa12/items/11ca4b2243a89abefd26

# toRadians()
“`
toRadians(30.0) // 0.5235987755982988
“`
角度を指定するとラジアン単位に変換する

# toDegrees()
“`
toDegrees(0.52) // 29.79380534680281
“`

# 参考
https://www.dainippon-tosho.co.jp/unit/list/radian.html

元記事を表示

Androidでタップすると選択肢が展開し、選択するとその項目だけに折りたたまれるメニューを作る

こういうのなんて言うんだっけ?と、この説明的なタイトルになったんですが
要するに以下のようなメニューを作りたいなー、どうやればいいんだ?
って考えたので記事にしておこうと思います。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/58702b5b-5cb2-bebd-1840-20c134a8e52c.gif)

# RecyclerView でリストを作る

アニメーションを除けばそんなに難しい要素もなく、リストを作って選択肢以外の消去と全表示ができればいけそうですね。
リストの作り方はいくつかあるでしょうが、RecyclerViewを使うのが簡単でしょうか。
以下は単にRecyclerViewの使い方説明になります。

リストアイテムの layout を作ります。最初に提示したような表示にしたいので、高さ固定で、幅はwrap_contentにしています。

“`item_menu.xml

元記事を表示

RecyclerViewのdividerを最初・最後に描画させない方法

RecyclerView では、 ItemDecoration を追加することで、dividerを表示させることができます。 DividerItemDecoration という ItemDecorationが 用意されており、これを使うことで簡単に実装できますね。

“`kotlin
binding.recyclerView.addItemDecoration(
DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
)
“`

|dividerなし|DividerItemDecoration|
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/7dabc475-7b4d-e1dd-dc03-6e24ebeb78a2.png)|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/35469306-ce6a-3119

元記事を表示

【Android】スプラッシュ画面を簡単に実装

## スプラッシュ画面とは
アプリを起動すると現れるロゴが中央に配置されている画面です。今回はこの画面の実装を行います。

## Step1. ライブラリをインストールする
まず、スプラッシュ画面を実装するためのライブラリをgradle(app)にインストールします。

“`build.gradle(app)
dependencies {
implementation(“androidx.core:core-splashscreen:1.0.0”)
}
“`
入力したらgradleをSyncさせてください。

## Step2. 背景色を用意する
スプラッシュ画面には背景色を用意する必要があるため、color.xmlで入力します。

“`color.xml



#F48FB1

“`
今回はかわいらしくしたいと思ってこの色にしています。

## Step3.

元記事を表示

Androidの通知でアニメーションアイコンを表示する方法

Androidの通知でアニメーションを表示できるのでしょうか?
できるとすればアイコンですよね。

AndroidのNotificationでは `SmallIcon` と `LargeIcon` の2種類のアイコンを設定できます。

“`kotlin
val notification = NotificationCompat.Builder(this, channel.id)
.setSmallIcon(R.drawable.ic_android)
.setLargeIcon(Icon.createWithResource(this, R.drawable.ic_android))
.setContentTitle(“Title”)
.setContentText(“Text”)
.build()
notificationManager.notify(1, notification)
“`

ステータスバーに表示されるのが `SmallIcon`
![](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

OTHERカテゴリの最新記事