Skip to content

Instantly share code, notes, and snippets.

@a9y
Created June 5, 2018 21:57
Show Gist options
  • Save a9y/1e56ee17165f3ec8144ea4e8838be303 to your computer and use it in GitHub Desktop.
Save a9y/1e56ee17165f3ec8144ea4e8838be303 to your computer and use it in GitHub Desktop.
Install a clean environment to test a cordova build.
#!/bin/bash
error() {
echo "error: $@" 1>&2
exit 1
}
for x in realpath dirname tar unzip wget npm; do
[[ -z "$(which "$x" 2>/dev/null)" ]] && error "missing required application: $x"
done
download() {
local sdk_tools_url='https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip'
local jdk_url='http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz'
echo ':: Downloading...'
echo
mkdir tmp
wget -O tmp/sdk.zip "$sdk_tools_url" || error 'failed to download android sdk'
wget -O tmp/jdk.tar.gz --header='Cookie: oraclelicense=a' "$jdk_url" || error 'failed to download java jdk'
echo ':: Extracting...'
echo
mkdir env
unzip -d env/sdk tmp/sdk.zip
tar -xf tmp/jdk.tar.gz -C env || error 'could not extract jdk'
mv 'env/jdk1.8.0_172' env/jdk
rm -rf tmp
}
download_android() {
echo ':: Downloading Android SDK...'
echo
# Remember to accept licenses by pressing 'y'
sdkmanager 'build-tools;27.0.3' 'platforms;android-27' || error 'sdkmanager failed to download packages'
}
setup_npm() {
mkdir -p "$NPM_PREFIX/bin" 2>/dev/null
mkdir -p "$(dirname "$NPM_CONFIG_USERCONFIG")" 2>/dev/null
echo "prefix=$NPM_PREFIX" > "$NPM_CONFIG_USERCONFIG"
}
download_cordova() {
echo ':: Downloading cordova...'
echo
npm install -g cordova || error 'failed to install cordova'
}
workspace_root="$(realpath ~/cordova-demo)"
[[ -z "$workspace_root" ]] && error 'invalid workspace directory'
echo ":: Workspace=$workspace_root"
echo
[[ -d "$workspace_root" ]] || mkdir -p "$workspace_root"
cd "$workspace_root" || error 'could not change to workspace directory'
[[ -d env ]] || download
export ANDROID_SDK="$workspace_root/env/sdk"
export ANDROID_HOME="$ANDROID_SDK"
export JDK_HOME="$workspace_root/env/jdk"
export JAVA_HOME="$JDK_HOME"
export GRADLE_USER_HOME="$workspace_root/conf/gradle"
export NPM_CONFIG_USERCONFIG="$workspace_root/conf/npmrc"
export NPM_PREFIX="$workspace_root/env/npm"
export PATH="$JDK_HOME/bin:$ANDROID_HOME/tools/bin:$NPM_PREFIX/bin:$PATH"
[[ -d "$GRADLE_USERHOME" ]] || mkdir -p "$GRADLE_USER_HOME"
[[ -d env/sdk/platforms ]] || download_android
[[ -f "$NPM_CONFIG_USERCONFIG" ]] || setup_npm
[[ -x "$NPM_PREFIX/bin/cordova" ]] || download_cordova
if [[ ! -d "$workspace_root/project" ]]; then
echo ':: Creating project...'
echo
cordova create "$workspace_root/project" com.example.demo DemoApp || error 'failed to create cordova project'
cd "$workspace_root/project" || error 'could not change to project directory'
cordova platform add android || error 'failed to add android platform to project'
cordova plugin add phonegap-plugin-barcodescanner || error 'failed to add barcodescanner plugin to project'
fi
cd "$workspace_root/project" || error 'could not change to project directory'
echo ':: Building project...'
echo
cordova "${1:-build}" android || error 'failed to build cordova project'
@a9y
Copy link
Author

a9y commented Jun 5, 2018

Pass along run as an argument to launch the android demo, otherwise it just builds.

It requires user interaction during the Android license stage. Just press y and then enter.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment