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

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

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

元記事を表示

1つのRetrofitでGsonとKotlinSerializationのレスポンスモデルを共存させる

## 前置き

Kotlin/JVMやAndroid界隈ではJsonパーサーとして古くは[Gson](https://github.com/google/gson)が主流でしたが、最近では[KotlinSerialization](https://github.com/Kotlin/kotlinx.serialization)が採用されることが多くなってきたと思います。
それ以外にも[Jackson](https://github.com/FasterXML/jackson)や[Moshi](https://github.com/square/moshi)など数多くのパーサーが存在します。

そして最もJsonパーサーが活用される場面といったらAPIレスポンスのモデルマッピングではないでしょうか?
API通信用のクライアントライブラリでは今も昔も[Retrofit](https://github.com/square/retrofit)が採用されることが多いかと思います。
そこで今回はRetrofitを用いたJsonパーサーを少しずつ移行する方法を紹介します。

## よくある話

元記事を表示

Jetpack ComposeでenableEdgeToEdgeが効かないですよ

# enableEdgeToEdgeが効かない
“`Kotlin
/**
* onCreate
* アクティビティの生成
* @param savedInstanceState Bundle?
*/
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge(statusBarStyle = SystemBarStyle.dark(
Color.Red.toArgb())
)

setContent {
Link22Theme {
// A surface container using the ‘background’ color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
col

元記事を表示

[Android] Arm64でAnti-Disassembly/Decompile

昨日、このような素晴らしい記事を見かけました

こちらの記事ではPLDという命令を使用してアンチディスアセンブルを施していましたが、こちらでも言及されている通り、Arm64では存在しない命令です。

そこで、Arm64ではアンチディスアセンブルを施すことはできないのかと気になったので自分なりに調べてまとめてみました。

# 初めに

ArmにはDCBディレクティブという1バイト以上のメモリを割り当て、メモリの実行時の初期内容を定義するものがあります。

https://developer.arm.com/documentation/dui0473/m/directives-reference/dcb?lang=en

> The DCB directive allocates one or more bytes of memory, and defines the initial runtime contents of the memory.

そのほかにも種類があり、

元記事を表示

【UE5】Android スマホでのデバッグ方法(UE5.1)

# 手順
## Android Studio のインストール
### 手順1
[Android Studio のダウンロード アーカイブ](https://developer.android.com/studio/archive)に行き、バージョン **4.0** をダウンロードする。

TSUBASAMUSU.png

### 手順2
ダウンロードしたインストーラーを実行して Android Studio をインストールする。

TSUBASAMUSU.png#323 2024-04-21 駄菓子 議事録

# [消費電力を検証しよう](https://android-developers.googleblog.com/2024/04/how-to-effectively-ab-test-power-consumption-for-your-android-app-features.html)
– hedgehogからpower profilerが見れる
– power profiler : 消費電力を確認できるところ
– Profilerから頑張って開けるらしい
– レコードしたら見れる
– 記事では緑枠部分の和を消費電力として計算している
![スクリーンショット 2024-04-22 22.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906559/a305be06-95ee-f9f0-c4f4-f6843a68bd6d.png)

– この記事のユースケースでは動画をダウンロードしているのでDisplayとGPUは必要ない
– ユースケースによってどの値の和を消費電

元記事を表示

#322 2024-04-14 駄菓子 議事録

# [ComposeでDI](https://medium.com/androiddevelopers/dependency-injection-in-compose-a2db897e6f11)

– composeDIむずいな
– Single Activityの場合:すべてのViewModels(と注入されたオブジェクト)は、そのアクティビティが生きている限り保持される
– Compose Navigation ライブラリを使用した場合:hiltViewModel() が自動的にナビゲーション目的地のバックスタックエントリーを ViewModel のオーナーとして使用。ナビゲーションバックスタックに目的地が存在する限り、ViewModelは保持されます

– :question: SingleActivityの時と比べてどうなるのかちょっと分かりにくい。ViewModelの寿命の依存先が変わってくるんだろうけど
– Composable関数を含むクラスを作成し、依存関係をそのクラスに注入することができます。そして、そのクラスが必要なアクティビティやフラグメントの近くにインジェクトし

元記事を表示

苦手なラムダ式を克服する

## はじめに
今までラムダ式は**コードを簡潔に書ける便利なもの**くらいの理解でしかなかったので、今回はラムダ式を分解しながら克服していこうと思います。

## ラムダ式とは
> ラムダ式(lambda expression)とは、プログラミング言語に用意された記法の一つで、名前の無い無名関数(匿名関数)を簡潔に定義するもの。

よくわかりません。実際にコードで理解していきます。

## 前提知識
ラムダ式は**ローカルクラス**と**無名クラス**という仕組みを利用しています。

### ローカルクラスとは
ローカルクラスは**メソッド内で宣言するクラス**のことです。
インターフェースを実装したローカルクラスも定義できます。
“`java
public static void main(String[] args) {

class Local implements Runnable {
@Override
public void run() {
System.out.println(“Hello Lambda!”);
}
}

元記事を表示

OTHERカテゴリの最新記事