- 1. 【Android】アプリ署名時の証明書情報を確認する
- 2. Dagger Hiltを使いましょう
- 3. [Android] ViewPager2 無限スクロール
- 4. 【Flutter】Androidでhttp通信を許可する方法
- 5. androidデバイスのGPUを使ってTensorflow liteを高速にする
- 6. 最近ManjaroでAndroid emulatorが起動しない件について
- 7. 【個人開発】Android アプリ開発初心者が Google Play に 14 回リジェクトされた話
- 8. 暗号化SharedPrefarenceの書き方
- 9. Flutter で Android と iOS のスワイプして戻る画面遷移機能を無効化する
- 10. JetpackComposeでアニメーションを使った表示・非表示の切り替え
- 11. JetpackCompose の OutlinedTextFieldの色を調整したいとき備忘録
- 12. Flutter の BottomNavigationBar で4つのアイテムを設定するとテキストが表示されない問題の解決方法
- 13. Kotlin 2.0.0でKMPのSwiftPM export機能が入る(のかもしれない)
- 14. Source of truthを確保するためにRoom databaseを使うメモ(いいね問題)
- 15. AndroidStudioのエミュレータの画面サイズを確認する方法
- 16. Androidスマートフォンを工場出荷時に初期化。しかし、思わぬ落とし穴が。。。
- 17. [Android] ViewModelインスタンスの共有と管理
- 18. Settingsに定義されているActionで呼び出せるシステム設定画面一覧
- 19. Androidで円形のリアルタイムBlur効果を付ける(RealtimeBlurView)
- 20. osmdroid(OpenStreetMapのAndroid向けライブラリ)のMapViewを鳥瞰図に対応させる
【Android】アプリ署名時の証明書情報を確認する
Androidアプリの署名時の証明書の情報(ハッシュ値など)を確認する方法を記載します。
# 環境
この記事の作業は、以下の環境で実施しました。
– macOS Ventura
– Android Studio Iguana 2023.2.1 Patch 1
– Android SDK Build-Tools 34.0.0
– OpenJDK 17 (OpenJDK Runtime Environment Corretto-17.0.10.7.1 (build 17.0.10+7-LTS))# 署名の確認方法
## `apksigner`を使う
apksignerは、Android SDKに付属しているツールです。
v2以降のスキームを使用した署名がされている場合はこちらを使う必要があるようです。インストールされているBuild-Toolsのバージョンによってパスは変わりますので適時置き換えてください。
“`sh
$ ~/Library/Android/sdk/build-tools/34.0.0/apksigner verify –print-certs -v
Dagger Hiltを使いましょう
Androidで依存関係の注入(Dependency Injection : DI)を行う場合、第一候補に上がるのは**Dagger Hilt**だと思います。
https://developer.android.com/training/dependency-injection/hilt-android?hl=ja
公式ドキュメントも充実しており、Codelabも提供されています。ただ、私の場合、自分のアプリにどうやって適用すればいいのかなかなかイメージができず、理解するのにかなり苦労してしまいました。
こういう説明をされていれば自分も理解が捗ったかもしれない、という内容を書いてみようと思います。
ただの自己満足なので、逆に分かりにくかったらごめんなさい。# インターフェイスと実装を分離する
依存関係の注入を使おうとする動機を端的に言えばインターフェイスと実装を分離したい。ということだと思います。
たとえば、以下のようにRepositoryクラスを定義して“`kotlin
class FooRepository {
override fun doSomethi
[Android] ViewPager2 無限スクロール
![](https://velog.velcdn.com/images/rmsxo5678/post/399c2b7c-d33a-4b57-8c40-7ce679bbd002/image.gif)
# *無限スクロール*APIを通じて画像を読み込んで、読み込んだ画像とテキストを無限スクロールできるようにするために、画像とテキストビューの位置がそれぞれ異なるため、アイテムを別々に作成して設定しました。
インジケータは読み込む画像の数に応じて設定される必要があり、TabLayoutMediatorを使用すると無限に増えてしまうため、コード内で実装する必要がありました。また、ボタンを作成して、クリックすると画像が切り替わるようにしました。
コールバックを通じてメイン画像の位置を通知し、テキストとインジケータを設定します。
APIで読み込む画像は数が増える可能性があるため、サンプルでは内部画像でビューモデルやデータクラスなどは削除されており、静的ですが、アイテムの数に応じて動的に変更し、状況に応じて修正する必要があります。
## *ViewPager2*
MainFr
【Flutter】Androidでhttp通信を許可する方法
## はじめに
開発の段階ではdev環境のサーバーを用意して、そこに対してAPIを投げて通信するのが一般的だと思います。
しかし今の現場でバックエンドとフロントエンドで繋ぎこみを行う際に、
まずはフロントエンドのローカル環境で試して成功を確認→サーバーにデプロイすることとなりました。
この時にhttp通信となるのですが、Androidでは次のエラーが出て上手くいきませんでした。“`
Error: SocketException: Connection refused (OS Error: Connection refused,
errno = 111), address = localhost, port = 52604
“`
結果的にこのエラーを解消して無事にhttp通信を許可させることができましたので、
その方法をまとめてみたいと思います。### 筆者の経歴
– UIKitでのiOSアプリケーション開発の学習9ヶ月
– SwiftUIでのiOSアプリケーション開発学習4ヶ月
– Flutterでのモバイルアプリケーション開発3ヶ月### 記事の対象者
– A
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: SharedPreferencesinit {
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)