- 1. [Android] Github Actionsでビルド
- 2. Arduinoとスマホでお家をモニタPart2【スマホで情報を受信!】
- 3. adbをAndroid端末にインストールする方法
- 4. FDLやカスタムURLスキーム実装時に気をつけたいこと
- 5. モバイル端末の発熱情報をUnreal Engine上で取得する
- 6. PythonでAndroidアプリを作る。
- 7. Jetpack Compose、Modifier.shadowの罠
- 8. ローカル環境で外部ライブラリを使用する方法
- 9. モバイルアプリのアクセシビリティ対応(スクリーンリーダー、VoiceOver)
- 10. a-4-2-3.Retrofit2を使ったDELETEのAPIアクセス
- 11. Composeでカスタムのなんちゃってクロスフェードを作る
- 12. a-4-2-2.Retrofit2を使ったPOSTのAPIアクセス
- 13. a-4-2-1.Retrofit2を使ったGETのAPIアクセス
- 14. 2023 Android の IME (キーボード) の作成
- 15. コンパイルエラーが出てないからって油断はしちゃだめだよ
- 16. 新卒入社半年でRakumonの開発でしてきたこと
- 17. FlutterでのFirebase関連のビルドエラー(android)とその解決方法
- 18. DroidKaigi 2023 Day2 セッション概要&感想
- 19. DroidKaigi 2023 Day1 セッション概要&感想
- 20. Flutterってどうなん?実際に商用アプリ開発で使ってみた感想
[Android] Github Actionsでビルド
AndroidのPRに対して、Bitriseでビルドしていたのですが順列処理なので、ビルドに時間がかかってました。
なので、Github Actionsに切り替えようと思ったのですが、情報があまりなかったので、自分でまとめてみようと思います。### 準備
Androidのプロジェクトに下記を追加する。
ファイル名は、任意で大丈夫です。“`
.github/workflows/pr.yml
“`### Github Actions
“`yaml:pr.yml
name: Pull Requeston:
pull_request:
types: [ opened, synchronize, reopened ]permissions:
contents: write
actions: readjobs:
build:
runs-on: ubuntu-latest
steps:
– name: Checkout
uses: actions/checkout@v4
with:
Arduinoとスマホでお家をモニタPart2【スマホで情報を受信!】
# 初めに
[前回](https://qiita.com/Antareskkudo/items/f80b74151e56759d6c67)はシステム概要の紹介と、ArduinoとBluetoothの配線・プログラム作成まで行いました。今回は全体構成図の「**Bluetoothの情報をスマホで受け取る**」部分をやっていきます。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1100334/5ade8514-4ec5-b83a-b0dc-23ce437c101e.png)ここからが難しいですが楽しいところです!作者もわかっていない部分がありますので、できるだけ解説しながらやっていきますが、わからない・その説明間違っているって場合にはコメントください!
# 概要
本記事で紹介するシステムは以下の通りです。前回のBluetooth送信機(RN-42)で送信したデータは**Bluetooth SPP(Serial Port Profile)プロトコル**を使用しています。このプロトコルはシリアル
adbをAndroid端末にインストールする方法
## 環境
“`
OS: macOS 11.5.1
“`## 前提条件
– USBを用意しておく## 手順
1. PCとデバイスをUSBで接続
– デバイス側から接続を許可する
2. ターミナルで`adb devices`
– 該当のデバイスが**device**になっていることを確認
– **unauthorized**になっている場合は、USB接続が許可されていません
![スクリーンショット 2023-09-28 18.00.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2534018/27de4b4c-6e27-e1d1-90e0-443aef340e1b.png)3. `adb -s デバイス名 install xxx.apk` でインストール
![スクリーンショット 2023-09-28 18.10.15.png](https://qiita-image-store.s3.ap-northeast-1.
FDLやカスタムURLスキーム実装時に気をつけたいこと
# はじめに
今回はAndroidでFDLやカスタムURLスキーム実装をする際に気をつけたいことを紹介していきます
### 本文
今回、自分が少しハマってしまったのが取得タイミングです
自分は今まで`onCreate`でデータを取得するようにしていましたが、そうするとアプリがバックグラウンドにある時にうまく取得できませんでした。
そこで下記のように実装することでバックグラウンド等関係なく取得することに成功しました。
また、`intent`を渡すようにしないと`onNewIntent`でのカスタムURLスキーム取得がうまくいかないので注意が必要です
“`kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
checkLink(intent)
}override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent
モバイル端末の発熱情報をUnreal Engine上で取得する
iOSとAndroid端末の発熱状況をUE上から参照する方法を調査してみました。
まず、iOS/Androidそれぞれのネイティブプラットフォームの発熱情報について軽く説明します。
# iOSの熱ステータス
参考元:
https://developer.apple.com/documentation/foundation/processinfo/thermalstate* nominal : 通常範囲
* fair : やや上昇している
* システムの対策:ファン開始、すぐに必要されないバックグラウンドタスクの停止、等
* 推薦されたアプリの対策:バックグラウンドタスクの削減(例:バックグラウンドダウンロードの停止、DBインデックス更新の停止、等)
* serious : 高い
* システムの対策:ファンがフルスピードで稼働、パフォーマンスに影響するリソース削減(例:I/O,CPU,GPUの使用の削減、60FPS→30FPSにカット)
* 推薦されたアプリの対策:I/O,CPU,GPUのようなシステムリソースの使用の削減(例:グラフィック品質設定を低に
PythonでAndroidアプリを作る。
# はじめに
PythonアプリをAndroidで動かす場合2つの手段がある。
1. **Pydroid3でPythonスクリプトを起動する。**
Pydroid3はGooglePlayからインストールできるアプリ。PythonスクリプトをAndroid上で動かすIDE。pipも使えるので、PC上のPythone IDEを使うのとほぼ変わらない。KivyでGUIを書けば、アンドロイドアプリを起動しているのと変わらない。ただPydroid3を起動して、該当のPythoneアプリを実行するという2段階の処理をしないといけないので、アプリアイコンクリックで一発起動させるということはできない。2. **Kivy+Buildozerでアンドロイドアプリを作る。**
Buildozerは、KivyでGUIを書いたPythonアプリを、apkファイルにパッケージ化するツール。このapkファイルをAndroidにインストールすれば、アンドロイドアプリとして動作する。本記事は2について、Windows環境でBuildozerのインストールから、パッケージ化までの一連の流れをまとめる。
# 目
Jetpack Compose、Modifier.shadowの罠
ある日、ほぼほぼ三角形の形状をしたdrawableに影をつけたくなりました。[^fact]
そういうときは`Modifier.shadow`を使えばいいですね。
[^fact]: デザイナーからの指定例えばこんな風に。
“`kotlin:composable.kt
modifier = Modifier
.shadow(
elevation = 2.dp,
shape = GenericShape { size, _ ->
moveTo(x = 0f, y = 0f)
lineTo(size.width, 0f)
lineTo(size.width / 2f, size.height)
},
spotColor = Color(0xFF000000),
ambientColor = Color(0xFF000000)
)
“`ところがどっこい、影はつくけどdrawableの外側がやたらギザつきました。
はて
ローカル環境で外部ライブラリを使用する方法
### ローカルにライブラリをダウンロードしてきて使いたい
というときのやり方をまとめておきます
## 実行環境
Android Studio Framingo
### 1.ライブラリをダウンロードしてくる
例えば、Gsonであれば、
https://mvnrepository.com/artifact/com.google.code.gson/gson
にアクセスすることで、データのダウンロードが行えます。
ここで、使用したいバージョンの.jarファイルをダウンロードしてきます。
### 2.jarファイルを使用したいAndroidStudioProjectのフォルダに入れる
project名→app→libsフォルダ内に.jarファイルを入れます
(libsフォルダがなかったら作成してください)
### 3.gradleで依存関係を記述する
gradle(app)のdependencies内で
“`kotlin
implementation files(‘libs/gson-${ver名}.jar’)
“`
のように、libs/使用したいライブラリファイル名の形
モバイルアプリのアクセシビリティ対応(スクリーンリーダー、VoiceOver)
# はじめに
以前に[プロジェクトで行ったVoiceOver対応(読み方の変更)](https://qiita.com/repepe2en/items/42c8dc1e679a31c96c24)を投稿しましたが、今回はアプリ全体で行った対応について、目標にしているところとその対応方法をまとめて備忘録としてまとめます。自分の参加しているプロジェクトでは[Apache Cordova](https://cordova.apache.org/)というモバイルアプリ開発向けのフレームワークをベースに開発を行っています。
技術的には3割ほどネイティブの実装で他はwebの技術を利用しています。
なので、iOS,Androidとタグにありますが、この記事ではHTML,TypeScriptでの対応方法です。# 方針
[Web Content Accessibility Guidelines (WCAG) 2.0](https://waic.jp/translations/WCAG20/Overview.html)に準拠したアプリの実現。
[WAI-ARIA](https://develope
a-4-2-3.Retrofit2を使ったDELETEのAPIアクセス
### a-4-2-3.Retrofit2を使ったDELETEのAPIアクセス
#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)#### 課題
3. Retrofit2でDELETEメソッドのAPIの呼び出しができるか。
3. Retrofit2のDELETEメソッドで呼び出しのBodyを取得できるか。#### Github
https://github.com/wakizaka24/AndroidTest
#### テスト実装
“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestService = Retrofit2TestSer
Composeでカスタムのなんちゃってクロスフェードを作る
## 経緯
現在アプリでいろんなViewをComposeに置き換え中です。
その中で、アニメーションで子要素の表示が切り替わる`CrossFadeView`という内製のカスタムViewGroupがありました。そしてComposeにはもともと[Crossfade](https://developer.android.com/jetpack/compose/animation?hl=ja#crossfade)が備わっています。
ただ、内製の`CrossFadeView`は実際はクロスフェードせず、前のViewが完全にフェードアウトしてから次のViewがフェードインするという、**”嘘CrossFade”** だったのです……なんとまあ……。[^fact]
[^fact]: 実はこのCustomViewGroupは自分が作っている。
[^fade]: [fade through](https://m2.material.io/design/motion/the-motion-system.html#fade-through) というらしい|クロスフェード|嘘クロスフェード[^fa
a-4-2-2.Retrofit2を使ったPOSTのAPIアクセス
### a-4-2-2.Retrofit2を使ったPOSTのAPIアクセス
#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)#### 課題
3. Retrofit2でPOSTメソッドのAPIの呼び出しができるか。
3. Retrofit2のPOSTメソッドで呼び出しのBodyを取得できるか。#### Github
https://github.com/wakizaka24/AndroidTest
#### テスト実装
“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestService = Retrofit2TestService()
a-4-2-1.Retrofit2を使ったGETのAPIアクセス
### a-4-2-1.Retrofit2を使ったGETのAPIアクセス
#### 目標設定
[一覧に戻る](https://qiita.com/ryouta33/items/57f5e51a26086151a0da)#### 課題
3. Retrofit2でGETメソッドのAPIの呼び出しができるか。
3. Retrofit2のGETメソッドでURLクエリを取得できるか。
3. Retrofit2のGETメソッドで戻り値を取得できるか。#### Github
https://github.com/wakizaka24/AndroidTest
#### テスト実装
“`kotlin:Retrofit2TestActivity.kt
class Retrofit2TestActivity : AppCompatActivity() {
private lateinit var binding: ActivityRetrofit2TestBinding
private var retrofit2TestService: Retrofit2TestServi
2023 Android の IME (キーボード) の作成
# 作成したもの
### [Play store](https://play.google.com/store/apps/details?id=com.kazumaproject.markdownhelperkeyboard)
https://play.google.com/store/apps/details?id=com.kazumaproject.markdownhelperkeyboard### [Github](https://github.com/KazumaProject/JapaneseKeyboard/tree/master)
https://github.com/KazumaProject/JapaneseKeyboard/tree/master
# 参考にした記事
– [InputMethodService Android Developers](https://developer.android.com/referen
コンパイルエラーが出てないからって油断はしちゃだめだよ
## 経緯
こんなコードがありました。
“`kotlin
val hoge: Hoge?
if (savedInstanceState != null) {
hoge = savedInstanceState.getParcelable(“hoge”)
} else {
hoge = arguments?.getParcelable(“hoge”)
}if (hoge == null) {
throw IllegalArgumentException()
}
“`私は、良かれと思ってこういうコードに書き換えてコミットしました。
“`kotlin
val hoge: Hoge = if (savedInstanceState != null) {
savedInstanceState.getParcelable(“hoge”)
} else {
arguments?.getParcelable(“hoge”)
} ?: throw IllegalArgumentException()
“`冗長な処理を短く書いただけ とい
新卒入社半年でRakumonの開発でしてきたこと
# Rakumonについて
* **いつでもどこでもRakumonを使える**
Rakumonは**24時間365日**、**家** でも **外出先** でも **通学中** でも利用することができます。* **厳選されたRakumon講師陣**
Rakumonで採用している講師陣は、**国公立などの難関大学**に在籍している学生を採用しています。
* **豊富な質問対応教科**
質問できる教科は以下の表通りになっています。| 教科
FlutterでのFirebase関連のビルドエラー(android)とその解決方法
FlutterAndroidでプロジェクトをビルドする際に、Firebase関連でいくつかのエラーが発生しました。この記事では、それらのエラーとその解決方法について詳しく説明します。特に、`android/build.gradle`と`android/app/build.gradle`の変更点に焦点を当てています。
## 1. Firebase関連のビルドエラー
### エラー内容
ビルド時に以下のエラーが発生しました。
“`
Error while evaluating property ‘extraGeneratedResDir’ of task ‘:app:mapDebugSourceSetPaths’
“`### 解決方法
このエラーは、FirebaseのGradleプラグインのバージョンが古いために発生することがあります。解決するためには、`android/build.gradle`の`dependencies`セクションを以下のように更新する必要があります。
“`gradle
dependencies {
classpath ‘com.an
DroidKaigi 2023 Day2 セッション概要&感想
# はじめに
DroidKaigi 2023に参加してきましたので、オフラインで聴講してきたセッションの概要とその感想についてまとめていきます。
Day1の紹介もしてますのでよろしければご覧くださいhttps://qiita.com/t_nana/items/1c6ab960a5b3db3b1dbd
# MVIに基づくStateMachineアーキテクチャ:KMMとJetpack ComposeとSwiftUIを組み合わせる
## 概要
クロスプラットフォームテクノロジーであるKotlin Multiplatform(以後KMP)と相性がいいアーキテクチャであるMVIを導入し、KMP, Jetpack Compose(Android用のUIライブラリ), SwiftUI(iOS用のUIライブラリ)の
DroidKaigi 2023 Day1 セッション概要&感想
# はじめに
DroidKaigi 2023に参加してきましたので、オフラインで聴講してきたセッションの概要とその感想についてまとめていきます。
Day2のセッション紹介はこちらですhttps://qiita.com/t_nana/items/8789fd8dbcc5b18ab560
# これで安心! Compose 時代のDon’t keep activities対応
## 概要
開発者向けオプションにある「アクティビティを保持しない(Don’t keep activities)」をONにすることで、メモリの少ない端末の動作を再現できるので、その状態で起こるバグ、Activity破棄時にも画面情報を引き継ぐための方法について解説したセッションでした。
セッション内では、ComposeにおいてはrememberSavableを使うことで、引き継ぎたい情報のkey設定やsave/restoreの処理を記述することなく引き継ぎ処理ができるのでおすすめとのことでした。ただし、ここで使っているのはBundleのため、このBundleの容量上限である50MBを超えないようにする必要があると
Flutterってどうなん?実際に商用アプリ開発で使ってみた感想
これまで3年ほどWebエンジニアとして働いており、いろいろあって今年からFlutterでモバイルアプリを開発しています。
Flutterを使い始めて半年が経ったので実際に使ってみて感じたいいと思ったところとイマイチだと思ったところを紹介したいと思います。
# Flutter とは?
Flutter は 複数のプラットフォームに対応したオープンソースなフレームワークです。現在では、Android・iOS・Web・Windows・MacOS・Linuxに対応しており、単一のコードで複数のプラットフォーム上で動作可能なアプリケーションを作成することができます。
https://flutter.dev/
# 実際に使って感じたいいところ、イマイチなところ
## いいところ
### 学習コストは意外と高くない
Flutterでは、Dartという言語を使います。
https://dart.dev/
個人的な感想としては、Javascript, Typescript に似ているなーと思っています。
なので、Webをずっと触っていた私はすんなりと入ることができました。型定義がで