cordova-diagnostic-pluginのビルドエラーについて

Monacaチームの小田川です。

2021年9月29日に、androidx.appcompat:appcompat@1.4.0-beta01リリースされました。このリリースにより、Androidビルドで以下のようなビルドエラーが多く発生するようになりました。

Execution failed for task ':app:processDebugResources'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
   > Android resource linking failed
     /root/.gradle/caches/transforms-2/files-2.1/082fd8435f96aa3f026dd001121230f9/core-1.7.0-beta02/res/values/values.xml:105:5-114:25: AAPT: error: resource android:attr/lStar not found.

このビルドエラーの多くは、cordova-diagnostic-pluginで発生しており、以下のようなIssueも報告されています。

現在は、この問題に対応したcordova-diagnostic-plugin@6.0.4が公開されています。

今回は、cordova-diagnostic-pluginで発生したエラー原因と対応を見ていきたいと思います。

エラー原因

cordova-diagnostic-plugin@6.0.4未満のバージョンで使用されているplugin.xmlでは、以下のような設定が行われています。

plugin.xmlの抜粋:
<platform name="android">
  <preference name="ANDROIDX_VERSION" default="1.+" />
  <framework src="androidx.legacy:legacy-support-v4:$ANDROIDX_VERSION" />
  <framework src="androidx.appcompat:appcompat:$ANDROIDX_VERSION" />
</platform>

この設定の場合、ビルドの際にandroidx.legacy:legacy-support-v4とandroidx.appcompat:appcompatの「1」系の最新バージョンがインストールされます。

2021年9月29日に、androidx.appcompat:appcompat@1.4.0-beta01がリリースされたことにより、ビルドの際にandroidx.appcompat:appcompat@1.4.0-beta01がインストールされ、android:attr/lStarを見つけることができなくなったために、今回のビルドエラーが発生しています。

現在のandroidx.legacy:legacy-support-v4の安定板の最新バージョンは、「1.0.0」になり、androidx.appcompat:appcompatの安定板の最新バージョンは、「1.3.1」になります。

plugin.xmlでは、preferenceでANDROIDX_VERSIONが設定されているため、利用者側からANDROIDX_VERSIONを使用してバージョン指定ができるようになっていますが、androidx.legacy:legacy-support-v4とandroidx.appcompat:appcompatの両方で利用されているため、今回のビルドエラーには対応できない状態になっています。この設定が、今回のビルドエラーの原因になります。

cordova-diagnostic-pluginの対応

cordova-diagnostic-plugin@6.0.4のplugin.xmlでは、以下のように設定が変更されました。

plugin.xmlの抜粋:
<platform name="android">
  <preference name="ANDROIDX_VERSION" default="1.0.0" />
  <preference name="ANDROIDX_APPCOMPAT_VERSION" default="1.3.1" />
  <framework src="androidx.legacy:legacy-support-v4:$ANDROIDX_VERSION" />
  <framework src="androidx.appcompat:appcompat:$ANDROIDX_APPCOMPAT_VERSION" />
</platform>

cordova-diagnostic-plugin@6.0.4では、androidx.legacy:legacy-support-v4とandroidx.appcompat:appcompatそれぞれに対応したpreference設定になっています。

preferenceのデフォルト値は、現在、androidx.legacy:legacy-support-v4とandroidx.appcompat:appcompatで提供されている安定板の最新バージョンが設定されているため、cordova-diagnostic-plugin@6.0.4を利用することで、正常にビルドができる状態になっています。

Monacaでこのpreference設定を利用する場合は、MonacaクラウドIDEのメニュー、

  • 設定 > Cordovaプラグインの管理 > 有効なプラグイン > cordova.plugins.diagnostic

の設定画面にあるインストールパラメータに、以下のように設定することで利用することができます。

インストールパラメータの設定例:
ANDROIDX_VERSION=1.0.0
ANDROIDX_APPCOMPAT_VERSION=1.3.1

おわりに

今回は、cordova-diagnostic-pluginのビルドエラーの原因と対応について説明しました。cordova-diagnostic-plugin@6.0.4未満のバージョンを使用していて、今回のビルドエラーが発生する場合は、cordova-diagnostic-plugin@6.0.4以降を使用してみてください。

androidx.appcompat:appcompat@1.4.0-beta01のリリースにより、cordova-diagnostic-plugin以外でも同様のエラーが発生する可能性があります。今回のようなビルドエラーが発生した場合は、対象のCordovaプラグインのplugin.xmlにライブラリーの最新バージョンがインストールされる設定が行われていないか確認してみてください。

Cordovaプラグインのplugin.xmlにpreference設定が行われている場合は、利用者側から設定を変更することができます。Monacaでは、Cordovaプラグインの設定画面からインストールパラメータとして設定することが可能になっていますので試してみてください。