- 1. Introduction
- 2. Installation of Cordova
- 3. Installing requirements for Android targets
- 4. Summary
Apache Cordova is a cross-platform software-development framework allowing you to code your application once and have it running on Android, iOS, Web and Electron (Desktop) natively. Cordova itself might not be so well-known, yet it’s the foundation for other Frameworks (such as Ionic) allowing cross-platform software development. While Cordova is a decent framework it can get quite hard to set it up correctly. This article will guide you through the installation of Cordova on Fedora (35 at the time of writing), so you can create your own apps with it.
Before we get started with Cordova, we need to install a Node environment first. Cordova requires
npm installed. Luckily Fedora ships recent versions of both in its repositories out-of-the-box.
sudo dnf install nodejs npm
Now that we have the
npm out of the way, we can continue on installing cordova itself.
sudo npm install -g cordova
Let’s create a dummy project verifying everything works as it should.
cordova create HelloWorld cd HelloWorld/ cordova platform add browser cordova build cordova serve
That’s it. Cordova is installed and everything works! Well, kind of. If you intend to create Web-Apps only, you can stop reading right here, and the installation is complete. If you’re still interested in publishing to other Platforms such as Android, continue reading.
To summarize what’s going to happen in this section, I’ll just say: “We’ll install the Android SDK and lots of other tooling necessary to get you going”. Since I’m a huge fan of Jetbrains products myself, I’ll show you the easy way of getting started with the Android SDK setup and let Android Studio do the heavy lifting. Luckily,
Android Studio is available as Flatpak (make sure to have Flathub repositories referenced for the following steps to work).
flatpak install com.google.androidstudio
Android SDK tools are written in Java and require a Java environment to be set up and configured. Once again, Fedora got our back, and the only thing you’ll have to do is to install the
openjdk and then create an Environment-Variable called
JAVA_HOME pointing to it.
sudo dnf install java-latest-openjdk java-latest-openjdk-devel # this assignment will always use the path to the latest version of Java # and thus it's even working when you update the openjdk via dnf export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") # Verify Java installation was successful javac --version
Additionally to Java, we’ll need to have
gradle installed. Gradle is a build automation framework for Java. It’s extensively used in Cordova and Android development. Here we just grab a copy of the latest binaries from The Gradle Release page. At the time of writing this article, the version was
7.4. Make sure to adapt the version in the Download-URL accordingly (as argument to the
wget command below).
GRADLE_VERSION="7.4" wget "https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip" unzip gradle-$GRADLE_VERSION-bin.zip cp -r gradle-$GRADLE_VERSION-bin/ /usr/local/gradle export PATH="$PATH:/usr/local/gradle/bin" # Verify Gradle installation is succcessful gradle --version
Once that is done, we’ll need to export further environment variables for the Android SDK, so Cordova can find and use it.
export ANDROID_SDK_ROOT="/home/$(whoami)/Android/Sdk/" # ANDROID_HOME is legacy, you might not need to set this. # It's just here for backwards-compatibility purposes. export ANDROID_HOME=$ANDROID_SDK_ROOT export PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/" export PATH="$PATH:$ANDROID_SDK_ROOT/tools/bin/" export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools/" export PATH="$PATH:$ANDROID_SDK_ROOT/build-tools/32.0.0/"
Now we want to install the
Android Build Tools in the right version, so Cordova can properly use them. As of writing this article, Cordova required
30.0.3 of the Android-build-tools. You can install the build tools through the
sdkmanager coming with the Android SDK. To verify which version Cordova requires at the moment, you just use the Cordova CLI Command
cordova requirements within a project. It’ll tell you which version it expects.
sdkmanager --install "build-tools;30.0.3"
As you’ve seen you’ll need a lot of environment variables to be set. Doing these manually every time you log into a shell is not convenient at all. Depending on the shell you are using, you can add these export statements at the end of its rc files. Those files are sourced everytime you instantiate a new shell.
# for ZSH edit the .zshrc file in your home directory cat ~/.zshrc # for Bash edit the .bashrc file in your home directory cat ~/.bashrc
add the following environment variable export statements at the end of the corresponding rc file.
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::") export ANDROID_SDK_ROOT="/home/$(whoami)/Android/Sdk/" export ANDROID_HOME=$ANDROID_SDK_ROOT export PATH="$PATH:$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/" export PATH="$PATH:$ANDROID_SDK_ROOT/tools/bin/" export PATH="$PATH:$ANDROID_SDK_ROOT/platform-tools/" export PATH="$PATH:$ANDROID_SDK_ROOT/build-tools/32.0.0/" export PATH="$PATH:/usr/local/gradle/bin"
now we can finalize the installation of Android-related tooling for Cordova. We just add the
android platform to our previously created demo-project and build everything again.
cordova platform add android cordova requirements cordova build # Note: this only works if an Android Emulator is running, or a Phone with the ADB enabled, is connected. cordova run android
Installing Cordova alone is straight-forward. Installing it with Android build/run-support is a bit more complicated. Especially if you don’t know much about Android tooling. Sadly, the official Cordova documentation is barely touching the topic of installation. Also there close to no installation instructions for Red Hat distributions such as Fedora or CentOS available on the web. Hope this short article helps you out when you want to get your feet wet with Cordova. If you have any questions left, feel free to post a comment below. Have fun!