Bug Report
Problem
Include cordova-plugin-androidx-adapter in package.json, along with cordova-ios and cordova-android.
With no platforms or plugins directories, run cordova prepare.
What is expected to happen?
The after_prepare hook of cordova-plugin-androidx-adapter should be invoked at the end of the prepare, because the Android platform and the plugin have just been restored.
What does actually happen?
The after_prepare hook never fires, cordova-lib verbose output indicates that no hook scripts were found.
Information
What happens is that the ScriptsFinder tries to look up scripts in plugins for the provided list of platforms:
|
const scriptElements = plugin.pluginInfo.getHookScripts(hook, platforms); |
That list of platforms comes from the options of the HooksRunner:
|
scripts = scripts.concat(getPluginScriptFiles(currentPluginOptions, hook, opts.cordova.platforms)); |
The HooksRunner sets its list of platforms to a provided option, or falls back to querying for the installed platforms:
|
opts.cordova.platforms = opts.cordova.platforms || opts.platforms || cordovaUtil.listPlatforms(opts.projectRoot); |
|
opts.cordova.platforms = opts.cordova.platforms.map(function (platform) { return platform.split('@')[0]; }); |
In the case of prepare, if a platform is not manually specified, we set that list of platforms to an empty array:
|
options = options || { verbose: false, platforms: [], options: {} }; |
The end result is that after restoring all the platforms and plugins, the HooksRunner still tries to find hook scripts with an empty platforms list, and the Android-specific hook never runs.
Suggested fix
HooksRunner should maybe check if the platforms array is empty and then still fallback to querying the installed platforms, rather than taking the empty input and running with it.
Version information
Was seeing this in an older project using Cordova CLI 10, but having looked at the code it seems like it's probably still an issue today.
Checklist
Bug Report
Problem
Include
cordova-plugin-androidx-adapterin package.json, along withcordova-iosandcordova-android.With no platforms or plugins directories, run
cordova prepare.What is expected to happen?
The
after_preparehook ofcordova-plugin-androidx-adaptershould be invoked at the end of the prepare, because the Android platform and the plugin have just been restored.What does actually happen?
The
after_preparehook never fires, cordova-lib verbose output indicates that no hook scripts were found.Information
What happens is that the ScriptsFinder tries to look up scripts in plugins for the provided list of platforms:
cordova-lib/src/hooks/scriptsFinder.js
Line 87 in db5c8c0
That list of platforms comes from the options of the HooksRunner:
cordova-lib/src/hooks/scriptsFinder.js
Line 114 in db5c8c0
The HooksRunner sets its list of platforms to a provided option, or falls back to querying for the installed platforms:
cordova-lib/src/hooks/HooksRunner.js
Lines 68 to 69 in db5c8c0
In the case of
prepare, if a platform is not manually specified, we set that list of platforms to an empty array:cordova-lib/src/cordova/prepare.js
Line 32 in db5c8c0
The end result is that after restoring all the platforms and plugins, the HooksRunner still tries to find hook scripts with an empty platforms list, and the Android-specific hook never runs.
Suggested fix
HooksRunner should maybe check if the platforms array is empty and then still fallback to querying the installed platforms, rather than taking the empty input and running with it.
Version information
Was seeing this in an older project using Cordova CLI 10, but having looked at the code it seems like it's probably still an issue today.
Checklist