- 1. エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるルーティングの柔軟性
- 2. GradleのVersion catalogでcompileSdk等も管理する方法
- 3. webインスペクタを使って、mac pcとandroid端末にてchromeの実機検証を行う
- 4. 【Jetpack Compose】ロングタップ時に Ripple Effect を表示する方法
- 5. エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるフィルタリング
- 6. Android11でアプリ内の領域に出力したファイルを自分の手元のPCに持ってこようとしたら Permission denied と言われる件
- 7. Jetpack Compose ConstraintLayoutの基本的な利用方法
- 8. Android11対応と2021年対応でやったこと (RSSリーダーアプリ編)
- 9. JNIでNullableなint値を受け取り、jobjectからint値に変換する方法
- 10. Androidでキーボードを閉じられたのを検知する方法
- 11. Androidでアプリ起動時にEditTextにフォーカスがあたらないようにする方法
- 12. AndroidのEditTextからフォーカスを外す方法
- 13. Flutter Flavor対応(パッケージ未使用)
- 14. Pixel6・Pixel6 ProでRootを取る
- 15. onOptionsItemSelected の簡略化
- 16. ScrollableなComposableでコンテンツをレイアウトいっぱいに表示させる方法
- 17. 【M1 Pro/Max対応】M1 Mac環境構築ベストプラクティス
- 18. 【M1 Pro/Max対応】M1 MacにおけるAndroid開発環境構築
- 19. Jetpack Compose 枠線つきの角丸
- 20. RetrofitでDELETEメソッドに@Bodyつける
エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるルーティングの柔軟性
## はじめに
Couchbase Mobileは、エッジコンピューティングを実現するデータプラットフォームであり、AndroidやiPhone(Swift, Objective-C)のようなスマートフォンやエッジデバイス用の組込データベースであるCouchbase Liteと、Couchbase Server、そしてそれらの間のデータの同期を実現する、Sync Gatewayから構成されます。
[エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるアクセス制御モデル](https://qiita.com/yoshiyuki_kono/items/b9eb6ddae93fc98f4f7b)にも書いた通り、Sync Gatewayでは、ユーザーとロールとチャネルによって、データ(ドキュメント)のルーティングを構成します。
ここで紹介するSync関数(Sync Function)を定義することによって、アプリケーションは、データルーティングとアクセス制御を実装することができます。
[Couchbase Mobile
GradleのVersion catalogでcompileSdk等も管理する方法
他のことは全部下記に書いてあります。
https://star-zero.medium.com/gradle%E3%81%AEversion-catalog%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E7%AE%A1%E7%90%86-eb81f8e88444
# 環境
Android Studio Bumblebee | 2021.1.1 Beta 2
Bumblebeeでは`enableFeaturePreview(‘VERSION_CATALOGS’)`の追加が必要でした。
“`groovy:settings.gradle
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}enableFeaturePreview(‘VERSION_CATALOGS’) // <- 追加
webインスペクタを使って、mac pcとandroid端末にてchromeの実機検証を行う
はじめに:
開発者向けオプションをandroid側で、onにする。→端末情報を何回かクリックすると開放。
USBデバッグの設定をonにして、デバッグモードを使えるようにする。
これを行うと開発者用モードを使用できるようになる。webインスペクタ:
参考URL上では、USB接続と言ってますが、type cで繋げています。(androidがtype cなので)デバッグモードが使えるようになっていれば、chrome://inspect/#devicesにアクセスすると、Remote Targetの下に自分の端末が出ているはず。
##### ※このときに、type c同士の接続でうまくいきました。一方がtype c 一方がusbの形のケーブルだとdebugツールが反応してくれませんでした。なので、うまくいかない時には、ケーブルなどを変えてみてはいかがかと!
設定がうまくいけば、Remote Targetの下にandroid側で開いているタブ一覧が表示されるので、inspectをクリックします。
すると、pc側で以下のような画面が現れます。実際に動かしたり、html,cssをいじる
【Jetpack Compose】ロングタップ時に Ripple Effect を表示する方法
Jetpack Compose で任意の Composable にロングタップ時の操作をさせたい場合について、公式では下記のように記載されています(2021 年 11 月 1 日時点)。
“`kotlin
Modifier.pointerInput(Unit) {
detectTapGestures(
onLongPress = { /* ロングタップ時に呼ばれる */ }
)
}
“`引用元:[操作 | Jetpack Compose | Android Developers](https://developer.android.com/jetpack/compose/gestures#tapping)
ですが、これだとロングタップ時に Ripple Effect が表示されず、どこがロングタップされたのかがわかりづらいです。
エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるフィルタリング
## はじめに
Couchbase Mobileは、エッジコンピューティングを実現するデータプラットフォームであり、AndroidやiPhone(Swift, Objective-C)のようなスマートフォンやエッジデバイス用の組込データベースであるCouchbase Liteと、Couchbase Server、そしてそれらの間のデータの同期を実現する、Sync Gatewayから構成されます。
[エッジコンピューティングを実現するCouchbase Mobile紹介:Sync Gatewayによるデータ同期におけるアクセス制御モデル](https://qiita.com/yoshiyuki_kono/items/b9eb6ddae93fc98f4f7b)では、データ同期に参加するモバイル端末/ユーザーの観点からみたコントロールについて紹介しました。
本稿では、データ同期されるデータ(ドキュメント)の観点からみたコントロールについて紹介します。
[Couchbase Mobileアプリケーション開発へのロードマップ](https://qiita.com/yoshiyuki_ko
Android11でアプリ内の領域に出力したファイルを自分の手元のPCに持ってこようとしたら Permission denied と言われる件
# 概要
掲題について、調べると手順が出てくるのですが、おおよそ– Android端末内の/sdcard/にファイルを一度コピー
– それをadb pull でPCへコピーという手順になるのですが /sdcard/(実際には /storage/self/primary へのシンボリックリンク)へのコピーが Permission denied となってしまいました。
# 端末
Android11# 今回の回避方法
おそらく正しいアプローチがあるのだと思いますが、今回そこまで時間をかけられなかったので、以下でとりあえずの回避が出来ました。アプリのファイルのパスを確認
“`
TANMATSU:/ $ run-as com.xxx.xxxxxxxxzzz
TANMATSU:/data/user/0/com.xxx.xxxxxxxxzzz $ cd files
TANMATSU:/data/user/0/com.xxx.xxxxxxxxzzz/files $ pwd
/data/user/0/com.xxx.xxxxxxxxzzz/files
TANMATSU:/data
Jetpack Compose ConstraintLayoutの基本的な利用方法
AndroidのJetpack ComposeでConstraintLayoutの基本的な利用方法です。
この記事は以下のバージョンに対応しています。| | バージョン |
|:———–|:————:|
|Jetpack Compose|1.0.4|
|androidx.constraintlayout:constraintlayout-compose|1.0.0-beta02|
|AndroidStudio|ArcticFox 2020.3.1 Patch 3|# 基本的な利用方法
Jetpack ComposeでConstraintLayoutを利用するために固有の`androidx.constraintlayout:constraintlayout-compose`というライブラリを導入する必要があります。`ConstraintLayoutSample`を例に基本的な利用方法を説明します。
“`Kotlin:ConstraintLayoutSample.kt
@Preview(showBackground = true)
@Compo
Android11対応と2021年対応でやったこと (RSSリーダーアプリ編)
## 前回
https://qiita.com/keidroid/items/7452a6988011664eb8d9## はじめに
今日はハロウィン?ですが明日11/1は毎年恒例のAndroidアプリの要件変更日となります。https://android-developers-jp.googleblog.com/2020/12/new-android-app-bundle-and-target-api.html
> 2021 年 11 月より、既存アプリのアップデートでターゲットAPIレベル30以上およびAndroid 11の動作の変更点への対応が必須になります。
> – ターゲットAPIレベル30(Android 11)以上、および動作の変更点に対応する。
> – Android App Bundle 形式で公開する
> – ダウンロードサイズが150MBを超えるアセットや機能は、Play Asset Delivery または Play Feature Delivery を使って配信今年は課金ライブラリ締め切りも同日です。
[Google Play Billing
JNIでNullableなint値を受け取り、jobjectからint値に変換する方法
# 概要
JNIを使用したAndroidのアプリをKotlinで作成しているとき、JNIの関数にNullableのKotlinのInt値を渡したいということがあった。
Nullableでない値を渡す場合であればネイティブ側でjintとして受け取るところなのだが、Nullableの場合だとエラーが発生してjintは使用できなかった。
そのため、Nullableな値をネイティブ側でjobjectとして受け取った後にjobjectからint値に変換するということを行ったのでその方法を記載する。# JNIでjobjectからint値に変換する方法
以下のようにすることでjobjectをint値に変換することができる。
“`cpp
// JNI関数の定義はKotlin側の別の場所で以下のように定義されている
external fun sampleFunc(value: Int?): Int// ネイティブ側のコード
// サンプルなので関数名は適当かつ、int値を返すだけのコード
JNIEXPORT jint JNICALL
con_example_app_sampleFunc
Androidでキーボードを閉じられたのを検知する方法
# 概要
AndroidのEditTextを入力時、戻るボタンを押してキーボードを閉じたときに特定の処理を行いたいことがあった。
そのため、Androidで表示されているキーボードが閉じられたのを検知する方法を記載する。
言語はKotlin# キーボードが閉じられたのを検知する方法
以下のようにすることで、キーボードが戻るボタンで閉じられたのを検知できる。
“`kotlin
// EditTextを継承したクラスで以下を定義
override fun onKeyPreIme(key_code: Int, event: KeyEvent): Boolean {
if(key_code == KeyEvent.KEYCODE_BACK && evnet.action == KeyEvent.ACTION_UP) {
// TODO キーボードを閉じたときに実行したい処理を書く
}
return super.onKeyPreIme(key_code, event)
}
“`
Androidでアプリ起動時にEditTextにフォーカスがあたらないようにする方法
# 概要
Androidでアプリ作成時にアプリ起動時にEditTextにフォーカスがデフォルトであたっていた。
そのため、特定の端末ではアプリ起動時にキーボードが表示されてしまうという現象が発生した。
この現象を修正するために行った、起動時にEditTextにフォーカスがあたらないようにする方法を記載する。
アプリを作成する際に使用していた言語はKotlin# アプリ起動時にEditTextにフォーカスがあたらないようにする方法
AndroidのLayoutのxmlでEditTextの親のレイアウトに以下のコードを追加する。
こうすることでアプリ起動時にEditTextにフォーカスはあたらなくなる。“`xml
android:descendantFocusability=”beforeDescendants”
android:focusableInTouchMode=”true”
“`
AndroidのEditTextからフォーカスを外す方法
# 概要
AndroidのEditTextで入力を確定したあともフォーカスがそのまま残ることがあった。
入力確定後はEditTextからフォーカスは外れてほしい。
そのためAndroidでEditTextからフォーカスを外す方法を記載する。
言語はKotlin# フォーカスを外す
以下のコードを入力確定時のイベントで実行するようにすることでフォーカスが外れるようにすることができる。
“` Kotlin
val parent = parent as View
parent.isFocusable = true
parent.isFocusableInTouchMode = true
parent.requestFocus()
“`
Flutter Flavor対応(パッケージ未使用)
#内容
Flutter開発時にFlavorが導入されたプロジェクトに参画したり、他のメンバーがFlavorを導入した後にFlutterを触ったりすることはあったが、自分でFlavorを導入したことがなかったので、導入までの流れをまとめる。やり方は様々あるようですが、今回は、main_dev.dartとmain_prod.dartの2ファイルを作成する方法で行います。
#開発環境
PC:macOS Big Sur
エディター:Visual Studio Code, Android Studio, XcodeDart:2.13.1
Flutter:2.2.1
Visual Studio Code:1.16.2
Android Studio:4.1.2
Xcode:13.1その他
Flavorパッケージは未使用
今回は開発環境と本番環境を作成する。
それぞれの名前は以下のように統一している。(Android, iOS共に同じ名前を使用する。)
開発環境:dev
本番環境:prod#準備
以下のファイルを作成する。
・main_dev.dart
・main_pro
Pixel6・Pixel6 ProでRootを取る
# 注意
### 自己責任でお願いします
**初期化されますのでバックアップ必須です**
Root権限やBootloaderUnlockしている端末をセキュリティ上ブロックしてしまうアプリはまだ使えません。以下確認してるもの
– 銀行系
– Google Pay
– torne mobile
– その他ゲームAndroid12のBoot.imgをパッチできるMagiskのバージョンがCanaryのみなのですが、Magisk hideを削除されてしまっています。
また以下のパッチをAndroid8(Xperia XZ Premium)とAndroid12(Pixel6 Pro)に当てているのですが、Android12ではSafetyNetをBypassできていません。– MagiskHide Props Config
– Riru
– Universal SafetyNet Fix11/1追記
Universal Safetynet fixがアップデートされたようで、Android12に対応したようです。
詳しくは参考2をご覧下さい# Rooting
### 1.
onOptionsItemSelected の簡略化
# ■ 概要
[onOptionsItemSelected()](https://developer.android.com/reference/android/app/Activity#onOptionsItemSelected(android.view.MenuItem)) は、もっと簡易な呼び出しがあっても良さそうな気がするので、試しに作ってみたという話。# ■ 仕様
本家で[こんな感じの説明](https://developer.android.com/guide/topics/ui/menus#RespondingOptionsMenu)がされているので、仕様を以下のようにしてみた:– 呼び出し方法
– itemId と、それに対応する処理を指定する。
– 実行内容
– 指定された itemId が対象だった場合は、対応する処理を実行し、問答無用で true を返し、super は呼ばない。[^1]
– 指定された itemId が対象でなかった場合は、super を呼び出す。# ■ 例
## ☆ 従来の書き方
“`kotlin
// For 1 m
ScrollableなComposableでコンテンツをレイアウトいっぱいに表示させる方法
`verticalScroll` / `horizontalScroll`、`LazyColumn` / `LazyRow` などの Scrollable な Composable の中では、コンテンツのサイズが定まらないため `fillMaxSize` などを使用してレイアウトいっぱいに何かを表示させることができません。
例えばリストで空の表示を画面いっぱいに出したいとして以下のようなコードを実装してもテキストは真ん中に表示されません。
“`kotlin
@Composable
fun Sample() {
LazyColumn(
modifier = Modifier.fillMaxSize()
) {
item {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Text(t
【M1 Pro/Max対応】M1 Mac環境構築ベストプラクティス
# はじめに
2021/10/26にM1 Pro/Maxを搭載したMacBook Proが発売され、現在環境構築をされている方も多いかと思います。一方で、Pro/Maxも含めた**M1 Mac**はIntel Macと同じ方法でセットアップできないツールが多く、また公式未対応時のイレギュラーなセットアップ方法の記事がネット上に多く存在するため、**どのセットアップ方法が正しいのか判断するのが非常に難しい**状況となっています。
![独自インストール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/a6953011-924a-8d9b-8d63-c1fce4b6bad9.png)
そこで今回、私が調べた範囲で**現時点でのベストプラクティスと思われる方法**をまとめてみました。方法選択には主観も含まれているため、**「こちらの方が良い!」**という方法をご存じであれば、気軽にコメント頂けるとありがたいです
## 更新情報
本記事は**2021/10/30時点**での内容となります。
【M1 Pro/Max対応】M1 MacにおけるAndroid開発環境構築
# はじめに
[こちらの記事](https://qiita.com/c60evaporator/items/71a84e198fa078a4f956)でも触れましたが、M1 Macはイレギュラーなインストール方法のツールが多く、Android開発に使用するAndroid Studioもその例外ではなく、公式以外の方法でのインストールが必要な機能がいくつか存在していました。一方で公式側の対応も進んでおり、2021/10/30現在、ほぼ**公式ツールのみでセットアップが完結する**状況となっております。
そこで今回、**M1 Mac向けAndroid Studioのセットアップ方法**について記事にまとめようと思います。
# Android Studioのダウンロードとインストール
[Android Studioのダウンロードページ](https://developer.android.com/studio#downloads)にアクセスし、「Download options」をクリックします
![スクリーンショット 2021-10-28 22.36.53.png](https:/
Jetpack Compose 枠線つきの角丸
AndroidのJetpack Composeで大枠のComposeを枠線つきの角丸にする方法です。
この記事は以下のバージョンに対応しています。| | バージョン |
|:———–|:————:|
|Jetpack Compose|1.0.4|
|AndroidStudio|ArcticFox 2020.3.1 Patch 3|# Viewの場合
Viewを枠線つきの角丸にする場合、下記のようなxmlファイルを作成し、Viewのbackgroundに定義しました。“`xml:rounded_corner_bg.xml
RetrofitでDELETEメソッドに@Bodyつける
# 問題
retrofit使ってたらこんなエラーが出た“`
android retrofit non-body http method cannot contain @body.
“`DELETEやGETメソッドで`@Body`を使ったjsonリクエストはできないらしい
# 解決
いやいや、できる“`kotlin
@DELETE(“https://hogehoge/fugafuga”)
↓
@HTTP(method = “DELETE”, path = “https://hogehoge/fugafuga”, hasBody = true)
“``@Body`つけれた