Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

数年ぶりのAndroid Studio 新規プロジェクトの初回ビルドで生じるGradleの問題

f:id:espio999:20210512165052p:plain
図書館に頼んでおいた本のステータスが「回送中」に変わってから数日。どうやら他の自治体から送られている本のようだ。この本はKotlinとAndroid Jetpackについてのものだ。Android周辺の技術に触れるのは久しぶりで、待っている間に環境整備しておこうと思い立った。

Android Studioに触るのも数年ぶりで、技術的な変化以上に、それを取り巻く環境の変化から戸惑うところがあった。

なお、次のヴァージョンを前提としている。

  • Android Studio 4.2
    • Build #AI-202,7660,26,42,7322048, built on April 29, 2021

OpenJDK

言語がJavaからKotlinへ変化したとはいえ、それがJVMで動作することに変わりはなく、JDKの導入を求められる。そこで再認識されたのがJavaのライセンス変更についてだった。

JDKの新しいリリース・モデル、および提供ライセンスについて | Oracle 日本

このタイミングでOpenJDKへ移行することになった。色々と選択肢はあるのだが、吟味するほどの知識はない。先日、MicrosoftJavaを長期サポートすることを宣言したのを思い出し、Microsoftビルド版を導入することにした。
msopenjdk.azurewebsites.net

Gradleが、新規プロジェクトの初回ビルドに失敗する問題の解決。

ビルド環境として用いられるGradleは、新規プロジェクトを開始する最初の段階でも動作する。このとき表示されるのが冒頭のエラー画面だ。次のエラーが出力されている。
f:id:espio999:20210511224527p:plain

A problem occurred configuring root project 'My Application'.
> Could not resolve all artifacts for configuration ':classpath'.
> Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.0-release-764.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.0-release-764/kotlin-gradle-plugin-1.5.0-release-764.pom
- https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.0-release-764/kotlin-gradle-plugin-1.5.0-release-764.pom
Required by:
project :

Possible solution:
- Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

  • 何かの設定が間違っている
  • 指定場所で目的のものを見つけられなかった
  • 指定されたURLの文書を読め

と言っているのだが、ユーザーは何も悪くない。
問題は自動生成されたファイルの記述にある。具体的には、次の箇所に間違いがある。添付画像の矢印の箇所だ。

Gradle Scripts / build.gradle

f:id:espio999:20210511224556p:plain
”build.gradle”の矢印の箇所を、次のように書き換えて”Try Again”をクリックすれば、ビルドは成功する。

//ext.kotlin_version = "1.5.0-release-764"
ext.kotlin_version = "1.5.0"

f:id:espio999:20210511224616p:plain

余談 - Android Jetpackプログラミング

今回の環境整備は、この書籍でのキャッチアップを進めるためだった。今回のビルド障害にも間接的に関連することだが、Androidを取り巻く状況の変化、その早さと大きさに驚かされた。
Android界隈の「断片化」は10年以上、解消されることがないばかりか、このような断絶の大きな変化が短いサイクルで繰り返されるならば、それは断片化を解消するどころか、より促進しているだけではないかと感じた。
Androidのような環境では、次の余談でも触れている、SL4Aのようなスクリプティング環境の方が適しているのではないだろうか。
impsbl.hatenablog.jp

余談 - SL4A

スマートフォンという、おそらく最も身近で手軽なデバイスへ、ユーザーが必要とする機能を加え、実行するために、

  1. プログラムを書き、
  2. コンパイルし、
  3. バイスへインストールする。

という手間を要求されるのは本来あるべき姿なのか、ということをAndroid Studioに触れるたびに考えさせられる。

必要とするライブラリやAPIが、すでにデバイスに実装されているならば、デバイス上でスクリプトを書き、それらを直接呼び出すのが本来の姿だと思うのだ。PCやサーバーでも、ユーザーが必要とする処理のほとんどはスクリプティングで済ませるはずだ。なぜかスマートフォンには、同様のことを実現しようとする試みがない。

Googleの正式なプロジェクトではなかったのだが、そのような機能を実装しようとしていたのがSL4Aだった。残念ながら、このプロジェクトは10年以上前にストップしてしまった。

そして久々にSL4Aを動かしてみた。
高解像度画面でdot by dot表示されるシェルは大変読みづらい。
f:id:espio999:20210512120949j:plain

android.googlesource.com
source.android.com
github.com