diff --git a/scripts/env-android.sh b/scripts/env-android.sh
index d918fd232b93c9638f15cc1b95aa687a5757c8cd..45aa21708f1344e4058c234b819b36b32da4fba3 100755
--- a/scripts/env-android.sh
+++ b/scripts/env-android.sh
@@ -14,11 +14,11 @@ if test -z "${CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL}"; then
 fi
 
 echo "Preparing Android environment:"
-echo " - using Android SDK: ${ANDROID_SDK_ROOT}"
-echo " - using Android SDK tools: ${ANDROID_SDK_TOOLS_ROOT}"
-echo " - using Gradle: ${GRADLE_HOME}"
-echo " - using Java: ${JAVA_HOME}"
-echo " - project dir: ${PROJECT_DIR}"
+echo "        Root: ${PROJECT_DIR}"
+echo "      NodeJS: version ${NODE_VERSION} with options: ${NODE_OPTIONS}"
+echo " Android SDK: ${ANDROID_SDK_ROOT} with CLI: ${ANDROID_SDK_CLI_ROOT}"
+echo "      Gradle: ${GRADLE_HOME} with options: ${GRADLE_OPTS}"
+echo "        Java: ${JAVA_HOME}"
 
 # Make sure javac exists
 JAVAC_PATH=$(which javac)
@@ -28,11 +28,10 @@ if test -z "${JAVAC_PATH}"; then
 fi
 
 # Prepare Android SDK tools
-if ! test -d "${ANDROID_SDK_TOOLS_ROOT}"; then
-  cd "${PROJECT_DIR}/scripts"
-  ./install-android-sdk-tools.sh
+if ! test -d "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}" || ! test -d "${ANDROID_SDK_CLI_ROOT}/tools/bin"; then
+  . ${PROJECT_DIR}/scripts/install-android-sdk.sh
   if test $? -ne 0; then
-    echo "ERROR: Unable to install Android SDK Tools"
+    echo "ERROR: Unable to install Android SDK Tools & CLI"
   fi
 fi
 
@@ -55,7 +54,6 @@ if test -z "$(which gradle)" && ! test -d "${GRADLE_HOME}"; then
   fi
 fi
 
-
 # Prepare Android platform
 if ! test -d "${PROJECT_DIR}/platforms/android"; then
   echo "Adding Cordova Android platform..."
@@ -78,6 +76,13 @@ else
   echo "No directory '${ANDROID_OVERWRITE_DIR}' not found. Please create it, with a file 'release-signing.properties' for release signing"
 fi
 
+echo
+echo "Check Requirements"
+cordova requirements android --verbose
+if test $? -ne 0; then
+  echo "ERROR: Check Cordova requirements failed"
+fi
+
 export PATH=${GRADLE_HOME}/bin:${PATH}
 
 echo "Android environment is ready!"
diff --git a/scripts/env-global.sh b/scripts/env-global.sh
index 495edb00065145fc1c845938cc750e12a201e33c..9614edf730e13ec5967e8dfb82a19b1bace9e509 100755
--- a/scripts/env-global.sh
+++ b/scripts/env-global.sh
@@ -21,13 +21,14 @@ REPO_API_URL="https://api.github.com/repos/${REPO}"
 REPO_PUBLIC_URL="https://github.com/${REPO}"
 
 NODEJS_VERSION=12
