はじめに

Cordova Android アプリのビルド時に This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry. のエラーとなる場合の対処方法。

TL;DR

  • platforms/android/gradle.properties を修正する
  • before_compile フックを使うと良い
    • JS ファイルを作成して config.xml に追加
  • Vue + Cordova で npm run cordova-serve-android を使う場合は after_prepare フックも設定
1
2
3
4
5
6
7
8
9
<?xml version='1.0' encoding='utf-8'?>
<widget id="example.app" version="1.0.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
<platform name="android">
...
<hook type="after_prepare" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
<hook type="before_compile" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
</platform>
</widget>
この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list

目次

  1. はじめに
  2. TL;DR
  3. 環境・条件
  4. 詳細
    1. 発生事象
    2. 対応方法
  5. まとめ
  6. 参考文献

環境・条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.6
BuildVersion: 19G2021

$ node -v
v12.7.0

$ npm -v
6.14.5

$ cordova -v
10.0.0

$ cordova platforms
6.0.0
Installed platforms:
android 9.0.0

詳細

発生事象

いくつかのプラグインの追加後に cordova build android を実行すると以下のエラーとなった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cordova build android
...
> Configure project :app
Adding classpath: com.google.gms:google-services:4.3.3

> Task :app:mergeDebugResources FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeDebugResources'.
> This project uses AndroidX dependencies, but the 'android.useAndroidX' property is not enabled. Set this property to true in the gradle.properties file and retry.
The following AndroidX dependencies are detected: androidx.fragment:fragment:1.0.0, androidx.slidingpanelayout:slidingpanelayout:1.0.0, androidx.versionedparcelable:versionedparcelable:1.1.0, androidx.core:core:1.2.0, androidx.customview:customview:1.0.0, androidx.swiperefreshlayout:swiperefreshlayout:1.0.0, androidx.interpolator:interpolator:1.0.0, androidx.loader:loader:1.0.0, androidx.drawerlayout:drawerlayout:1.0.0, androidx.viewpager:viewpager:1.0.0, androidx.collection:collection:1.0.0, androidx.localbroadcastmanager:localbroadcastmanager:1.0.0, androidx.lifecycle:lifecycle-common:2.0.0, androidx.arch.core:core-common:2.0.0, androidx.annotation:annotation:1.1.0, androidx.lifecycle:lifecycle-livedata:2.0.0, androidx.legacy:legacy-support-core-ui:1.0.0, androidx.lifecycle:lifecycle-viewmodel:2.0.0, androidx.lifecycle:lifecycle-livedata-core:2.0.0, androidx.arch.core:core-runtime:2.0.0, androidx.legacy:legacy-support-core-utils:1.0.0, androidx.documentfile:documentfile:1.0.0, androidx.cursoradapter:cursoradapter:1.0.0, androidx.lifecycle:lifecycle-runtime:2.0.0, androidx.coordinatorlayout:coordinatorlayout:1.0.0, androidx.asynclayoutinflater:asynclayoutinflater:1.0.0, androidx.print:print:1.0.0

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 766ms
8 actionable tasks: 1 executed, 7 up-to-date
Command failed with exit code 1: /Users/hoge/.../platforms/android/gradlew cdvBuildDebug -b /Users/hoge/.../platforms/android/build.gradle

対応方法

エラー文にも 【Android】「ERROR: This project uses AndroidX dependencies, but the ‘android.useAndroidX’ property is not enabled.」エラーの対処法 – 株式会社シーポイントラボ にも書かれている通り platforms/android/gradle.propertiesandroid.useAndroidXtrue として定義する必要があるとのこと。

一番手っ取り早いのは platforms/android/gradle.properties を直接修正すること。だが、通常 platforms 配下は Git の管理外になっているはずだし、ビルド(cordova build android)実行するごとに毎回手作業が発生するので、自分は before_compile フック時にファイルを修正するようにした。


フックについては Hooks Guide - Apache Cordova を参照。

今回は前述の通り、before_compile フックを利用して、platforms/android/gradle.properties ファイルを修正するようにした。

※Vue + Cordova で npm run cordova-serve-android を実行する場合 before_compile フックは動かないので after_prepare フックもあわせて設定する。

config.xmlbefore_compile フックを追加。

1
2
3
4
5
6
7
8
9
<?xml version='1.0' encoding='utf-8'?>
<widget id="example.app" version="1.0.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
<platform name="android">
...
<hook type="after_prepare" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
<hook type="before_compile" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
</platform>
</widget>

scripts/android_before_compile.js を作成、処理としてはファイルの中身を変更してるだけ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const fs = require('fs');
const { exit } = require('process');

const readGradleProperties = (path) => {
try {
return fs.readFileSync(path, 'utf8');
} catch (error) {
console.error(error);
exit(1);
}
};

const replaceGradleProperties = (path, properties) => {
if (properties.includes('android.useAndroidX')) {
properties = properties.replace('android.useAndroidX=false', 'android.useAndroidX=true')
} else {
properties += "android.useAndroidX=true\n";
}

if (properties.includes('android.enableJetifier')) {
properties = properties.replace('android.enableJetifier=false', 'android.enableJetifier=true')
} else {
properties += "android.enableJetifier=true\n";
}

fs.writeFileSync(path, properties, 'utf8');
};

module.exports = (context) => {
const gradlePropertiesPath = './platforms/android/gradle.properties';
const gradleProperties = readGradleProperties(gradlePropertiesPath);
replaceGradleProperties(gradlePropertiesPath, gradleProperties);
};

まとめ

  • platforms/android/gradle.properties を修正する
  • before_compile フックを使うと良い
    • JS ファイルを作成して config.xml に追加
  • Vue + Cordova で npm run cordova-serve-android を使う場合は after_prepare フックも設定
1
2
3
4
5
6
7
8
9
<?xml version='1.0' encoding='utf-8'?>
<widget id="example.app" version="1.0.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
...
<platform name="android">
...
<hook type="after_prepare" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
<hook type="before_compile" src="scripts/android_before_compile.js" /> <!-- ***追加*** -->
</platform>
</widget>

参考文献

関連記事

この記事が参考になった方
ここここからチャージや購入してくれると嬉しいです(ブログ主へのプレゼントではなく、ご自身へのチャージ)
欲しいもの / Wish list