The other day while I was hacking away on this Ionic-Angular project for work. I was building my android project:
ionic cordova build android -- --production
But I encountered the following unusual error at the end of the build:
... BUILD SUCCESSFUL in 9s 45 actionable tasks: 5 executed, 40 up-to-date Command finished with error code 0: /Users/darrenkarlsapalo/git/work/easy-cash/platforms/android/gradlew cdvBuildDebug,-b,/Users/darrenkarlsapalo/git/work/easy-cash/platforms/android/build.gradle Built the following apk(s): /Users/darrenkarlsapalo/git/work/easy-cash/platforms/android/app/build/outputs/apk/debug/app-debug.apk No scripts found for hook "after_compile". No scripts found for hook "after_build". [ERROR] An error occurred while running subprocess cordova. cordova build android --verbose exited with exit code 1. Re-running this command with the --verbose flag may provide more information. ionic:utils-process onBeforeExit handler: 'process.exit' received +0ms ionic:utils-process onBeforeExit handler: running 2 functions +0ms ionic:utils-process processExit: exiting (exit code: 1) +31ms
What was unusual was that the production APK build was successful, but there was an error that occurred nonetheless. Why didn’t it work?
You can follow my thought process in investigating this issue. I filed it as a GitHub issue on cordova-useragent repository, where I thought it should be kept in.
Turns out, it was related to a deprecated naming convention for the identifier of the
I discovered the root of the problem through the verbose error logging of the build command:
... Failed to restore plugin "im.ltdev.cordova.UserAgent" from config.xml. You might need to try adding it again. Error: Error: npm: Command failed with exit code 1 Error output: npm ERR! code E404 npm ERR! 404 'im.ltdev.cordova.UserAgent' is not in the npm registry. npm ERR! 404 name can no longer contain capital letters ...
Because the naming convention for the plugin was invalid (which was
im.ltdev.cordova.UserAgent), Ionic’s build script failed to regenerate the necessary plugins defined on the
package.json. This caused the build failure.
There’s two ways to go about addressing the issue. One is the quick workaround, while the other one is the actual fix.
Remove and re-add the cordova plugin using the following terminal commands:
ionic cordova plugin remove cordova-plugin-useragent ionic cordova plugin add cordova-plugin-useragent
If the plugin couldn’t be successfully removed, ignore the error. After adding the plugin back, it should add the plugin to your plugins folder, and in turn, your android project.
The actual fix for this problem is to update the plugin with the changes I described, and actually implemented by GitHub user @aaronneon2. A pull request just has to be made and reviewed by the original plugin owner. We’re just not sure if he’s still active.
That’s it! If you want to review or analyze how I debugged this problem, checkout the issue I filed on GitHub!
New to sapalo.dev?
Hi there reader! My name is Darren and I write about technology, learning, and gaming for mid to senior level software engineers. I love learning and finding lessons (and mistakes) in things that I do.
Sharing what we learn enables us to encourage, uplift, and empower the next set of engineering problem solvers. Writing them down also reminds me to seal the lesson in and not forget them!
I have a series of mental models that helps you think and strategize for problems whether in engineering or in your personal life. I also share short stories about reflections of my life, studying the similarities of playing competitively both in games and in performance at work.
Here are some trending things I’ve been talking about lately: