旨辛チキンおいしい

よくある備忘録みたいな奴です。

AndroidX に移行すると android.support.v8.renderscript が使えなかった話

趣味で作っているアプリを、せっかくだから targetSdkVersion を 28 にして AndroidX で Kotlin でマルチ module で作ってやるぜ〜と思ったのですが、画像にぼかしをかけるのに使用していた android.support.v8.renderscript が AndroidX にすると使えなくなってしまいました。

そもそも support-v8 のようなものはもともと依存関係に追加しておらず、どうやって依存が解決されていたのかわかっていませんが、検索しても androidx.legacy:legacy-support-v8:1.0.0 のようなものは見つかりません。 いろいろ調べているうちに androidx.renderscript というパッケージに移動されたということがわかったのですが、これを import しても依存は解決できずにコンパイルが通りませんでした。

もっと調べると Android Issue Tracker に起票されている既知の不具合のようでした。

Issue: https://issuetracker.google.com/issues/111948805

詳細は issue に書いてあるので読んでください。 Build tools に不具合があったようで、修正できたようなのでそのうちアップデート版の Build tools に取り込まれるようです。 28.0.3 で来ればいいですが、さらに先になる可能性もありますね。

そのアップデートが来るまで待とうかと思ったのですが、 Android Developers の RenderScript のページに次のように有りました。

引用: https://developer.android.com/guide/topics/renderscript/compute#access-rs-apis

When developing an Android application that uses RenderScript, you can access its API from Java in one of two ways:

  • android.renderscript - The APIs in this class package are available on devices running Android 3.0 (API level 11) and higher.
  • android.support.v8.renderscript - The APIs in this package are available through a Support Library, which allows you to use them on devices running Android 2.3 (API level 9) and higher.

サポートライブラリを使用しない android.renderscript パッケージは API level 11 以上がサポートされていました。 サポートライブラリを使用すれば API level の要件を 9 以上に引き下げられますが、趣味で作っているアプリなのでそもそも minSdkVersion は 21 に設定しているので…

ということで、 android.renderscipt を直接使用するように import を書き換え、無事コンパイルできるようになりました。