- 1. THETA Xのファイルアクセス(SDカード/内蔵メモリ参照、撮影ファイル削除、マニフェスト)
- 2. libs.versions.tomlのgroupとname
- 3. [Android] Vulkanで描画しているアプリをスリープから復帰させる手順
- 4. [Android] [Kotlin] TabLayoutと(Horizontal)RecyclerViewを仲良く共存させる方法
- 5. Androidのgradleでのbuild variantsあれこれ
- 6. Androidde+ViewModel+coroutine+roomの使い方2点
- 7. 【Godot 4.0】Androidアプリ(apkファイル)エクスポート手順
- 8. Google Play Consoleで収益化用のBase64エンコードのRSA公開鍵を取得する方法
- 9. AndroidStudio Electric Eelで”No matching variant of com.android.tools.build:gradle:7.4.0 was found.”が出た
- 10. Flutter Androidビルド作成が失敗するKeystore file ‘android/app/key.jks’ not found for signing config ‘release’.
- 11. tasks.register()に渡す第二引数と第三引数に関するメモ
- 12. GradleプラグインとGradleタスクの違いのメモ
- 13. 【Android】フォントを変更する
- 14. kotlin coroutine
- 15. Cloud Storage for Firebaseのエミュレーターに接続して画像をアップロードしたら失敗した話
- 16. Android Studioを複数起動した際に「Timeout waiting to lock journal cache」というエラーが出た時に…
- 17. MediaPad T2 Pro 10.0 へLineage OS 18.1を導入する
- 18. [Android]java.lang.IllegalArgumentException: Unable to create converter for class com.jp…のエラーの解決方法
- 19. [Android][compose]api取得でとりあえずUseCaseまで実装できたから通信確認したい
- 20. Flutterとはなんぞや?
THETA Xのファイルアクセス(SDカード/内蔵メモリ参照、撮影ファイル削除、マニフェスト)
## はじめに
リコーの @KA-2 です。
弊社では[RICOH THETA](https://theta360.com/ja/)という全周囲360度撮れるカメラを出しています。
RICOH THETA V, RICOH THETA Z1, RICOH THETA Xは、OSにAndroidを採用しています。Androidアプリを作る感覚でTHETAをカスタマイズすることもでき、そのカスタマイズ機能を「プラグイン」と呼んでいます(詳細は本記事の末尾を参照)。今回は、RICOH THETA Xでプラグインを作成する際に注意が必要な、以下3つのポイントについて説明します。
– THETA XのSDカード/内蔵メモリ参照方法
– THETA XはプラグインからのWebAPI : [camera.delete](https://github.com/ricohapi/theta-api-specs/blob/main/theta-web-api-v2.1/commands/camera.delete.md)に対応してないため、そ
libs.versions.tomlのgroupとname
GradleのVersion Catalogを使うと、依存関係の追加方法が少し変わる。
“`kotlin
dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
}
“`これは、**nowinandroid**の`build-logic:convention`モジュールの**build.gradle.kts**の一部の内容。
この`libs.android.gradlePlugin`や、`libs.ksp.gradlePlugin`の内容はどこで定義されているのかというと、**libs.versions.toml**にて定義されている。
“`toml
[versions]
androidGradlePlugin = “7.4.1”
kotlin = “1.8.0”
ksp = “1.8.0-1.0.9”[libraries]
# Dependenc
[Android] Vulkanで描画しているアプリをスリープから復帰させる手順
# 概要
Vulkanで書いたアプリケーションをAndroidで動かした際に、ホームボタンを押してアプリをスリープさせた後再度スタートしようとすると、画面が描画されなかった。
原因を調べるとVulkanのコンポーネントの内、いくつかは再度作成し直す必要があった。# 環境
* Android 13
* NDK : 25.0# 原因
Androidではアプリをリスタートするたびにwindowが変わっているようで、andoid_app->ANativeWindowの指すアドレスが毎回変化している。
なので、windowに依存するコンポーネントは毎回再作成する必要がある。# 対策
windowに依存するコンポーネントは、アプリにもよるが基本的には以下が含まれると思っている。(赤色で表している部分)
![2023vulkan.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1446998/8e68af15-a815-00a4-b4af-94bb0d9a1c0e.png)
surfaceがw
[Android] [Kotlin] TabLayoutと(Horizontal)RecyclerViewを仲良く共存させる方法
![06b26b96-6dd5-4cbd-af52-9db9c5550397.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957499/e3383f52-5f4d-1124-2144-ddde9d688937.png)
### 実現したこと
TabLayoutでの画面切り替えとHorizontalなRecyclerViewでのリストスクロールの両方を実装したいけど、
スクロールしようとすると画面が切り替わったりして、うまくスクロールできない!仲良くして!!
ってなったので、それを解決するべく方法を見つけましたので、共有します。レイアウトも見たい方は、
https://qiita.com/shinmai333/items/8bdd5a72c0f86348bd02
こちらから見れます。
全く一緒のレイアウトで、Fragmentの中身にHorizontalなRecyclerViewを乗っけただけです。
ソースコードやレイアウトはまあまあ適当に作ってありますので、ご了承くださいませ。### ソー
Androidのgradleでのbuild variantsあれこれ
# 前提
このようなVariantsの状況であるとします。“`.gradle
android{
buildTypes{
debug{…}
release{…}
}
flavorDimensions “number”, “alphabet”
productFlavors{
one{
dimension “number”
}
two{
dimension “number”
}
alpfa{
dimension “alphabet”
}
beta{
dimension “alphabet”
}
}
}
“`これでsyncすると以下のようなパターンが出力されますね
“`
oneAlphaDebug
oneAlphaRelease
oneBetaDebug
oneBetaReleas
Androidde+ViewModel+coroutine+roomの使い方2点
# Android で coroutineを使って書いていて、直面した問題
1. 画面に検索条件があって、その検索条件で絞って room を検索し、その結果を RecyclerView に表示したい。RecyclerView に行を追加する EditText、buttonもあり、追加する場合は今、表示されている検索条件が room のテーブルのキーになっているので、そのキーで room に INSERT。RecyclerView も再表示したいので、ここは observe パターンでなければいけない。observe パターンで画面から検索条件が変わる場合って、どうすればいいんだろう?
1. 大量データを INSERT する処理がある。処理時間が長いので、その間は room のデータを変更して欲しくない。処理開始前にボタンをdisable にし、progressbar を表示。処理が完了するとボタンを enable、progressbar を非表示にしたい。coroutine の非同期処理の終了時に画面の View を更新するようにするには、どうしても ViewModel の中で co
【Godot 4.0】Androidアプリ(apkファイル)エクスポート手順
Godot 4.0 RC1でAndroidアプリapkファイルをエクスポートしました。環境はWindows11です。
https://downloads.tuxfamily.org/godotengine/4.0/
(rc1/Godot_v4.0-rc1_win64.exe.zip)# まとめ
Godotの最新ドキュメントの手順に従って設定しました。
https://docs.godotengine.org/en/latest/tutorials/export/exporting_for_android.html1.OpenJDK 11のインストール
2.Android Studioをインストールして、SDK Managerから必要なツールをインストール
3.デバッグ用KeyStoreファイルの作成
4.Godotのエディター設定でAndroid SDKとデバッグ用KeyStoreファイルの場所を設定
5.Godotのプロジェクト設定でAdvancedSettingsを有効にしてレンダリング>テクスチャにあるImport ETC2 ASTCをオンにする。
Google Play Consoleで収益化用のBase64エンコードのRSA公開鍵を取得する方法
# この記事を書くに至った理由
Google Play Consoleで収益化用のBase64エンコードのRSA公開鍵を取得する方法を調べたところ、情報が古く、UIが変更されていたため取得が困難であったから。
# 結論
2023年2月14日で有効な方法です。
Google Play Consoleにログイン
収益化用のBase64エンコードのRSA公開鍵を取得したいアプリに移動。
左側のバーにある「収益化のセットアップ」をクリック
「ライセンス」というところに求めているものがあります。
「アプリバイナリに追加する Base64 エンコードの RSA 公開鍵です。スペースはすべて削除してください。」と書かれているはずです。
AndroidStudio Electric Eelで”No matching variant of com.android.tools.build:gradle:7.4.0 was found.”が出た
## 何が起こったか
AndroidStudioを電気ウナギ(Android Studio Electric Eel | 2022.1.1)に更新。
新しいAndroidStudioでアプリを新規作成しようとしたところ、”No matching variant of com.android.tools.build:gradle:7.4.0 was found.”というエラーが出た。## 調べた結果
どうやら Gradle JDKを11にしないとダメらしい。
公式情報が見つからなかったのでStackOverFlowを。
https://stackoverflow.com/questions/75114728/no-matching-variant-of-com-android-tools-buildgradle7-4-0-was-found## 直し方
### Macの場合
AndroidStudio -> Preferences -> Build, Execution, Deployment -> Build Tools -> GradleJDKを選択し、1.8になっているとこ
Flutter Androidビルド作成が失敗するKeystore file ‘android/app/key.jks’ not found for signing config ‘release’.
# はじめに
FlutterアプリをGoogle Play Storeに公開する手順は以下のような記事で解説されています。https://gakogako.com/flutter_android_release/
https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/42_chapter5_googleplay
ただ、私の場合はその通りにやってもできなかったので、、、ここに記録したいと思います。
**私はAndroidアプリを公開するのは初めてではないので、既にkeystoreファイルは持っています。なので最初の準備はすっ飛ばして進めました。**
だからなのかわかりませんが、`flutter build appbundle`の部分でエラーに見舞われました。。
# 前提
Keystoreファイルの作成、`key.properties`の作成など[ここまでの手順](https://gakogako.com/flutter_android_release/#flutter_cleanする)は
tasks.register()に渡す第二引数と第三引数に関するメモ
`Plugin
`を継承したクラスにてオーバーライドされる`apply()`では、タスクを登録することができる。 “`kotlin
class CustomPlugin : Plugin{
override fun apply(target: Project) {
with(target) {
tasks.register(“customTaskName”, CustomTask::class) {
dependsOn(taskName)
…
}
}
}
}
“`タスクを登録する際、`Project`の`tasks`プロパティの`register()`を呼び出す。
第一引数には、タスク名を渡す。
ただ、第二引数に付けられた名前が`type : KClass
`となっており、使われ方がよくわからなかった。 そして、第三引数として渡すブロックは`configurationA
GradleプラグインとGradleタスクの違いのメモ
私は、GradleプラグインとGradleタスクの違いがわからなかった。
Gradle素人として、いくつか疑問が浮かんできた。
「プラグインとタスクの本質的な違いはなんだろう?」
「GradleプラグインとGradleタスクの使う場面ってどこだろう?」
まずは、Gradleプラグインについて調べてみた。
Gradleプラグインは、新しい既存の機能を拡張するために存在している。
そして、Gradleプラグインを使うことで新しいタスクの追加や、既存の設定を上書きしたりすることができるようだ。ここで出てきたタスクという単語。
そう、Gradleタスクはプラグインによって追加することができるのだ。
:::note warn
もちろん、プラグインをわざわざ作成しなくても、直接**build.gradle**に定義することも可能。
:::そして、ここでいうタスクとは、Gradleのビルドにおける1つの作業単位を表す。この作業単位とは、実際にはクラスのコンパイルや、JARの作成、そしてJavaDocの作成などのひとまとまりのロジックを意味している。
そしてこのタスクは、別のタ
【Android】フォントを変更する
# フォルダの作成
resを右クリック→New→Directory でダウンロードしたフォントの置き場(ここではmy_fontと命名)になるフォルダを作っておきます![スクリーンショット 2023-02-12 22.46.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2394054/7199dff7-a12b-bc39-e402-137e4e8e99df.png)
以下のサイトなどからダウンロードし、先ほど作ったフォントの置き場であるmy_fontフォルダにドラック&ドロップでAndroidStudio内に持ってきます
[Google Noto Fonts](https://fonts.google.com/noto)
[Google Fotnts](https://fonts.google.com/)
# 使用
XML上の使用したいテキストの要素に
“`
android:fontFamily=”@my_font/〜〜〜〜”
“`
と先ほど追加したフォルダからfontFam
kotlin coroutine
# サマリ
#### コンテキスト
コンテキストはスレッドのこと
withContext(Dispatchers.IO)
Dispatchers.Main
Dispatchers.IO
Dispatchers.Default#### スコープ
スコープとはcoroutineが制御される範囲(追跡可能な範囲)
viewModelScope.launch
await:値を返す
※suspend 関数は、他の suspend 関数から、または、launch などのコルーチン ビルダーを使って新しいコルーチンを開始することによってのみ呼び出せる。## コンテキスト
#### メインセーフ
suspend 関数は、他の suspend 関数から、または、launch などのコルーチン ビルダーを使って新しいコルーチンを開始することによってのみ呼び出せる。“`kotlin
suspend fun fetchDocs() { // Dispatchers.Main
val result = get(“developer.android.
Cloud Storage for Firebaseのエミュレーターに接続して画像をアップロードしたら失敗した話
開発中のAndroidアプリで、ローカルで起動したFirebase Emulator SuiteのCloud Storageに接続するように設定しました。
“`shell
FirebaseStorage.getInstance().useEmulator(“10.0.2.2”, 9199)
“`しかし、通常通り画像のアップロード処理を行なってみたところ次のようなエラーが発生しました。
“`shell
StorageException has occurred.
User does not have permission to access this object.
Code: -13021 HttpResult: 403
…
…
com.google.firebase.storage.StorageException: User does not have permission to access this object.
“`調べてみたところ、自動的に読み込まれた**storage.rules**の内容
Android Studioを複数起動した際に「Timeout waiting to lock journal cache」というエラーが出た時に…
# Timeout waiting to lock journal cache :joy:
セキュリティソフト(ESETなど)を入れている場合に、Gradle周りでビルドが終わらないなどの不都合が発生することがあります。特に、Android Studioを複数起動した際に、下記のような「**Timeout waiting to lock journal cache**」というエラーが出てしまうのは開発効率的な意味でとても面倒な問題です。
“`terminal
Gradle could not start your build.
> Cannot create service of type BuildSessionActionExecutor using method LauncherServices$ToolingBuildSessionScopeServices.createActionExecutor() as there is a problem with parameter #21 of type FileSystemWatchingInformation.
>
MediaPad T2 Pro 10.0 へLineage OS 18.1を導入する
SIMフリーで4Gに対応しており、10インチというなかなかの大画面液晶を搭載した型落ちタブレット**MediaPad T2 Pro 10.0**。
Androidバージョン6.0の公式ROMが中々使いづらく、省電力を意識し過ぎたためかクロック数を本来利用できる値の1/4に強制的に固定しているため、常にもっさりとした動作になる。
しっかりと中華タブレットでありがちな**使えないことはないけどイライラする**の要素を含んでいるのだ。
# 10インチ版の既出記事がない
7インチ版へLinege OSを導入する記事はいくつか存在するものの、なぜか10インチ版への導入解説を行っているサイトを見つけることはできなかった。英語版ではいくつかあったが、日本語版はおそらく存在しない。
色々試行錯誤した結果、Linege OS 18.1 (Android 11)を導入することができた。流石にOSが新しいだけあって使いやすい。バージョンの低さが理由でアプリが利用できない問題に遭遇することもなくなった。
# 準備するもの
– BootloaderをUnlock済みのMediaPad T2 Pro 10.0
–
[Android]java.lang.IllegalArgumentException: Unable to create converter for class com.jp…のエラーの解決方法
## エラー:java.lang.IllegalArgumentException: Unable to create converter for class com.jp…
解決:**.addConverterFactory(GsonConverterFactory.create())** がないとだめ上記エラーが出る
“`
val retrofit = Retrofit.Builder().baseUrl(“http://~~~~”)
.addConverterFactory(GsonConverterFactory.create())
.build()
“`“`
implementation( “com.squareup.retrofit2:converter-gson:2.3.0”)
“`
これを入れると **GsonConverterFactory**がimportできるようになる
[Android][compose]api取得でとりあえずUseCaseまで実装できたから通信確認したい
## とりあえずUseCaseまでできたから通信確認したい
Retrofit2とgsonを使います“`
implementation(“com.squareup.retrofit2:retrofit:2.9.0”)
implementation( “com.squareup.retrofit2:converter-gson:2.3.0”)
“`“`
//どこかのView,Screenに以下を設定val retrofit = Retrofit.Builder()
.baseUrl(“http://~~~~”) //通信先
.addConverterFactory(GsonConverterFactory.create())
.build()
val apiClient = xxxApiClient(retrofit)
val dataSource = xxxDataSource(apiClient)
val repository
Flutterとはなんぞや?
目次
–
[はじめに](#はじめに)
[自己紹介](#自己紹介)
[私の今知っている知識](#私の今知っている知識)
[そもそもFlutterとは…?](#そもそもFlutterとは…?)
[Dartとはなんぞや](#Dartとはなんぞや)
[記事を書きながら得た知識](#記事を書きながら得た知識)
[まとめ](#まとめ)はじめに
–
Flutterとはなんぞや?
ということで、なんでしょうか、最近良くネットでFlutterという単語を聞きますがいったいなんのことがわかっていません。
ということで、少し調べてみようということで記事を投稿してみました。それではいってみよう!
###
自己紹介
–
経験1年半ほど。
現在開発案件に参画中。
私は、Java Spring 少々。Python経験1年ほど(Selenium)で構成されています。###
私の今知っている知識
–
– AndroidやiOSの開発をどちらともできるらしい
– 「Dart」というものが関係しているらしい
– Windowsではビルドできない全く知りません。ということで、これからグーグル先生を