いきなり左端のメニューから
「テーマファイルエディタ」
が消えて、編集できなくなった。
原因はこのプラグインでした。
無効化したらもとに戻りました。

不要じゃね? このプラグイン。
権限関連を厳しくしたんだろうとは思うが。
最近アップデートしたらこのざまです。
いきなり左端のメニューから
「テーマファイルエディタ」
が消えて、編集できなくなった。
原因はこのプラグインでした。
無効化したらもとに戻りました。

不要じゃね? このプラグイン。
権限関連を厳しくしたんだろうとは思うが。
最近アップデートしたらこのざまです。
だるいですよね、インラインテーブル記述。
name = { first = "Tom", last = "Preston-Werner" }
point = { x = 1, y = 2 }
animal = { type.name = "pug" }
Android Studio でも
Graadle Version Catalog で、最初は、こんな記述でも
[plugins]
android-material = "com.google.android.material:material:1.8.0-alpha02"
やがて、
[plugins]
android-material = { module = "com.google.android.material:material", version = "1.8.0-alpha02" }
となり
[versions]
android-material = "1.8.0-alpha02"
[plugins]
android-material = { module = "com.google.android.material:material", version.ref = "android-material" }
というふうに変わっていきます。
大量にやってるのも地味にだるい。
Live Templete を使って書き換えます。
Preferences
↓
Live Templates
から作っていきます。
ここマクロたちは、思ったより使いづらいものが多い。

割と使える Groovy のマクロ。
groovyScript(
, [arg, ...]) Executes the Groovy script passed as a string.
The first argument is a string with either the text of the script or the path to the file that contains the script. The function passes other optional arguments to the script as values for _1, _2, _3, ..., _n variables. Also, you can access the current editor from inside the script using the _editor variable.
The following example shows a groovyScript() function that splits the selected text into words and displays them as a numbered list:
groovyScript("def result = ''; _1.split().eachWithIndex { item, index -> result = result + index.next() + '. ' + item + System.lineSeparator() }; return result;", SELECTION);
👉 Edit Template Variables dialog | IntelliJ IDEA
以下の感じで設定して4つのテンプレートを記述しました。

どれも似たような記述なので、一つだけ貼っておきます。
使い回せます。

使い方は、該当文字列をコピーしてから、Abbreviation を入力で、テンプレートを吐き出しながらキーなどを編集してください。
結果。

キーの編集に連携されて関連記述が編集されるのがいいところでしょうか。
けどまあ、Android Studio 本体の機能更新が待たれるところですが。
複数行一括のほうがいいので以下の方法を実際は使っています。
【Android Studio】TOML内のすべてをインライン・テーブルに書き換える Live Templates 用 Groovy スクリプト https://t.co/hTpsezFD2d #android #kotlin #groovy #androiddev #プログラミング pic.twitter.com/7PyX7I95gX
— chanzmao (@maochanz) November 11, 2022
以下の関係を公開リポジトリで確認しながら、Plugin ID を見つけていきます。
classpath "org.jetbrains.kotlin:kotlin-serialization:1.7.20"
groupId : org.jetbrains.kotlin
artifactId : kotlin-serialization
version : 1.7.20
👉 https://plugins.gradle.org/search?term=org.jetbrains.kotlin.android
👉 https://maven.google.com/web/index.html?q=org.jetbrains.kotlin.android
👉 https://central.sonatype.dev/search?q=org.jetbrains.kotlin.android
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20"
apply plugin: "org.jetbrains.kotlin.android"
plugins {
id "org.jetbrains.kotlin.android" version "1.7.20"
}
👉 Gradle - Plugin: org.jetbrains.kotlin.android
classpath "org.gradle.kotlin:gradle-kotlin-dsl-plugins:3.1.0"
apply plugin: "org.gradle.kotlin.kotlin-dsl"
plugins {
id "org.gradle.kotlin.kotlin-dsl" version "3.1.0"
}
👉 Gradle - Plugin: org.gradle.kotlin.kotlin-dsl
classpath "org.jetbrains.compose:compose-gradle-plugin:1.3.0-alpha01-dev827"
apply plugin: "org.jetbrains.compose"
plugins {
id "org.jetbrains.compose" version "1.3.0-alpha01-dev827"
}
👉 Gradle - Plugin: org.jetbrains.compose
classpath "com.diffplug.spotless:spotless-plugin-gradle:6.11.0"
apply plugin: "com.diffplug.spotless"
plugins {
id "com.diffplug.spotless" version "6.11.0"
}
👉 Gradle - Plugin: com.diffplug.spotless
classpath "com.github.ben-manes:gradle-versions-plugin:0.43.0"
apply plugin: "com.github.ben-manes.versions"
plugins {
id "com.github.ben-manes.versions" version "0.43.0"
}
👉 Gradle - Plugin: com.github.ben-manes.versions
よく使いそうな Owner :

👉 Gradle - prod-plugin-portal-publishing (Gradle)
👉 Gradle - kotlin (Kotlin Team)

