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

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

androidデバイスのGPUを使ってTensorflow liteを高速にする

# AIを使うならGPUは使わないと
androidでAIモデルを使用する場合、デフォルトではCPUのみで実行することになります。
もしデバイスに**GPU**(Graphics Processing Unit)が入っている場合、GPUを使用することで**処理を大幅に高速化できます**。

たとえば、Google Pixel 7aでYolov8を実行した場合、
**CPUでは 0.9秒
GPUでは 0.2秒**
で実行されます。

# GPUDelegate

デバイスのGPUを使うためには、TensorFlowLiteの**GPUDelegate**を設定します。
TensorFlowLiteのInterpreterを初期化するときに、オプションにGPUDelegateを加えるだけです。

(ちなみに、NNAPIDelegate(NeuralNetworkAPI)というのもありますが、これは自分の環境(GooglePixel7a)ではCPUと変わりませんでした、)

# 方法

### 必要なライブラリのインストール

“`gradle:build.gradle
implemen

元記事を表示

最近ManjaroでAndroid emulatorが起動しない件について

## 起きている現象

2024年の3月辺りから、Manjaro(おそらくArchLinuxも)でAndroid emulatorが起動しない問題が発生しました。

IntelliJやAndroidStudioから起動しようとするも起動しません。

ターミナルから起動して起動時のログを確認すると、Segmentation fault (コアダンプ)となりました。

## 原因

Manjaro Forumに同じ現象について書かれていました。
https://forum.manjaro.org/t/segmentation-fault-on-android-emulator-because-of-latest-qemu-update/157548

どうやらqeumの最新バージョンによるバグとのこと。
Vukanがうまく動いてくれないようです。

## 解決方法

2つあります、どちらの方法でも解決しました。
通常であれば2つ目の方法、設定汚したくない時やグラフィックが重いものを動かす場合は1つ目の方法を使うとよいかと思います。

1. ハードウェアレンダリングからソフトウェアレンダリン

元記事を表示

【個人開発】Android アプリ開発初心者が Google Play に 14 回リジェクトされた話

# はじめに
初めまして、まみめです。
私は 2023 年の 9 月に Android アプリ開発を始めて今日まで 3 回リリースを行ってきました。
初めてのアプリ開発は大変難しく試行錯誤しながらなんとかリリースを行ってきました。
しかし、3 個目のアプリのリリースでなんと Google Play に 10 回以上のリジェクトを受けてしまい、かなり解決に苦しみました。
多くは私の知識・技術・注意力の不足によるものです。Android アプリ開発に慣れている人であれば当たり前の内容ですが、始めたばかりの人にとって少しでも助けになればと思い、この記事を書きました。皆様の助けになれば幸いです。

# リリースしたアプリの概要
### リリースしたアプリ
『カラオケ楽曲ガチャ』

https://play.google.com/store/apps/details?id=com.karaoke19.karaokegacha&hl=ja&gl=US

![スクリーンショット1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

暗号化SharedPrefarenceの書き方

# はじめに
今回はローカルでデータを持っておく時に使うSharedPrefarenceの暗号化バージョンの書き方を紹介していきます
### 本文
早速コードですが下記になります。
実際に保存するときは`sharedPreferences.edit().putString()`で保存することができ、読み込むときは`sharedPreferences.getString()`でアクセスすることができます
“`kotlin
private val sharedPreferences: SharedPreferences

