事象
「cordova-plugin-admob-free」を追加した次のビルドで発生。他のケースでも発生する可能性があります。
C:\src\ionic\awesomeapp> ionic cordova run android
(snip)
:app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task
':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException:
com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
(snip)
原因
gradleの依存が重複することが原因(?)
ライブラリバージョンアップによってビルドされたDexファイルのマージに齟齬が発生する(?)
解決
一旦「cordova clean android」して再度ビルドしてやることで解決。
C:\src\ionic\awesomeapp> cordova clean android
Android Studio project detected
ANDROID_HOME=C:\Users\naka\AppData\Local\Android\Sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_60
Subproject Path: CordovaLib
Subproject Path: app
> Configure project :CordovaLib
publishNonDefault is deprecated and has no effect anymore. All variants are now published.
> Configure project :app
The Task.leftShift(Closure) method has been deprecated and is scheduled to be removed in Gradle 5.0. Please use Task.doLast(Action) instead.
at build_7h86rjlnzeth6d2qwohcedk89.run(C:\src\ionic\awesomeapp\platforms\android\app\build.gradle:143)
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
BUILD SUCCESSFUL in 3s
3 actionable tasks: 3 executed
C:\src\ionic\awesomeapp> cordova clean android
(snip)
:app:cdvBuildDebug UP-TO-DATE
BUILD SUCCESSFUL in 1s
46 actionable tasks: 1 executed, 45 up-to-date
Built the following apk(s):
C:\src\ionic\awesomeapp\platforms\android\app\build\outputs\apk\debug\app-debug.apk
ANDROID_HOME=C:\Users\naka\AppData\Local\Android\Sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_60
No target specified, deploying to device 'FA7761800334'.
none
Skipping build...
Built the following apk(s):
C:\src\ionic\awesomeapp\platforms\android\app\build\outputs\apk\debug\app-debug.apk
Using apk: C:\src\ionic\awesomeapp\platforms\android\app\build\outputs\apk\debug\app-debug.apk
Package name: jp.co.xyz
LAUNCH SUCCESS
まとめ
1年前にリリースしたアプリにAdmobを入れた際に発生し、先日の休日に次バージョン開発の為developビルドした際にまた発生しました。
関連ライブラリのバージョンが自動更新されたことによって上手くDexファイルが作れなくなった(?)模様です。幸い私の場合は1からビルドし直してやれば上手く行きました。
リリース後ほったらかしのアプリをちょっと弄ろうと思った時、こういうのが出ると出鼻をくじかれますね。リリース頻度の少ないアプリも月一くらいでCIビルドしておいた方が良さげです。