👉 Gradle - jetbrains (JetBrains)

👉 Gradle - jb-compose (JetBrains Compose)
plugin id は gradle.plugin で探すとよい。
plugin.id : plugin.id.gradle.plugin : plugin.version
{group id} : {artifact id}
{artifact id} = "{plugin id}.gradle.plugin"
Group ID com.android.application
Artifact ID com.android.application.gradle.plugin
Version 8.0.0-alpha05
Plugin ID → "com.android.application"
👉 com.android.application - Google's Maven Repository
Group ID com.android.library
Artifact ID com.android.library.gradle.plugin
Version 8.0.0-alpha05
Plugin ID → "com.android.library"
👉 com.android.library - Google's Maven Repository
Group ID com.google.firebase.crashlytics
Artifact ID com.google.firebase.crashlytics.gradle.plugin
Version 2.9.2
Plugin ID → "com.google.firebase.crashlytics"
👉 com.google.firebase.crashlytics - Google's Maven Repository
Group ID com.google.gms.google-services
Artifact ID com.google.gms.google-services.gradle.plugin
Version 4.3.14
Plugin ID → "com.google.google-services"
👉 com.google.gms.google-services - Google's Maven Repository
3つあるけど、どれがいいのか。

👉 Maven Central Repository Search

👉 Maven Repository: Search/Browse/Explore
hilt, gradle.plugin のように入力して探すと良い。
<groupId>com.google.dagger.hilt.android</groupId>
<artifactId>com.google.dagger.hilt.android.gradle.plugin</artifactId>
<version>2.44</version>
Plugin ID → "com.google.dagger.hilt.android"
👉 Maven Central: com.google.dagger.hilt.android:com.google.dagger.hilt.android.gradle.plugin:2.44
<groupId>app.cash.sqldelight</groupId>
<artifactId>app.cash.sqldelight.gradle.plugin</artifactId>
<version>2.0.0-alpha04</version>
Plugin ID → "app.cash.sqldelight"
👉 Maven Central: app.cash.sqldelight:app.cash.sqldelight.gradle.plugin:2.0.0-alpha04
👉 【Plugin DSL】「com.android.tools.build:gradle」の記述は不要?
👉 【Gradle Version Catalog】libs.versions.toml キー名の形式 camelCase vs kebab-case
👉 「⚠ This project uses Gradle Version Catalogs: this tool may not behave as expected.」→ 今現在、Gradle Version Catalog には gradle-versions-plugin が必須では?
Gradle Version Catalog。
TOML ファイル作って使ってみました。
Android Studio でこんな。

⚠ This project uses Gradle Version Catalogs: this tool may not behave as expected.
なんか気持ちが悪いですよね。
update dependencies まわりがこれまで通りに正常に動いてるかどうか、心配になります。
そこらをチェックしてくれるツールを探します。
以下、人気順。

👉 ben-manes/gradle-versions-plugin: Gradle plugin to discover dependency updates

👉 jmfayard/refreshVersions: Life is too short to google for dependencies and versions

👉 littlerobots/version-catalog-update-plugin: Gradle plugin for updating a project version catalog
それぞれどこかで見かけたことがあると思います。
機能は、そのうち Android Studio にマージされるんだろうなと妄想。
👉 Jetpack Compose Samples でも使われている「Version catalog update plugin」で libs.versions.toml を書き出してみる
👉 「⚠ This project uses Gradle Version Catalogs: this tool may not behave as expected.」→ 今現在、Gradle Version Catalog には gradle-versions-plugin が必須では?
意外と自分で考えても埒が明かないので調べてみたので。
val countries = listOf("brazil", "italy", "england", "spain", "japan")
val games = mutableListOf<String>()
val indices = countries.indices
indices.forEach { left ->
indices.forEach { right ->
if (left < right) {
games.add("${countries[left]}\tvs\t${countries[right]}")
}
}
}
// val rights = countries.toMutableList()
// countries.forEach { left ->
// rights.removeFirst()
// rights.forEach { right ->
// games.add("$left\tvs\t$right")
// }
// }
games.forEachIndexed() { index, game ->
println("${index + 1}. $game")
}
println("All ${games.size} games")
assertTrue(
countries.size * (countries.size - 1) / 2 == games.size
)
1. brazil vs italy
2. brazil vs england
3. brazil vs spain
4. brazil vs japan
5. italy vs england
6. italy vs spain
7. italy vs japan
8. england vs spain
9. england vs japan
10. spain vs japan
All 10 games
総当りの表を脳内でイメージできないと、このロジックは書けないと想う。

図表をまずは描いてみること大事。
以下、移植時、ボール同士の衝突判定時に使いました。
dyn4j の実力を JetpackCompose wrapper Physics Layout で思い知る
👉 https://t.co/22ovrUynWF #android #JetpackCompose #kotlin #プログラミング勉強中 pic.twitter.com/kuXhbOyeDc— chanzmao (@maochanz) December 26, 2022