Today I wanted to try out NativeScript:

NativeScript enables you to build truly native apps for iOS, Android, and the Web, from a single JavaScript code base. With support for TypeScript, CSS, and popular frameworks like Angular and Vue.js.

Install NativeScript

Either use Arch’s native packager or npm.

With the AUR:

yay -S nativescript

If you choose to install NativeScript via Node, do it like this:

npm i -g nativescript

Now you can bootstrap a NativeScript:

tns create <name-of-app>

Or you can use npx and create a local install (my preference).

npx nativescript create <name-of-app>

Android SDK

Java 8

You’ll need Java 8:

yay -S jdk8-openjdk8

Select Y to install that package and any additional packages that are needed.

Create the JAVA_HOME environment variable:

export JAVA_HOME=/usr/lib/jvm/default

Android SDK

Install Android SDK and necessary build tools:

yay -S android-sdk android-sdk-platform-tools android-sdk-build-tools android-platform

Fix User Permissions

The AUR installs the Android tools into /opt/android-sdk. The directory has root permissions, so let’s change that:

sudo groupadd android-sdk
sudo gpasswd -a <user> android-sdk
sudo setfacl -R -m g:android-sdk:rwx /opt/android-sdk
sudo setfacl -d -m g:android-sdk:rwX /opt/android-sdk

Re-login.

Don’t forget to add the environment variable to your bash profile file (.bashrc or similar).

Set the variable ANDROID_SDK_ROOT to /opt/android-sdk:

export ANDROID_SDK_ROOT='/opt/android-sdk'

Android Emulator

You’ll need to install the required Android image with sdkmanager:

sdkmanager --list

Then install a system image, for example:

sdkmanager --install "system-images;android-29;default;x86"

Now you can create an emulator:

avdmanager create avd -n <name> -k "system-images;android-29;default;x86"

(Replace <name> with the name you want to give the emulator.)

See avdmanager for more infos.

Here’s a handy cheat sheet on GitHub.

You might get errors that “there is no space lift on device”. The error indicates that your /tmp folder is full: I am getting a no space left on device error.

Try clearing the folder or increase the available space in /tmp (instructions in link above).

Add the emulator path to your user paths, for example, in Bash:

# Android SDK
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools/
export PATH=$PATH:$ANDROID_HOME/tools/bin/
export PATH=$PATH:$ANDROID_HOME/tools/
PATH=$ANDROID_HOME/emulator:$PATH

(Adjust to your needs.)

For example, the error “PANIC: Missing emulator engine program for ‘x86’ CPUS.” indicates that the emulator program is not in your path.

Run Android Emulator (Standalone)

emulator @<name-of-the-generated-avd> &

The command starts the emulator in the background.

Run the Emulator via NativeScript

You can also run the emulator with the NativeScript CLI.

Inside your NativeScript project directory, run the following command in the terminal:

tns run android --bundle

Choose “local setup” and NativeScript should pick up the emulator.

Or, if you didn’t install the CLI globally, run this command:

npx nativescript run android --bundle

Further Reading