init {
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
sharedPreferences = EncryptedSharedPreferences.create(
context,

元記事を表示

Flutter で Android と iOS のスワイプして戻る画面遷移機能を無効化する

# なにこれ
この戻る機能を無くしたいので、それを実装した時のメモを書く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/82a1a37c-2c3f-7b0d-1883-297374b3cf65.png)

# 解決方法
`PopScope` を利用して `canPop: false` を実装するだけで大丈夫でした。

### Before
“`dart
class _HomeViewState extends State {
int selectedIndex;

_HomeViewState({Key? key, required this.selectedIndex});

@override
Widget build(BuildContext context) {
return Scaffold(
// コードが続く
“`

### After
“`dart
class _HomeViewState ex

元記事を表示

JetpackComposeでアニメーションを使った表示・非表示の切り替え

# 実践
“`
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.padding(40.dp)
) {

var isVisible by remember {
mutableStateOf(true)
}
val animation by animateFloatAsState(
targetValue = if (isVisible) 1.0f else 0f,
)
Box(
modifier = Modifier
.size(200.dp)
.graphicsLayer {
alpha = animation

元記事を表示

JetpackCompose の OutlinedTextFieldの色を調整したいとき備忘録

JetpackComposeの`TextField`や`OutlinedTextField`を使用している時に、各場所の色をデフォルトから変更したいことがあると思います。
そういう場合に、` OutlinedTextFieldDefaults.colors`のどこを変更したらどの色が変わるのかというのを記録したメモです。

# 環境
`androidx.compose.material3:material3:1.2.1″`
です。

# デフォルト(何も調整しない時)

– コード

“`kotlin
@Composable
fun SampleScreen() {
val str = remember {
mutableStateOf(“”)
}

Box(modifier = Modifier.padding(16.dp)) {
OutlinedTextField(
value = str.value,
onValueChange = {
st

元記事を表示

Flutter の BottomNavigationBar で4つのアイテムを設定するとテキストが表示されない問題の解決方法

# なにこれ
Flutter で BottomNavigationBar を使ってメニューを作成しようと思ったらテキストが表示されなくて困ったので、その時の解消方法をメモ

# 事象
3つまでだとこのように良い感じに表示されるが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/6a92eb77-dde2-29ad-04f8-fae74b6e81b6.png)

4つ以上になるとテキストが見えなくなった!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2819748/4d66dc22-557e-87a3-bbd9-922a527f0d45.png)

# 解決方法
`type: BottomNavigationBarType.fixed` で固定にしないといけないらしい。
“`
bottomNavigationBar: BottomNavigationBar(
typ

元記事を表示

Kotlin 2.0.0でKMPのSwiftPM export機能が入る(のかもしれない)

# Kotlin Multiplatform Gradle Plugin supports SwiftPM Export

– 今までFramework or XCFrameworkのDilectLink, CocoaPodsしかサポートされていなかったがSwiftPMのexportも公式にサポートされることになった
– 2.0.0-Beta5で彗星の如く機能が追加されてRC-1にも入っている
– RC-1で確認した

https://github.com/JetBrains/kotlin/commit/d76a6d6a9c0dce00b00cf69b26de921884b2b189

https://youtrack.jetbrains.com/issue/KT-65741

– YouTrackもinternalなものなようで記事執筆時点ではみれない

– まだ2.0.0時点でもExperimentalな機能なのでgradle.propertiesでフラグを有効にしないと使えない

“`properties
kotlin.swift-export.enabled=true
“`

元記事を表示

Source of truthを確保するためにRoom databaseを使うメモ(いいね問題)

Androidアプリを開発するにあたって「いいね問題」は課題としてよくあがります。例えば記事を表示するアプリで、記事一覧と記事詳細画面があるとします。記事詳細でいいねを押したあと、記事一覧に戻ったときにいいねをどう反映させるか、という問題です。

良いね問題への対処としては[flowのようなイベントを一覧画面でもサブスクライブしてイベントを受け取れるようにするという方法](https://at-sushi.work/blog/7/)もあるようです。こちらは変更が少ないと機能すると思ます。しかし扱う変更が増えてくるとコードを追いかけるのも難しくなるでしょう。

一方Googleのアーキテキチャガイドやnow in androidのようなサンプルではroomのようなdatabaseを使う方法があります。droidkaigiの公式アプリでも使われていたらしく、この方法を使うことが推奨されます。

## Source of truth(信頼できる唯一の情報源)
[Google Developerのアーキテキチャガイド](https://developer.android.com/topic/a

元記事を表示

AndroidStudioのエミュレータの画面サイズを確認する方法

Androidは画面サイズによってデザインが崩れてしまう事があると思います。

エミュレータの画面サイズを確認する方法です。

Device Managerを開き画像のようにViewDetailsをクリックします。

![スクリーンショット 2024-04-28 2.00.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/7f852382-5bb4-c59b-ac79-20c694eeac63.png)

このような表示が現れるので確認することが出来ます。

![スクリーンショット 2024-04-28 2.01.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/f2af109a-1c76-36fd-1107-51b3b5c986af.png)

元記事を表示

Androidスマートフォンを工場出荷時に初期化。しかし、思わぬ落とし穴が。。。

# 事の起こり
3月と言えば新生活応援セールがあちこちで行われますが、Google StoreでもGoogle Pixelなどの製品を大幅値引きして販売するセールが行われました。筆者はPixel 7aを昨年の5月に購入したのですが、画面内指紋センサーの感度がいまいちで大変不満でした。ネットで検索してみても同様の不満の声が書き込まれているレビューを時々見掛けるので、筆者の端末だけが初期不良ということでもなさそうです。よって、このセールでPixel 8を狙うことにしました。セール値引きに加えてPixel 7aを購入した時に貰ったストアクレジットを加えて、更に旧端末を下取りに出せば更に大幅な値引きが期待出来ます。幸いPixel 7aの前に利用していたPixel 5(筆者にとっては初めてのPixel)も綺麗な状態で残っています。さあ下取りに出そうと勇んだのですが。。。危うく下取りが受けられないことになる所でした。。。:scream: :scream_cat: そんな思わぬ落とし穴を回避する方法を備忘録として残しておこうと思います。

# 下取りの準備
Googleが公式に行っている下取りサービ

元記事を表示

[Android] ViewModelインスタンスの共有と管理

![](https://velog.velcdn.com/images/rmsxo5678/post/ed46c62a-8daf-48e2-953c-c59547e7bf3b/image.jpg)

Androidアプリ開発において、複数のFragment間でViewModelを共有することは、一貫した状態管理とデータフローを維持するために非常に重要です。
このポストでは、ViewModelのインスタンスを管理し、データを共有する方法について記述しました。


### ViewModelインスタンスの作成と共有

> **ViewModel**
> – ViewModelを使用してデータを管理する際、Fragmentが同じActivityに属していればViewModelインスタンスを共有することができます。
これにより、Fragment間でデータの同期と状態の共有が可能です。

## 📌 ViewModelインスタンスの共有例


#### ViewModel

“`kotlin
class InViewModel : ViewModel() {

元記事を表示

Settingsに定義されているActionで呼び出せるシステム設定画面一覧

Androidアプリからシステム設定画面を呼び出すにはSettingsに定義されているActionを使用します。

https://developer.android.com/reference/android/provider/Settings

以下のようにIntentにActionを設定するだけです。
そのままだと同一タスクになってしまうので、`Intent.FLAG_ACTIVITY_NEW_TASK`を追加する場合が多いかと思います。

“`kotlin
startActivity(
Intent(Settings.ACTION_SETTINGS)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
)
“`

アプリの詳細設定など、システム全体では無く、特定のアプリの設定を開く場合、必ず、でないのがややこしいところですが、多くの場合、以下のように`package:`スキームでアプリのパッケージを指定します。

“`kotlin
startActivity(
Intent(Settings.ACTION_AP

元記事を表示

Androidで円形のリアルタイムBlur効果を付ける(RealtimeBlurView)

# 概要
リアルタイムに円形のViewでBlur効果を実現したので、備忘録としてまとめておきます。

# 完成イメージ
![Screenshot_20240427-181653.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55941/3d57b68f-7e84-d2cb-032e-9e34ec5eb2b9.png)
速度・回転数メータの背景が、黒い円形でBlur効果が付いている事が分かります。

# ベースとなるライブラリ
mmin18氏の「[RealtimeBlurView](https://github.com/mmin18/RealtimeBlurView)」を改造します。
※jcenterがEOLとなり、READMEの通りに導入しようとするとインポート出来ないので[jitpack](https://jitpack.io/#mmin18/RealtimeBlurView/master-SNAPSHOT)から取ります。
“`
dependencies {
impl

元記事を表示

osmdroid(OpenStreetMapのAndroid向けライブラリ)のMapViewを鳥瞰図に対応させる

# 概要
osmdroidのMapViewでは真上からの表示にしか対応してません。
そこで、MapViewを改造して鳥瞰図表示に対応しました。(マリオカートのような疑似3Dです)
また地図の回転にも対応しています。
あくまで個人の備忘録としてまとめているので至らない点があったらすみません。

# 注意
計算負荷や各種リソースなどは考慮してないのでそこは注意!

# 完成イメージ
## 真上からの表示
![Screenshot_20240427-181419.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55941/e77f5ac8-fb87-5205-420d-e787df5ca853.png)
## 鳥瞰図としての表示
![Screenshot_20240427-181425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55941/3f076437-8294-ccad-d297-2d14b0fe5ae5.png)

元記事を表示

Google Pixel シリーズの SoC と GPU のメモ

ずっと Qualcomm 製の SoC と GPU だったが,
Pixel 6 からは Google 製の SoC (Google Tensor シリーズ) になり, GPU も Arm の Mali になっている.

|発売日 |デバイス |SoC |プロセス|GPU |
|———-|————-|—————————————–|——-|———–|
|2016-10-20|Pixel |Snapdragon 821 (MSM8996 Pro) [^sdm_821] |14nm |Adreno 530 |
|2017-10-19|Pixel 2 |Snapdragon 835 (MSM8998) [^sdm_835] |10nm |Adreno 540 |
|2018-10-18|Pixel 3 |Snapdragon 845

元記事を表示

androidでYOLOv8物体検出モデルを使う

# Androidで物体検出
**物体検出AIをandroidデバイスで動かせると、サーバー通信なしで便利な物体検出機能を世界中のユーザーに使ってもらえます。**

Yolov8はポピュラーな物体検出AIです。
androidは世界一ユーザーの多いモバイルOSです。
本記事はandroidデバイス上でyolov8物体検出を行う方法です。

以下のリポジトリのコードを参考にしています。

https://github.com/surendramaran/YOLOv8-TfLite-Object-Detector

↑ androidデバイスのカメラでリアルタイム検出を行うコードです。

僕もシンプルなサンプルを作りましたので、よかったら参照してください。
カメラ機能などを省いた検出部分のみのサンプルです。

https://githu

元記事を表示

AndroidアプリでGoogle Mapの使えそうな処理

前回の記事でGoogle Mapを表示するまでの手順を書いたので、今回はGoogle Mapで使えそうな処理について紹介します。

https://qiita.com/ssc-ksakamaki/items/7fe03fab5f7b74382753

## 目次

* [レイアウトファイルとマップの紐付け](#レイアウトファイルとマップの紐付け)
* [初期表示の中心地の設定](#初期表示の中心地の設定)
* [初期表示のマーカーの設置](#初期表示のマーカーの設置)
* [タップ時のマーカーの設置](#タップ時のマーカーの設置)
* [マーカーの吹き出しをタップした時の処理の設定](#マーカーの吹き出しをタップした時の処理の設定)
* [ポリラインの設定](#ポリラインの設定)
* [まとめ](#まとめ)

## レイアウトファイルとマップの紐付け
マップを操作するためにレイアウトファイルのマップと紐付けます。

“`MapsActivity.java
// 継承とインターフェースを変更
public class MapsActivity extends FragmentActiv

元記事を表示

Roborazziで最初にスクリーンショットを撮る時、詰まったポイント

# Roborazziとは
スクリーンショットテストを行うライブラリです。Robolectricと互換性があり、画面変更差分の出力や、gif画像の生成なども行うことができます。
https://github.com/takahirom/roborazzi

# 環境設定

この記事で扱う環境は以下の通りです:

– Android Studio: Android Studio Iguana 2023.2.1
– Android Gradle Plugin: 8.3.0
– Gradle: 8.4
– Robolectric: 4.11.1
– Roborazzi: 1.11.0
– Junit4: 1.6.6

# 導入
モジュールのGradleにrobolectricとroborazziのimplementationを追加します

// roboletric
testImplementation(libs.robolectric)

// roborazzi
testImplementation(libs.roborazzi)
testImpl

元記事を表示

OTHERカテゴリの最新記事