- 1. OPPOのランチャーでJetpack Glanceで実装したウィジェットの表示がおかしい問題
- 2. Flutter でセキュアに Key/Value を保存する
- 3. Jetpack Compose のダイアログの背景を透明にしたい
- 4. IdeaVim の設定方法
- 5. 通貨の数値表記はいろいろ
- 6. 【Flutter】The product is not available for purchase.
- 7. UserLAndでなぜip aが動かないのか
- 8. Google Play Core Library から Play In-App Review Library への移行
- 9. 独学でAndroidアプリを作ってみたーKotlinで子供向けアルファベットクイズアプリ
- 10. Jetpack Compose ベースの Navigation まとめ
- 11. Jetpack Compose で構築した画面に Google Map を配置する
- 12. [Flutter] 文字サイズを大きくすると周囲に空白が発生する
- 13. AndroidでBitmap生成時の落とし穴
- 14. android端末でテスト(アサーション)する
- 15. 学生の50%以上が使う大学非公認アプリを作った話
- 16. 【Android】ADB操作にはADB Ideaプラグインが便利
- 17. アプリの★5評価が激増!不満をもらう&応援してもらう方法
- 18. Android Studioでハマった話
- 19. 【Android】 メディアの権限やアクセス方法について
- 20. 【Flutter】依存パッケージがエラーに対応していない場合に自力で対応する
OPPOのランチャーでJetpack Glanceで実装したウィジェットの表示がおかしい問題
OPPOのランチャーにJetpack Glanceで実装したウィジェットを設置すると表示がおかしい問題にぶつかりました。Novaランチャーなど、3rdパーティのランチャーアプリをインストールすれば問題無く動作するので、端末に原因があるという訳でもなく、プリインのランチャーの挙動が原因のようです。
私が持っている端末はOPPO Pad Airでが、スマホも挙動が同様なのでこちらで検証してみます。
デフォルトのランチャーアプリは以下です。![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/d6c29b00-cded-2977-15ad-a5e3b534120c.png)
Jetpack Glanceで以下のような表示をしてみます。通知されたサイズの縦横半分の矩形を中心に表示して分かりやすくしています。
“`kotlin
class MyWidget : GlanceAppWidget() {
override val sizeMode = SizeMode.Exactp
Flutter でセキュアに Key/Value を保存する
# はじめに
アプリを開発していると設定などを Key/Value として保存するケースが多く、簡単に実現する場合は [shared_preferences](https://pub.dev/packages/shared_preferences) パッケージを使うことで簡単に実現できます。
しかし、多くの場合で平文は避けたいこともあり、暗号化して保存したいということになります。
Flutter には、 [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) という KeyChain などを利用してセキュアに保存できるパッケージもありますが、この保存された値はアプリをアンインストールしても消えないというデメリット?もあります。そこで、これらを組み合わせることで、セキュアでかつ簡単に Key/Value を保存できるようにしてみました。
# 実装
## 利用する Flutter Packages
以下の3つのパッケージを導入します。
“`pubspec.yaml
dependencies:
Jetpack Compose のダイアログの背景を透明にしたい
## 概要
Dialog はデフォルトで半透明の灰色背景になっているので、これを透明したかった。## 方法
以下のStackoverflow の記事によると以下のように setDimAmount(0f) をしてあげれば透明になると書いてある。https://stackoverflow.com/questions/71766321/jetpack-compose-dialog-is-there-a-way-to-change-the-background-transparency
“`kotlin
@Preview(device = “id:Nexus S”)
@Composable
private fun Test() {
Dialog(onDismissRequest = { }) {
((LocalView.current.parent as DialogWindowProvider).window).setDimAmount(0f)
Box(modifier = Modifier.fillMaxSize()) {
IdeaVim の設定方法
:::note
この記事は [Vim 駅伝](https://vim-jp.org/ekiden/)、2024年8月20日の記事です。
前回は、[kyoh86さん](https://zenn.dev/vim_jp/articles/5a95805896d6cf)でした。
:::最近、自分は相対行番号の設定にハマっています。Vim/Neovim だけでなく、モバイルアプリ開発で使っているIDEにもこの設定をしています。
この記事では完全なVim/Neovim の話ではなく、JetBrains IDE や AndroidStudio で Vimのキーバーインドが使える IdeaVim の設定について紹介します。
# IdeaVim とは
IdeaVim とは JetBrains社がメンテナーをやっている、JetBrains IDE 用のVimエンジンです。https://github.com/JetBrains/ideavim
InteliJ IDEA をベースに作られた AndroidStudio でも使うことができます。
## 導入方法
AndroidStudioを
通貨の数値表記はいろいろ
ユーザーのロケール(地域と言語設定)に合わせて、DB で管理している数値データを現地通貨へローカライズ表示している Android アプリを公開しています。各国の通貨へ対応するのに時間がかかったので、実装方法を残しておきます。
日本語設定
![cropped_jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/1e1a5f2f-7d48-ea75-e715-651ea182ad22.png)米国英語設定
![cropped_en.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853334/5384f05d-0bea-5d4d-0ebe-4b52b5d8886e.png)サウジアラビアのアラビア語設定!?(私は読めないです…)
![cropped_ar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38533
【Flutter】The product is not available for purchase.
# 状況
クローズドテストはすでに開始しており、Google Play Storeからインストールしたアプリだとちゃんとアイテムが表示されるのに、VScodeからdebugで実行するとタイトルのエラーが現れる。
多くの対処法ではクローズドテストの準備が整っていないなどが原因だが、自分の場合、それはありえないという状況だった。
解決にめっちゃ時間かかったので、備忘録として残しておく。# 解決
RevenuCat Communityで[問い合わせた](https://community.revenuecat.com/general-questions-7/flutter-the-product-is-not-available-for-purchase-4890?postid=15650#post15650)ところ、ユーザがいる国かライセンステストのテスターとして登録されていないユーザかということ原因だといわれた。
Playストアはライセンステストのテスターで登録されているアカウントでログインしていたので、もしかすると、Playストアからインストールした場合は、テスター登録されているア
UserLAndでなぜip aが動かないのか
# 序
今回はAndroidで動くLinuxライクな環境であるUserLAndを使ってみます。
https://github.com/CypherpunkArmory/UserLAnd
出来ることが少なすぎるし、ここ2年ほど更新がなく、個人的には実用に耐えない環境だと思いますが、端末がスマホしかない!というとき、特にBluetoothな携帯キーボードがあったりすると便利なので入れてあるソフトです。今日はこれで何かが動かないときどうして動かないのかを調べてみます。ターゲットはipコマンドになります。
※Android14環境で確認した結果です。
※ssh経由でPCからのCLI操作を前提とするので、あまり端末自体の設定はしません。# インストールからPCからのリモートssh接続まで
1. PlayストアからUserLAndをインストールして起動
1. Ubuntuを選択
1. Minimalを選択
1. Terminalを選択→環境構築完了し端末画面が出るのを待つ
1. Android設定の端末情報などでIPアドレスを調べる
1. UserLAndのFilesystemsタブ
Google Play Core Library から Play In-App Review Library への移行
# 背景
2024年7月13日に Google Play から以下のようなメールが届きました。> 件名:
> [ご対応のお願い] Play Core Maven の依存関係を Android 14 用にアップデートしてください
>
> 本文から抜粋:
> 旧バージョンの Play Core Library は Android 14 をターゲットとするアプリでクラッシュするおそれがあるため、できる限り速やかに新しいバージョンのライブラリにアップデートしていただく必要があります。なお、Google Play では 8 月 31 日以降、すべてのアプリの新規リリースにおいて Android 14 をターゲットとすることが求められます。
>
> お客様のアプリでは、targetSdkVersion 34 に対応していないバージョンの Play Core ライブラリが引き続き使用されていますので、以下に示します。
>
> • com.google.android.play:core-ktx, com.google.android.play:core
>
> クラッシュを防ぐため、アプリ内の
独学でAndroidアプリを作ってみたーKotlinで子供向けアルファベットクイズアプリ
# 独学でAndroidアプリを作ってみた
![Screenshot 2024-08-20 at 10.48.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/5204e5aa-12ff-5350-29ba-177f2cad9b7b.png)
↓誰も遊んでくれないのでダウンロードしてくれると嬉しいな!
https://play.google.com/store/apps/details?id=alpha.app.example.myapplication&pli=1スマホアプリを作ってみたくてYoutubeやGoogleを漁りながら作ってみました。
子供に邪魔されない時間コツコツと作業したので半年くらいかかっています。
途中どうしても思い通りに動かない!
ということがなんどもあって挫けそうになったり、
デプロイの方法が全くわからずお手上げ状態になりかけましたがなんとかリリースできました。エンジニア歴2年の時の作品なのでちょっとこれどうなのっていう部分もありますが、
頑張って自
Jetpack Compose ベースの Navigation まとめ
## はじめに
– 以前 Fragment ベースの Navigation について書いたので、 Compose ベースでの Navigation をどう実装するか調べてみました
– ごく基本的なところをまとめた内容なので、トラブルシューティングや応用については参考にならないと思います(ごめんなさい)
– メモ書きをそのまま起こしただけなので、文章が雑多な点はご承知おきください## インストール
下記はあくまで Navigation に関連する依存関係だけなので、 Compose 関連のものは別途追加すること
“`kotlin
implementation(“androidx.navigation:navigation-compose:$navigation_version”)
“`## 基本的な使い方
大まかな手順は以下の通り
1. `NavController` を取得
2. 下記いずれかの方法で Navigation Graph を定義
– `NavHost` の builder パラメータに渡すラムダで定義
– `NavController
Jetpack Compose で構築した画面に Google Map を配置する
## はじめに
– Maps SDK for Android の MapView を使って Jetpack Compose で構成した画面に Google Map を表示する方法です
– 今後使うかも知れないので、ここに残しておくことにしました。どなたかのお役に立てば嬉しいです
– ちなみに元ネタは下記の Codelab です。気になった方はトライしてみてください
– [Jetpack Compose の高度な状態と副作用](https://developer.android.com/codelabs/jetpack-compose-advanced-state-side-effects)
– 従来の Android View で `MapView` を使うやり方については、以前[こちらの記事](https://qiita.com/outerlet/items/36a9152c1cce46a9cfa6)で共有させて頂きました
– かなり前の記事ですが、基本的には今でも同じ方法が使えるようです## 実装
ポイントは以下の2点になるかと思います
– ライフサイクル
[Flutter] 文字サイズを大きくすると周囲に空白が発生する
## 今回発生した問題
今回発生した問題はタイトル通り、Flutterでアプリを開発時にfontSizeを大きくしていくと周囲に空白が発生するというもの
font: Kiwi-Maru, fontsize: 50で発生。PaddingやGapを設定していないにも関わらず、文字の上に空白ができている
コードは以下の通り
“`sample.dart
Container(
color: Colors.white,
child: Text(
“2”,
style: TextStyle(
font
AndroidでBitmap生成時の落とし穴
# はじめに
今回はAndroidで印刷用のBitmap生成時にはまったポイントを紹介していきます
### 本文
AndroidではBitmap生成時に引数として各色に対しての使用するbit数設定することができます。
その時RGB_565を設定するとbitmap作成後、グレースケールに変換する際、なぜか緑が表現できず緑や、黄色系の色を変換できず白抜けしてしまうという不具合が発生してしまいます
### 最後に
原因の特定までは至っていませんが、判明次第追記していこうと思います
android端末でテスト(アサーション)する
今回使う**assertステートメント**はデフォルトでは無効になっているので、それを有効にする方法を記事にしていきます。
#
まずは、android端末が接続されていることを確認してください。次にandroidStudio内のコマンドで以下を実行します。
“`
adb shell setprop debug.assert 1
“`
これでアサーションを有効にできます。また、無効にするには以下を実行します。
“`
adb shell setprop debug.assert 0
“`– – –
この方法でテストを行った時、端末が接続されていないか、2つ以上の端末が接続されている場合
コマンドが失敗します。# 参考
https://www.hiramine.com/programming/android/assertion.html
学生の50%以上が使う大学非公認アプリを作った話
# はじめに
こんにちは。 私は徳島大学院で物質機能化学の研究を行っている修士2年の[akidon0000](https://x.com/akidon0000)です。私は3年前に個人で徳島大学生向けに **「トクメモ+」** というアプリをiOS、Androidで開発し、
・ダウンロード数 5200件
・MAU 3259ユーザー (徳大学部生の **約56%**)のアプリを大学非公認で運用しています。
:::note info
本記事は、**「トクメモ+」** がどういった経緯で開発され、どんな活動をしてきたのかをまとめたものです。
:::# トクメモ+についての発表スライド
https://speakerdeck.com/akidon0000/xue-sheng-puroziekutoyun-ying
【Android】ADB操作にはADB Ideaプラグインが便利
# はじめに
Androidのアプリエンジニアであれば間違いなく触るであろうADB操作ですが、実はこの操作を簡単に実行可能なプラグインがあるのはご存知でしょうか。
ターミナルで実行するのも良いと思いますが、複雑な操作が必要ない場合にはこのプラグインを使用することで、より効率的に作業を行うことができると思いますので今回はADB Ideaをご紹介したいと思います。# ADB Ideaの導入方法
導入は他のプラグインと同様になります。`Settings > plugins` より`ADB Idea`と検索してもらい、インストールするだけで使用できるようになります。
![スクリーンショット 2024-08-18 11.07.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354522/8417333b-57cf-4afe-ad20-f41b8c2b0344.png)
# ADB Ideaの使用方法
まず、ADB Ideaのできることを紹介します。– ADB Uninstall App
– A
アプリの★5評価が激増!不満をもらう&応援してもらう方法
# はじめに
私は、AndroidとWindows向けのドラマティック高校野球シミュレーションゲーム【栄冠にゃいん2024】を公開しています(Unityで開発)。
Google Playでは、応援してくださるユーザーの皆様のおかげで、評価数800人くらいで**平均評価 4.7~4.8 くらいの高評価をいただいています(★5で評価してくれた人に感謝!)**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528352/952aadd9-c063-267c-8368-8d8d15fc07da.png)私のアプリは、他の有名な野球ゲームアプリと比較したら完成度は低いはずですが、**他アプリと比較して、完成度の割には高い評価をいただいています**。
Google Playで「野球」で検索していくつか見た限りでは平均評価4.7はトップでした。この記事では、私のような**個人開発者が、個人で開発する強みを活かして★5の評価を多くする方法を紹介**します。
大きく2つの章に分けて説明します
Android Studioでハマった話
# はじめに
弊学の`Java`の講義では後半で`Android Studio`を用いたAndroidアプリの演習を行います.その際,計算機室のパソコンに入っている`Android Studio`バージョンと最新版(2023年現在)をインストールしたときの挙動が違いハマったので備忘録としてまとめます.# ハマったこと
計算機室の`Android Studio`では,演習で使うテンプレートとして画像の`Empty Activity`を選択すればいいです.しかし,最新版では`Empty Activity`を選択するとこのあとの画面で`Java`を選択できなくて詰みます.(`Kotlin`しか使えない)![スクリーンショット 2024-08-17 16.44.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806676/d484ed1b-4cfd-20a9-075c-755ca8d95789.png)
# で,どうすればいいのか
ちょっと下にある`Empty Views Activity`を
【Android】 メディアの権限やアクセス方法について
## はじめに
Android側のメディア周りはOSアップデートごとに変更が入って対応が大変なイメージがあります。
最近で一番影響があったのはOS13のアップデートですかね。
OS13以上と未満でメディア領域にアクセスするための権限が異なり、対応していないと写真や動画をアプリに持って来れないといこともあったかもしれません。今回はメディア領域の権限・アクセス方法について整理していこうと思います。
## 写真や動画はどこに保存されるのか
そもそもの疑問ですが、カメラアプリ等で撮影した写真や動画はどこに保存されるのか気になり調べてみました。
Androidのストレージの仕様は大きく2つに分かれてそうで、写真や動画は「共有ストレージ」に保存されているようです。| ストレージ種別 | 内容 |
| – | – |
| アプリ固有のストレージ | ・アプリ専用のファイルを保存する場所
・他アプリからはアクセスできない |
| 共有ストレージ | ・カメラで撮った写真や動画、スクリーンショットなど、共有可能なメディア ファイルが保存される場所
・他アプリと共有することが可能
【Flutter】依存パッケージがエラーに対応していない場合に自力で対応する
## 今回の背景
Flutterで自作したアプリの Android Gradle Plugin (AGP) を最新のバージョンに更新しようと思い、7.x.x から 8.x.x にアップデートしました。すると、使用しているパッケージの`sound_mode`にて以下のエラーが発生し、アプリのビルドが通らなくなりました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985195/cc6f993f-eff6-df71-0077-953a2db4884f.png)
“`
Namespace not specified. Specify a namespace in the module’s build file:
“`自分のアプリ内でビルドエラーが発生している場合、通常は build.gradle に namespace を追加することで解決できます。しかし、今回のケースではパッケージ側のソースコードまで遡って修正する必要がありました。
“`groovy:android/build