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

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

Android ストレージ内の暗号化済みSQLiteをDBeaverで接続する

私がAndroidStudioでAndroidアプリの開発を行っているとき、SQLiteを使っていてデータの内容を確認できないのかなと思い、[こちら](https://gist.github.com/thecodingcod/a3987ddde8892d1a6bda8bd94febb7d0)(←リンク)を参考にしてDBeaver(DB管理ツール)にデータの内容を表示することができたので備忘録としてまとめておきます。

* SQLiteとは
ざっくり説明するとSQLiteはAndroidのSDKが標準サポートしているデータベースです。詳しくは以下参照。

https://gihyo.jp/dev/serial/01/androidapp/0008

## DBのパスワードを取得できるか
後々に使うので一旦飛ばしてもいいですが、DBのパスワードを取得できないと後でつまずくので先に取得できるかを確認します。
開発環境によって違うとは思いますが、私はDatabaseオブジェクトを取得する部分をデバッグモードで止めてパスワードを確認しました。

## SqlCipherのドライバのライブラリをダ

元記事を表示

Android Studio で Geminiアプリ を作成して実機で動作確認してみる

## はじめに

Androidアプリの開発は、技術の進歩とともによりアクセスしやすくなっています。特にAndroid Studioは、開発者にとって非常に強力なツールです。この記事では、Android Studioを使用してGeminiアプリを作成し、実機での動作確認をする方法について、詳しく説明します。

大まかな流れはこちらの記事を参照してください。

https://note.com/npaka/n/n6fc43df9baf4

こちらの記事もおすすめ

https://hamaruki.com/llm-bot-gen-made-with-gpts-gas-and-gemini-pro/

https://hamaruki.com/automatic-generation-of-qa-database-using-gemini-api/

## スマートフォンを開発者モードに設定する
まず、スマートフォンを開発者モードに設定し、USBデバッグを有効にする必要があります。これは、Androidデバイスにアプリをインストールし、デバッグするための基本的なステップです。設

元記事を表示

FlutterでAndroidのSAFを使ってファイルにアクセスする

Androidストアに登録するアプリはAPIレベル33以上に対応することが必須となった。SAFに対応したファイルアクセスが義務付けられたということである。SAFは結構昔からある仕組みだけど面倒なので避けてきたのだが、もう逃げられないようだ。FlutterでSAFを使うにはどうすればいいのだろうか。

## Strage Access Framework (SAF)

SAFとは何か。ダウンロードしてきたスマホのアプリが、勝手に写真フォルダの中を漁って知らないサーバーにアップしたり、いろんな設定ファイルやデータを書き換えたりしたら大変なことになるが、Androidでスマホのアプリが勝手にファイルを読んだり書いたりするのを防ぐための仕組みが、Strage Access Framework 略してSAFである。

SAFは次のルールを守って安全にファイルを処理させようというものだ。
・基本的にアプリは自分専用の領域でしかファイルの読み書きができない。
・他アプリと共有するファイル、例えばカメラで撮った写真などにアクセスするには、ユーザーの許諾を得る必要がある。
・許諾を得たファイルも通

元記事を表示

【JetpackCompose】detectDragGesturesを用いてCanvasお絵描きUndo機能をサクッと作る

## はじめに

JetpackComposeでCanvasお絵描きUndo機能をわりと簡単に実装できるやり方がありましたので備忘がてら共有します。

特に`pointerInteropFilter`からMotionEventを取得して実装する手法は記事などでいくつか見かけるのですが、`detectDragGestures`を使ったやり方はあまり見かけない気がしたので、もし誰かの役に立てれば嬉しいです。

:::note warn
どちらのやり方が良いとか悪いとかの話ではありません。
こういうやり方もあるという話です。
:::

## キャプチャ

## ソースコード全文

“`kotlin
data class DrawLine(
val drawKey: Long,
val start: Of

元記事を表示

【AndroidView】RecyclerView から Groupi を使ってみる

# はじめに
今まで RecyclerView で実装していたことを Groupi で実装することがあったので、そのメモです。

# 導入
Groupy のリポジトリにある [Try it out](https://github.com/lisawray/groupie?tab=readme-ov-file#try-it-out) の通りに導入します。

Gradle に implementation を追加します。
“`gradle: build.gradle
dependencies {
implementation “com.github.lisawray.groupie:groupie:$groupie_version”
}
“`
次に、settings.gradleに `maven { url ‘https://jitpack.io’ }` を追加します。最新のプロジェクトではこれがないと動かないようです。(実際、自分も動きませんでした。)
“`diff_gradle: settings.gradle
dependencyResolutionManagement

元記事を表示

【Android】AndroidStudio HedgehogでDevice Explorerを表示する方法

# はじめに
Hedgehog、だいぶオシャレな感じのAndroidStudioになりましたよね。
ログなどの位置もこれまでと変わっており、違和感を感じる方も多いのではないでしょうか。
そんな中で今まではデフォルトで表示されていたDevice Explorerがデフォルト非表示になったようです。
今回はこのDevice Explorerをこれまで同様に表示する方法を備忘録的にまとめておこうと思います。

# Device Explorerの表示方法
アップデート後の表示は以下の状態になっています。

![スクリーンショット 2024-01-28 18.39.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/536e12ec-c756-4b92-c011-185591233a75.png)

見ての通り、Device Explorerは表示されていません。
AndroidStudioからデバイスにアクセスしディレクトリを操作できると便利な場面も多いと思いますので、表示するように調整します。

元記事を表示

【Android】Viewをドラッグして移動させる【Kotlin】

# はじめに
今回は Viewをドラッグして動かすアニメーションを色々触ったのでその一部をメモがわりに記事にしておこうと思います。
# 実践
サクッと 初期設定のHello World!を動かしていきます。
“`
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val textView: TextView = findViewById(R.id.text_view)

                // タッチする前のViewの位置を常に持っておきたいので、TouchListener外でインスタンス化
var oldPositionX = 0
var oldPositionY = 0

textView.setOnTouchListener { view, even

元記事を表示

DeepLinkの動作確認を簡単にする方法

# はじめに
今回はDeepLink実装の動作確認を簡単にする方法を紹介します
この記事を読む前に下記の記事を読んでおくとわかりやすいです
https://qiita.com/ryuji_sato/items/9e0906141f7ec36ff0ce
### 本文
上記の記事にあるリンクを開いた状態で端末を接続して適当なサイトを開くと下記のようにコードを見ることができます
ここで適当なボタンに対して書かれてるhrefに対して右クリックをすると`edit attributes`という項目があるのでそれを選択して試したいリンクを貼り付けることで簡単に動作確認をすることができます
![スクリーンショット 2024-01-28 17.43.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638092/0a56d350-1f46-b3a8-4aab-305420853e4e.png)

### 最後に
テキストリンク化でもいいのですが、実際にWeb上で動かさないといけない時などに役立つかと思います

元記事を表示

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

元記事を表示

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}

元記事を表示

OTHERカテゴリの最新記事