- 1. Playストアの「フォアグラウンド サービスの権限」に対応する
- 2. Compose Multiplatformを触ってみる
- 3. 【UE5.3】MetaQuest2向けにAndroidでPackage化したい
- 4. Jetpack Glanceではじめるウィジェット作り
- 5. Android開発者向けのCharles導入と主な使い方
- 6. [Flutter]Android Studioでエミュレーターを起動させようとすると”Unable to locate adb”が出る
- 7. Jetpack Compose の @Preview を使いこなす
- 8. RenderComのスピンダウン回避の為にAndroidを使用した話
- 9. richeditor-android 使ってみた
- 10. Gradleでカスタムタスクを定義する
- 11. Android15 16KB Page size対応
- 12. Android 15 に備えてテキスト入力がある画面を edge-to-edge 対応する
- 13. Android Studio, Xcode でのアプリローカライズ方法
- 14. gradle の依存関係で aar を明示的に指定する
- 15. [Android] Roomライブラリの入れ方
- 16. StateListDrawalbe の state_pressed で表示を切り替える xml を Jetpack Compose に書き換える
- 17. Android: ビルド時にktlintFormatが実行されるようにする
- 18. FlutterでAndroidのビルドが失敗する
- 19. DateTime変換時に気をつけたいこと
- 20. AndroidのWi-Fiテザリング環境でネットワーク内のデバイスを全て表示したい
Playストアの「フォアグラウンド サービスの権限」に対応する
# いきなりFGSとか言われる
すっかり毎年恒例となった Play ストアの Android 最新版への対応(※これをやらないとそのアプリの更新ができなくなる)ですが、2024年も Android 14 への対応期限が 8/31 に迫ってきたので targetSdk を 33 から 34 にしてビルド&実行してみたところ、下記のエラーが起きて全然動きませんでした。
“`
android.app.MissingForegroundServiceTypeException: Starting FGS without a type callerApp=ProcessRecord{435fc46 16794:jp.takke.cpustats.debug/u0a296} target
at android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:53)
at android.app.MissingForegrou
Compose Multiplatformを触ってみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796622/ad1209ef-0318-1d8e-b1d5-d3e763db2f36.png)
## 挨拶
初めまして。
bravesoft株式会社でエンジニアリングマネージャーらしき事をしているおじさんです。以前弊社技術blogにて[KMMについての記事](https://www.bravesoft.co.jp/blog/archives/13377)を書いていたので、今回はUIも共通化出来るようになった「Compose Multiplatform」について触ってみて所感を書いていこうと思います。
## 始め方
まずは[公式](https://www.jetbrains.com/ja-jp/lp/compose-multiplatform/)の[チュートリアル](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-gett
【UE5.3】MetaQuest2向けにAndroidでPackage化したい
# はじめに
この記事はUE5.3で作ったVRアプリをパッケージ化してみる記事です。利便性の為一部公式のドキュメントから逸脱した手段を踏んでいます。また、4や5.1、5.2とは手順に互換性がありません。この手順でセットアップを行うと、5.2などでビルドできていた環境を損なう可能性があります。
参考
[公式ドキュメント:Android SDK および NDK を設定する](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/how-to-set-up-android-sdk-and-ndk-for-your-unreal-engine-development-environment?application_version=5.3)
[DeveloperForum質問:Error when install the build file of UE5.1 VR](https://forums.unrealengine.com/t/error-when-install-the-build-file-of-ue5-1-vr
Jetpack Glanceではじめるウィジェット作り
# はじめに
こんにちは。
株式会社アイスタイルで`@cosme`アプリのAndroidエンジニアをしている鈴木です。
最近は、iOSアプリの案件をこなしていたり段々いろんなことを担当し始め、日々学んでいる毎日です。今回は個人的な興味もあってJetpack Glanceを初めて触ってみたので、Glanceでのウィジェットの実装方法や気づいたことを書き残しておこうと思います。
## Jetpack Glanceとは
Jetpack Glance[^1]とは、アプリウィジェットをJetpack Compose[^2]で作成することができるフレームワークです。
## 導入方法
導入方法は至ってシンプルです。
build.gladleもしくはbuild.glagle.ktsに次のdependencyを追加するだけです。Groovy DSLの場合
“`groovy
dependencies {
implementation “androidx.glance:glance-appwidget:1.1.0”
}
“`Kotlin DSLの場合
“`kotlin
dep
Android開発者向けのCharles導入と主な使い方
## はじめに
こんにちは。
株式会社アイスタイルで[@cosmeアプリ](https://play.google.com/store/apps/details?id=jp.co.istyle.atcosme&hl=ja)のAndroidエンジニアをしている山本と申します。今回は、Android開発する上で、便利な通信キャプチャソフトウェアのCharlesの導入とAndroid開発する上で便利な使い方について共有いたします。
(この情報は、2024/07時点での情報となります。)## Charlesとは
[Charles](https://www.charlesproxy.com/)は、HTTP通信をキャプチャし、リクエストやレスポンスを確認できるソフトウェアです。![Charles.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3834173/47968c40-cb21-8127-eda9-f8ef95ad5c75.png)
## Charlesの導入方法
### ダウンロード
以下の
[Flutter]Android Studioでエミュレーターを起動させようとすると”Unable to locate adb”が出る
## 初めに
Flutterで開発したいアプリを思いついたが数年ぶりに触るので公式ドキュメントからVisual studioで作成しようとしたところつまづいたので備忘として。## 現象
公式ドキュメントに従ってVisual studioでエミュレータを起動しようとすると、画面が真っ暗なエミュレータが表示され、main.dartを実行するとエラーが発生してしまう、、## 調査
エラーログをググるといくつかヒットするが試してみてもうまくいかないため、そもそもAndroid studioで起動するか確認してみた。
→Android studioからでも起動せず、「Unable to locate adb」が表示された。## 解消方法
↓の記事で解決できた!
https://teratail.com/questions/276597調査だけで半日ほど費やしてしまった、、基礎知識がないとエラーログをググるだけになってしまうのでそれぞれの用語も勉強しておく
Jetpack Compose の @Preview を使いこなす
# 前提条件
– Jetpack Compose を使ったことがある
– Androidアプリを作ったことがある
– Hiltが分かると良い わからなければ雰囲気で読み取って—
# 単体で使ってみる—
## HolloWorld
—
NewProjectした時に出てくるやつ
“`kotlin
// 表示したい内容を記述して、
@Preview // ←これをつけるだけ
@Composable
fun GreetingPreview() {
MyApplicationTheme {
Surface(modifier = Modifier.fillMaxSize()) {
Greeting(“Android”)
}
}
}@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Card {
Text(
text = “Hello $name!”,
RenderComのスピンダウン回避の為にAndroidを使用した話
# [Render.com](https://render.com/)とは?
[Render.com](https://render.com/)は雑に言うと[Heroku](https://jp.heroku.com/)みたいな物です。Herokuは無料枠が消えましたがRender.comはまだできます。
(ここからは詳細な話。趣旨とは離れるので興味のない方はスキップしてください。)
Renderは5つのサービスを提供しています。
– ありふれたウェブサービス
– 静的サイト
– プライベートサービス
– バックグラウンドワーカー
– Cronジョブまた、下記の物も使用できます。
– PostgreSQL
– Redis## 無料枠について
一部のサービスのインスタンスは無料で作れます
– webサービス
– PostgreSQL
– Redisが、制限として下記の物があります。
– 15分アクセスが無いと停止します(スピンダウン)。停止時にアクセスされると1分ぐらいかけて再起動されます
– つまり15分に1回はアクセスすればよい
– 毎月750時間までしか
richeditor-android 使ってみた
# はじめに
https://github.com/wasabeef/richeditor-android?tab=readme-ov-file↑こちらのライブラリを使ってみたところ、提供元に書かれていない内容で使えそうなものがあったので記事にしておこうかと思います。
# 準備提供元の指示の通り build.grableに以下を追加します。
“`
dependencies {
implementation ‘jp.wasabeef:richeditor-android:2.0.0’
}
“`# 実装
“`
“`
layoutにRichEditorを実装し、Fragment側で使えるようにします。このままの状態でも普通のEditTextのように扱え
Gradleでカスタムタスクを定義する
## はじめに
Androidアプリ開発をしてる時に、主にビルドやライブラリの管理の時にbuild.gradleを触るかと思います。私自身はこれまで雰囲気で使っていたのですが、それは良くないなと思っています…
そもそもGradleってなんなんだということすらしっかり理解できてなかったので、
今回はGradleをインストール・カスタムタスクの作成・実行というところをやってみたので、まとめていきたいと思います。## Gradleとは
JavaやKotlin等を使ったプロジェクトのビルド自動化ツールになります。
コードのコンパイルやテスト、プロジェクトで使われている依存関係の管理を担って、ビルド作業を自動で行ってくれます。対応する言語としては、以下の言語をサポートしているようです。([Gradle ユーザーマニュアル](https://docs.gradle.org/current/userguide/userguide.html))
– Android Java
– Kotlin Multiplatform
– Groovy
– Scala
– Javascript
– C/C
Android15 16KB Page size対応
# 概要
ページサイズは、OSがメモリを管理する方法を決定する単位です。小さいページサイズは、メモリ管理のオーバーヘッドを削減できますが、より多くのメモリフラグメントが発生する可能性があります。一方、大きいページサイズは、フラグメント化を削減できますが、メモリ管理のオーバーヘッドが増加します。
Androidは従来、4KBのページサイズを使用していましたが、Android 15では、デバイスが16KBページサイズをサポートする場合、オプションで16KBページサイズを使用できるようになりました。
なお、iOSはずいぶん前から16KBサイズに対応しています。# 対応
Java/Kotlinだけでプロジェクトが構成されている場合、特にやることはないです。NDK、C/C++を用いたコードを含む場合(.soファイルがapkに含まれる)対応が必要になります。
対応の概要は、公式に詳細が記載されていますが、用いるビルド設定において、16KBを有効化するフラグを付けて再ビルドを行います。
一例ですが、NDK buildを用いて構成されている場合、以下のフラグ地を設定するだ
Android 15 に備えてテキスト入力がある画面を edge-to-edge 対応する
Android 15からedge-to-edgeが強制されるようになります。
https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja
現在、Android Studioで新規プロジェクトを作成するとedge to edge対応のサンプルが作られるように、ひとまず従来と同等の表示をさせるの難しくありません。
しかし、以下のように、テキスト入力がある画面で、画面下部に送信などのボタンがある画面において、ソフトウェアキーボードが表示されたときは、それに合わせてボタン部分もせり上がらないと一度キーボードを非表示にしないとボタンが押せないという状態になってしまいます。|||
|–|–|
|![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/714eb0b2-2783-c3ce-7ba8-54d033727c55.png)|![](https://qiita-image-store.s3.ap-northe
Android Studio, Xcode でのアプリローカライズ方法
Android Studio には jetpack compose, Xcode は SwiftUI を使ったプロジェクトがある状態です。
## 作業環境
2024/7/13 現在
### Android Studio
Android Studio Koala
使用しているプロジェクト: Jetpack Compose で作成したアプリhttps://developer.android.com/studio
### Xcode
Xcode 15
使用しているプロジェクト: SwiftUI で作成したアプリhttps://apps.apple.com/us/app/xcode/id497799835
## Android Studio
1. プロジェクトファイルの中から string ディレクトリを探します
2. 選択した状態で右クリックをします
3. メニューから open translations editor をクリックします
gradle の依存関係で aar を明示的に指定する
あるライブラリの依存関係を書いたところ、アップロードされているライブラリは`aar`であるにもかかわらず、`aar`ではなく、`jar`ファイルを探しに行ってしまいエラーとなってしまう状況に遭遇しました。
これの原因はライブラリの公開情報に不足があるなどが考えられますが、利用者側で修正することはできないので、gradleの記述でどうにかしなければなりません。## `@aar` をつける
以下のように依存ライブラリを文字列で指定している場合は、バージョン名の後ろに `@aar` をつけて、`aar` を参照するように指定することができます。
“`build.gradle.kts
implementation(“com.example:foo:1.2.3@aar”)
“`## `ext` を指定する
依存ライブラリをセクションごとの情報に分解して指定している場合は、`ext`パラメータとして`aar`を指定します。
“`build.gradle.kts
implementation(group = “com.example”, name = “foo”, versio
[Android] Roomライブラリの入れ方
ローカルデータベースであるRoomを入れようとしたんですが、ハマったので知見を残しておきます。
build.gradle.kts(Module :app)に入る
“`
plugins {
id(“com.android.application”)
id(“org.jetbrains.kotlin.android”)
id(“kotlin-kapt”)
}
“`
“`
dependencies {
implementation(“androidx.core:core-ktx:1.13.1”)
implementation(“androidx.lifecycle:lifecycle-runtime-ktx:2.8.3”)
implementation(“androidx.activity:activity-compose:1.9.0”)
implementation(platform(“androidx.compose:compose-bom:2023.08.00”))
im
StateListDrawalbe の state_pressed で表示を切り替える xml を Jetpack Compose に書き換える
## 概要
Android View の時に以下のような [StateListDrawalbe](https://developer.android.com/guide/topics/resources/drawable-resource#StateList) xml の state_pressed で表示を切り替えて表示することがよくあった。
これを Jetpack Compose に書き換える方法のメモ。
“`xml
Android: ビルド時にktlintFormatが実行されるようにする
n番煎じではありますが2024年時点のAndroidプロジェクト向けの記録を残しておきます。
:white_check_mark: Kotlin
:white_check_mark: Jetpack Compose
:white_check_mark: Gradle バージョン カタログ (libs.versions.toml)
:white_check_mark: Kotlin DSL (buid.gradle.kts)### Dependenciesの追加と設定
ktlint gradle pluginを導入します。
ついでにcompose向けのlint checkも入れておきます。
ライブラリやプラグインのバージョンは公式サイトで最新を調べて設定します。“`libs.versions.toml
[libraries]
compose-lint-checks = { module = “com.slack.lint.compose:compose-lint-checks”, version = “1.3.1” }[plugins]
gradle-ktlint = {
FlutterでAndroidのビルドが失敗する
少し手間取ったので忘備録として記載します。
## 現象
AndroidStdioをアップデート
いつものようにAndroidエミュレータを選択してビルドするとエラーが起きた
“`
FAILURE: Build failed with an exception.* What went wrong:
Execution failed for task ‘:app:compileFlutterBuildDebug’.
> A problem occurred starting process ‘command ‘/Users/{userName}/fvm/versions/3.16.0/bin/flutter”* Try:
> Run with –stacktrace option to get the stack trace.
> Run with –info or –debug option to get more log output.
> Run with –scan to get full insights.* Get more help at https
DateTime変換時に気をつけたいこと
# はじめに
今回は、最近日付変換実装時に詰まった事象を紹介していこうと思います。
### 本文
今回自分が詰まった内容としては`String`で帰ってきているAPIの返却物を`DateTime`に変換するときに、`z`が入っている場合にエラーになってしまうというものでした。
`DateTime`の`z`は協定世界時を表しています。
ただ`z`をFormatterに渡すだけではエラーになってしまうわけです。
そこで解決策は以下のようになります
“`kotlin
// 協定世界時の中でもどこなのかを第二引数として指定してあげないといけません
DateTimeFormatter.ofPattern(“EEE, dd MMM yyyy HH:mm:ss z”, Locale.ROOT)
“`
### 最後に
z自体は漏れてないはずなのになんでだ??となって多少時間を取られたので備忘録として残しておきます
どなたかのお役に立てれば幸いです
AndroidのWi-Fiテザリング環境でネットワーク内のデバイスを全て表示したい
AndroidのWi-Fiテザリング環境では, 特定のデバイスに割り当てられるプライベートipアドレスを固定することは(おそらく)できない. そのため,Wi-Fi経由でRaspberry Pi等のデバイスにSSH接続したいときはipアドレスを突き止める必要がある.
# 準備
Windows Subsystem for Linuxを使用できるようにして,「fping」をインストールしておく.
~~~
sudo apt install fping -y
~~~
# スクリプト
~~~showNetworkDevices.bat
@echo off
ipconfig | findstr 192.168
SET adress=
SET /P adress=”入力してください:”
wsl fping -s -g 192.168.%adress%.0 192.168.%adress%.255> nul 2>&1
arp -a | findstr 192.168
pause
~~~
任意のフォルダに.batの拡張子をつけて保存して実行する.
# 仕組み/動作1. ipconfigコマンドを実行し