-
-ANDROID_NDK_VERSION=r19c
-ANDROID_SDK_VERSION=r29.0.2
-ANDROID_SDK_TOOLS_VERSION=4333796
-ANDROID_SDK_ROOT=/usr/lib/android-sdk
-ANDROID_ALTERNATIVE_SDK_ROOT="${HOME}/Android/Sdk"
-ANDROID_SDK_TOOLS_ROOT=${ANDROID_SDK_ROOT}/build-tools
+#NODE_OPTIONS=--max-old-space-size=4096
+
+ANDROID_NDK_VERSION=19.2.5345600
+ANDROID_SDK_VERSION=29.0.3
+ANDROID_SDK_CLI_VERSION=6858069
+ANDROID_SDK_ROOT="${HOME}/Android/Sdk"
+ANDROID_ALTERNATIVE_SDK_ROOT=/usr/lib/android-sdk
+ANDROID_SDK_CLI_ROOT=${ANDROID_SDK_ROOT}/cli
 ANDROID_OUTPUT_APK=${PROJECT_DIR}/platforms/android/app/build/outputs/apk
 ANDROID_OUTPUT_APK_DEBUG=${ANDROID_OUTPUT_APK}/debug
 ANDROID_OUTPUT_APK_RELEASE=${ANDROID_OUTPUT_APK}/release
@@ -44,6 +45,7 @@ WEB_EXT_ID="{6f9922f7-a054-4609-94ce-d269993246a5}"
 GRADLE_VERSION=6.5.1
 GRADLE_HOME=${HOME}/.gradle/${GRADLE_VERSION}
 CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL=https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-all.zip
+GRADLE_OPTS=-Dorg.gradle.jvmargs=-Xmx512m
 
 # Override with a local file, if any
 if test -f "${PROJECT_DIR}/.local/env.sh"; then
@@ -84,14 +86,14 @@ if test -z "${ANDROID_SDK_ROOT}" || ! test -d "${ANDROID_SDK_ROOT}"; then
 fi
 
 # Add Java, Android SDK tools to path
-PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}/bin$:$PATH
+PATH=${ANDROID_SDK_CLI_ROOT}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}/bin$:$PATH
 
 # Export useful variables
 export PATH \
   PROJECT_DIR \
   JAVA_HOME \
   ANDROID_SDK_ROOT \
-  ANDROID_SDK_TOOLS_ROOT \
+  ANDROID_SDK_CLI_ROOT \
   CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL
 
 
@@ -151,9 +153,14 @@ if ! test -d "${PROJECT_DIR}/platforms/android" || ! test -d "${PROJECT_DIR}/dis
 fi
 
 
-export PROJECT_DIR PROJECT_NAME REPO REPO_API_URL REPO_PUBLIC_URL NODEJS_VERSION \
-  ANDROID_NDK_VERSION ANDROID_SDK_VERSION ANDROID_SDK_TOOLS_VERSION ANDROID_SDK_ROOT ANDROID_ALTERNATIVE_SDK_ROOT \
-  ANDROID_SDK_TOOLS_ROOT ANDROID_OUTPUT_APK ANDROID_OUTPUT_APK_DEBUG ANDROID_OUTPUT_APK_RELEASE DIST_WEB \
-  DIST_ANDROID WEB_EXT_ID
+export PATH \
+  PROJECT_DIR PROJECT_NAME \
+  REPO REPO_API_URL REPO_PUBLIC_URL \
+  NODEJS_VERSION \
+  ANDROID_NDK_VERSION ANDROID_SDK_VERSION ANDROID_SDK_CLI_VERSION ANDROID_SDK_ROOT ANDROID_ALTERNATIVE_SDK_ROOT \
+  ANDROID_SDK_CLI_ROOT ANDROID_OUTPUT_APK ANDROID_OUTPUT_APK_DEBUG ANDROID_OUTPUT_APK_RELEASE \
+  GRADLE_HOME GRADLE_OPTS \
+  DIST_WEB DIST_ANDROID \
+  WEB_EXT_ID
 
 echo "Project environment is ready!"
diff --git a/scripts/install-android-sdk-tools.sh b/scripts/install-android-sdk.sh
similarity index 54%
rename from scripts/install-android-sdk-tools.sh
rename to scripts/install-android-sdk.sh
index cc9ee954ef6f8a2594e77f36950f2ec75a828e0e..a7de3f5ff8d4c14a78c186726c070a70a57d8461 100755
--- a/scripts/install-android-sdk-tools.sh
+++ b/scripts/install-android-sdk.sh
@@ -8,28 +8,33 @@ if [[ "_" == "_${ANDROID_SDK_ROOT}" ]]; then
   echo "Please set env variable ANDROID_SDK_ROOT"
   exit 1
 fi
