- 1. 学生の50%以上が使う大学非公認アプリを作った話
- 2. 【Android】ADB操作にはADB Ideaプラグインが便利
- 3. アプリの★5評価が激増!不満をもらう&応援してもらう方法
- 4. Android Studioでハマった話
- 5. 【Android】 メディアの権限やアクセス方法について
- 6. 【Flutter】依存パッケージがエラーに対応していない場合に自力で対応する
- 7. 【Jetpack Compose】戻るボタン←をつける
- 8. Androidスマホ起動時に自動的にサービスを起動させる
- 9. 【Android】Retrofit2 で Kotlin Serialization を用いて変換を行う
- 10. スマホの気圧センサーと台風
- 11. スマートフォンのセットアップ手順
- 12. 【Jetpack Compose】OutlinedTextField 全体に対して onClick する方法
- 13. 不正なExtraを含んだIntentを受け取ったことによるクラッシュに対処する
- 14. 【Android Studio】辞書ファイルを設定してうるさいタイポ指摘にサヨナラする
- 15. Type Safety に Navigation Compose を使う場合、SavedStateHandle 経由で NavArg を受け取るときは typeMap を渡そう
- 16. テキストを装飾する -SpannableString-
- 17. 話題のkotlin Multiplatformを使ってみた(~実装まで)
- 18. android studioのstringResourceで頭に空白を入れる方法
- 19. 【AndroidStudio】日本語化手順まとめ
- 20. 【Unity】StreamingAssetsに配置したファイルをAndroidで実行時に読み込む
学生の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 くらいの高評価をいただいています(★5で評価してくれた人に感謝!)**。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528352/eae8a5a1-6e9e-41c3-c9dc-48898129f693.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
【Jetpack Compose】戻るボタン←をつける
## 今回実装するもの
今回は一つ前の画面に戻るためのボタンを実装します。
前回の記事で観光地リストを表示するアプリに詳細画面を追加したのですが、その時に戻るボタンの実装を忘れて随分と不親切なアプリになってしまい、その反省として今回戻るボタンを追加します。
|Before|After|
|—|—|
|||## 前回の記事
詳細画面に画面遷移する機能の実装をしたときの記事です。https://qiita.com/jtakumi/items/395f17187df9228
Androidスマホ起動時に自動的にサービスを起動させる
以前、Androidのフォアグラウンドサービスを使って、位置情報を常に取得するサービスを作成しました。
[Androidのフォアグラウンドサービスで位置情報を取得する]( https://qiita.com/poruruba/items/aa02207080a390e1ac85)
今回は、これをCordovaプラグインにするとともに、Androidスマホ起動時にも自動的に起動するようにします。
ちなみに、この投稿は、以下の投稿の補足です。全ソースファイルは以下を参照してください。
[散歩ルート計画アプリを作った](https://qiita.com/poruruba/items/90d25395670f1bf5a5fe)# AndroidManifest.xml
Androidスマホの起動時に、OSから通知されるブロードキャストを受け取ることで、起動時の処理ができるようになります。
そのために、以下のパーミッションを付けておく必要があります。“`xml:AndroidManifest.xml
【Android】Retrofit2 で Kotlin Serialization を用いて変換を行う Retrofit2 で Kotlin Serialization を用いて変換を行う方法として、
Codelab では retrofit2-kotlinx-serialization-converter を使う方法が紹介されている。https://github.com/JakeWharton/retrofit2-kotlinx-serialization-converter
https://developer.android.com/codelabs/basic-android-kotlin-compose-getting-data-internet#7
## 手順
### Kotlin Serialization をモジュールに導入する。
モジュールの build.gradle.kts の `plugins` ブロックに次を追加する。
“`build.gradle.kts
id(“org.jetbrains.kotlin.plugin.serialization”) version “1.9.10”
“`モジュールの build.gradle.kts の
スマホの気圧センサーと台風
# はじめに
以前スマホのセンサーをPythonで操作するアプリをPlyerで作ってみたが、気圧センサーが本当に動作しているのか?がわからなかったが、ちょうど、今日台風7号がきていたので試してみた。# 気圧センサーのデータ取得
[PythonでAndroidスマホの各種センサー情報を取得する。](https://qiita.com/tapitapi/items/51ddefc1dd8e810430c8)barometer.pressureで取得。
“`python:Barometer
from plyer import barometer
#有効
barometer.enable()
#取得
output+=f’Barometer\n{barometer.pressure:0.2f} hPa\n\n’
“`# 結果
台風が近づくとどんどん気圧が下がっていく事がわかる。あらためて数値で見てみると面白い。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299802/221
スマートフォンのセットアップ手順
1. wifiに接続する
1. PCでパスワード共有用のlocalサーバーを立ち上げる serveなど
1. google もしくは appleのアカウントのID, passwordがわかるメモのファイルを 2. のサーバーから見られる状態に設定する
1. ログインする
1. 1passwordをダウンロードする
1. 1passwordにログインする
1. 各種サービスへログインする
【Jetpack Compose】OutlinedTextField 全体に対して onClick する方法
# 完成形(OutlinedTextField をクリックすると日付選択ができるようにする)
![OutlinedTextFieldAndDatePicker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1630025/053364ae-08ca-4287-325c-338e56bc4096.gif)
– 日付を選択すると OutlinedTextField の値を変更する
– 日付選択はダイアログから行う
– テキスト入力はさせない
– 日付選択のダイアログを閉じると OutlinedTextField のフォーカスを外す# 実装
## OutlinedTextFiled 全体を選択可能にする
【NG】 Modifier.fillMaxWidth().clickable(onClick)
“`kotlin
OutlinedTextField(
modifier = Modifier
不正なExtraを含んだIntentを受け取ったことによるクラッシュに対処する
Androidアプリは、外部からIntentを受け取ることによって起動します。IntentにはExtrasという任意の引数を渡す仕組みがあり、多くのアプリで利用されています。しかし、Extrasに不適切な情報が含まれている場合、アプリが容易にクラッシュしてしまうことはあまり知られていないかもしれません。Extraを読み出している場合や、明示的にExtraを扱っていなくても、SavedStateHandleを受け取るViewModelを扱っている場合は注意が必要です。
例えば、アプリAのonCreateで以下のようにExtraを読み出しているとします。
“`kotlin:アプリA
val data = intent.getStringExtra(“hoge”)
“`このアプリAを、アプリBから次のように起動させてみます。
“`kotlin:アプリB
val intent = Intent()
intent.setClassName(“com.example.myapplication”, “com.example.myapplication.MainActivity”)
【Android Studio】辞書ファイルを設定してうるさいタイポ指摘にサヨナラする
## 概要
オリジナルのアプリを作っていたりすると、コード中にオリジナルの言葉が登場することは多々あると思います。
ですがAndroid Studioは親切なので、そういった言葉も~~余計なことに~~ご丁寧にタイポ指摘してくれます。アプリ自体に影響があるわけではないのでそのままでも全然問題ないのですが、何か気持ち悪い!となるのでこれが出ないようにします。
## 対処法
### 1. Android Studioの設定で対処
以下の画像のように、設定のSpellingで指摘しないでほしいワードを追加します。
個人で進めているプロジェクトならこれで必要十分だと思います。![スクリーンショット 2024-08-15 15.07.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2724617/41a81fab-c872-ee74-5812-3dafa8f475e4.png)
### 2. spellチェック自体外してしまう
設定 -> Inspections -> Typoの部分のチェッ
Type Safety に Navigation Compose を使う場合、SavedStateHandle 経由で NavArg を受け取るときは typeMap を渡そう
# 結論
**Type Safety に Navigation Compose を使う場合、SavedStateHandle 経由で NavArg を受け取るときは `typeMap` を渡しましょう!**
Type Safe な Navigation Compose に関するドキュメントはこちら 👇
[Type safety in Kotlin DSL and Navigation Compose](https://developer.android.com/guide/navigation/design/type-safety)# ハマっていたこと
NavGraph を定義するとき、`typeMap` を渡しているのにアプリがランタイムで落ちる事象が発生しました。
具体的には次のエラーメッセージを確認しました。
“`text
java.lang.IllegalArgumentException: Cannot cast page of type XXX to a NavType. Make sure to provide custom NavType for thi
テキストを装飾する -SpannableString-
# SpannableStringとは?
### 概要
・文字列にさまざまな装飾やスタイル設定を行えるようにするためのもの
・一つの文字列に対して複数のスタイルを適用させることができる## 注意点
・例として掲載しているコードはViewBindingを使用しています
(変数`b`として定義しています)## 主な種類
|クラス名|概要|
|:-:|:-:|
|ForgroundColorSpan|テキストの色を変更する|
|BackgroundColorSpan |テキストの背景色を変更する |
|StyleSpan|テキストを太文字やイタリックにする |
|TypefaceSpan |指定フォントを適用する |
|RelativeSizeSpan |テキストのサイズを相対的に変更する |
|AbsoluteSizeSpan |テキストのサイズを絶対値で変更する |
|URLSpan |テキストをリンクにする |
|UnderlineSpan |テキストに下線を引く |
|StrikethroughSpan |テキス
話題のkotlin Multiplatformを使ってみた(~実装まで)
# はじめに
基本、公式のチュートリアルをなぞってます。
https://www.jetbrains.com/help/kotlin-multiplatform-dev/get-started.html公式チュートリアルは全文英語の記事となっているので、英語苦手だよーって方とかは参考にしていただけると幸いです。
いままでアプリ開発とかをしてこなかった方でも理解できるよう、深くまでは掘らず比較的ざっくりとした感じの記事構成となっていますので、あらかじめご了承ください。
# 前提
– kotlin multiplatformの環境構築が完了していること
https://qiita.com/atsu123456789/items/147e9e03d2018b20841b# ロジックの実装
## 共通処理について
まずは`GreetingKMP/composeApp/src/commonMain/kotlin/com/jetbrains/greeting/Greeting.kt`の中身を書き換えてみます。“`Greeting.kt
package com.jetbrains.
android studioのstringResourceで頭に空白を入れる方法
# 初めに
今回はandroid実装でStringResourceを使う際、頭に空白を有効にする方法を紹介します
### 本文
定義したい文言の頭に下記を追加することで半角の空白を追加することができます
\u0020
### さいごに
今回は自分が実装していて少し手間取ったので備忘録として残しておきます
【AndroidStudio】日本語化手順まとめ
# はじめに
みなさん慣れていればAndroidStudioインストールしてそのまま使用することが多いかと思います。
ですが、初学者の方や英語が弱い方などは、英語というだけで萎縮してしまうもの。
そこで今回は入門編として、AndroidStudioを日本語化する手順をまとめてみようと思います。# 日本語化手順
実はJetBrainsのマーケットに日本語化プラグインが公開されています。
今回はそのプラグインを使用して日本語化してみます。まずはご利用のAndroidStudioのバージョンを確認しましょう。
“`
Android Studio Koala | 2024.1.1
Build #AI-241.15989.150.2411.11948838, built on June 11, 2024
“`確認できたら次に、以下リンクより該当のプラグインページを参照します。
https://plugins.jetbrains.com/plugin/13964-japanese-language-pack——/versions
上記リンクより適切なプラグインを導入し
【Unity】StreamingAssetsに配置したファイルをAndroidで実行時に読み込む
# はじめに
想定読者様はこちらです。
– StreamingAssets(ストリーミングアセッツ)に配置したファイルをAndroidビルド時に使用したいお方
– 具体的にどのような仕組みでAndroid実行時に読み込んでいるのか知りたいお方調べてみたところ方法は書いてあっても順序を追って仕組みを説明してくださる方は見かけなかったので確認の意味合いも込めて仕組みについても言及させていただきます。
:::note warn
**折りたたみ**
折りたたみになっている個所は自身の解釈を織り交ぜて解説をしております。
間違い等のご指摘は大変に歓迎しておりますのでお時間のある方はぜひお願いいたします。
:::# 実装
解説するに際してこのようなものを作成してみました。
“`C#:StreamingAssetsPathFormatter.cs
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
using Cysharp.Threa