-if [[ "_" == "_${ANDROID_SDK_TOOLS_ROOT}" ]]; then
-  echo "Please set env variable ANDROID_SDK_TOOLS_ROOT"
+if [[ "_" == "_${ANDROID_SDK_CLI_ROOT}" ]]; then
+  echo "Please set env variable ANDROID_SDK_CLI_ROOT"
   exit 1
 fi
 
-if [[ ! -d "${ANDROID_SDK_TOOLS_ROOT}/bin" ]]; then
-  echo "Installing Android SDK tools... ${ANDROID_SDK_TOOLS_ROOT}"
-  test -e "sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip" || wget -kL https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip
-  # Get parent folder
-  ANDROID_SDK_TOOLS_PARENT=$(dirname $ANDROID_SDK_ROOT)
-  test -e "${ANDROID_SDK_TOOLS_PARENT}" || mkdir -p "${ANDROID_SDK_TOOLS_PARENT}"
-  test -e "${ANDROID_SDK_TOOLS_ROOT}" || unzip -qq sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip -d "${ANDROID_SDK_TOOLS_PARENT}"
-  test -e "${ANDROID_SDK_TOOLS_ROOT}" && rm "sdk-tools-linux-${ANDROID_SDK_TOOLS_VERSION}.zip"
+if [[ ! -d "${ANDROID_SDK_CLI_ROOT}/tools/bin" ]]; then
+  echo "Installing Android SDK CLI... ${ANDROID_SDK_CLI_ROOT}"
+  ANDROID_SDK_CLI_FILE="commandlinetools-linux-${ANDROID_SDK_CLI_VERSION}_latest.zip"
+  test -e "${ANDROID_SDK_CLI_FILE}" || wget -kL https://dl.google.com/android/repository/${ANDROID_SDK_CLI_FILE}
+  test -e "${ANDROID_SDK_CLI_ROOT}" || sudo mkdir -p "${ANDROID_SDK_CLI_ROOT}"
+  test -e "${ANDROID_SDK_CLI_ROOT}" && sudo unzip -qq ${ANDROID_SDK_CLI_FILE} -d "${ANDROID_SDK_CLI_ROOT}"
+  test -e "${ANDROID_SDK_CLI_ROOT}" && sudo rm "${ANDROID_SDK_CLI_FILE}"
 fi
 
-export PATH=${ANDROID_SDK_TOOLS_ROOT}/bin:$PATH
+if [[ ! -d "${ANDROID_SDK_CLI_ROOT}/tools/bin" ]]; then
+  echo "Failed to install Android SDK CLI tools. If you are not root, try with \`sudo -E ./install-android-sdk-tools.sh\`"
+  exit 1
+fi
+
+# Add SDK CLI and Java to path
+export PATH=${ANDROID_SDK_CLI_ROOT}/tools/bin:$PATH
 
 mkdir -p ${ANDROID_SDK_ROOT}/licenses
 echo 8933bad161af4178b1185d1a37fbf41ea5269c55 > ${ANDROID_SDK_ROOT}/licenses/android-sdk-license
 echo 601085b94cd77f0b54ff86406957099ebe79c4d6 > ${ANDROID_SDK_ROOT}/licenses/android-googletv-license
 echo 33b6a2b64607f11b759f320ef9dff4ae5c47d97a > ${ANDROID_SDK_ROOT}/licenses/google-gdk-license
-yes | sdkmanager --licenses
+yes | sdkmanager --licenses "--sdk_root=${ANDROID_SDK_ROOT}"
 
 mkdir -p ~/.android
 touch ~/.android/repositories.cfg
@@ -39,14 +44,12 @@ echo y | sdkmanager "extras;android;m2repository" "--sdk_root=${ANDROID_SDK_ROOT
 echo y | sdkmanager "extras;google;m2repository" "--sdk_root=${ANDROID_SDK_ROOT}" | tee -a sdkmanager.log
 
 # Install build tools
-echo y | sdkmanager "build-tools;23.0.2" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
-echo y | sdkmanager "build-tools;23.0.3" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
-echo y | sdkmanager "build-tools;25.0.2" --sdk_root=${ANDROID_SDK_ROOT}  | tee -a sdkmanager.log
-echo y | sdkmanager "build-tools;27.0.3" --sdk_root=${ANDROID_SDK_ROOT}  | tee -a sdkmanager.log
-echo y | sdkmanager "build-tools;28.0.3" --sdk_root=${ANDROID_SDK_ROOT}  | tee -a sdkmanager.log
-echo y | sdkmanager "build-tools;29.0.2" --sdk_root=${ANDROID_SDK_ROOT}  | tee -a sdkmanager.log
+echo "Installing Android build-tools..."
+echo y | sdkmanager "build-tools;${ANDROID_SDK_VERSION}" --sdk_root=${ANDROID_SDK_ROOT}  | tee -a sdkmanager.log
+[[ $? -ne 0 ]] && exit 1
 
 # Install platforms
+echo "Installing Android target platforms..."
 echo y | sdkmanager "platforms;android-16" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
 echo y | sdkmanager "platforms;android-21" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
 echo y | sdkmanager "platforms;android-23" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
@@ -55,3 +58,9 @@ echo y | sdkmanager "platforms;android-25" --sdk_root=${ANDROID_SDK_ROOT} | tee
 echo y | sdkmanager "platforms;android-27" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
 echo y | sdkmanager "platforms;android-28" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
 echo y | sdkmanager "platforms;android-29" --sdk_root=${ANDROID_SDK_ROOT} | tee -a sdkmanager.log
+[[ $? -ne 0 ]] && exit 1
+
+# Install NDK
+echo "Installing Android NDK..."
+sdkmanager "ndk;22.0.7026061" --sdk_root=${ANDROID_SDK_ROOT}
+sdkmanager "ndk;${ANDROID_NDK_VERSION}" --sdk_root=${ANDROID_SDK_ROOT}
diff --git a/scripts/release-android-sign.sh b/scripts/release-android-sign.sh
index dce529aaf7dfc7ec44b3f47baf816987bfc3d55d..1bccacbca79fe89abe68b70d2ebdb30129d47eac 100755
--- a/scripts/release-android-sign.sh
+++ b/scripts/release-android-sign.sh
@@ -44,7 +44,7 @@ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ${KEYSTORE_FILE
 [[ $? -ne 0 ]] && exit 1
 echo "Executing jarsigner [OK]"
 
-BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/28.*/"
+BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/${ANDROID_SDK_VERSION}/"
 cd ${BUILD_TOOLS_DIR}
 
 echo "Executing zipalign..."
diff --git a/scripts/release.sh b/scripts/release.sh
index 78fead628648d63f2565bef42f58dd2922ff2c83..4244ae6defbde8e19685713504697526b1951b7e 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -77,9 +77,7 @@ esac
 
 # Preparing the environment
 . ${PROJECT_DIR}/scripts/env-global.sh
-if [[ $? -ne 0 ]]; then
-  exit 1
-fi
+[[ $? -ne 0 ]] && exit 1
 
 
 echo "----------------------------------"
@@ -101,7 +99,7 @@ rm -rf ${ANDROID_OUTPUT_APK_RELEASE}/*.apk || exit 1
 [[ $? -ne 0 ]] && exit 1
 
 APK_RELEASE_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release.apk"
-  APK_RELEASE_UNSIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk"
+APK_RELEASE_UNSIGNED_FILE="${ANDROID_OUTPUT_APK_RELEASE}/app-release-unsigned.apk"
 if [[ ! -f "${APK_RELEASE_FILE}" ]]; then
   if [[ ! -f "${APK_RELEASE_UNSIGNED_FILE}" ]]; then
     echo "ERROR: Missing android artifact at ${APK_RELEASE_FILE}"