From: Hans-Christoph Steiner Date: Fri, 30 May 2014 01:43:16 +0000 (-0400) Subject: add more SDK checks: build-tools/19.0.3 and presense of aapt X-Git-Tag: 0.2~42^2~14 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=6ca060e10d6ef6df4408dc71ac42c63e3144a40b;p=fdroidserver.git add more SDK checks: build-tools/19.0.3 and presense of aapt Make sure that fdroid can find aapt in the current config, otherwise exit with an error. Some users don't have build_tools set, and their SDK does not include the build-tools in the default versioned dir, so this should warn them of what is wrong. --- diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 9854cd32..a5e9bd09 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -144,6 +144,23 @@ def test_sdk_exists(c): return True +def test_build_tools_exists(c): + if not test_sdk_exists(c): + return False + build_tools = os.path.join(c['sdk_path'], 'build-tools') + versioned_build_tools = os.path.join(build_tools, c['build_tools']) + if not os.path.isdir(versioned_build_tools): + logging.critical('Android Build Tools path "' + + versioned_build_tools + '" does not exist!') + return False + if not os.path.exists(os.path.join(c['sdk_path'], 'build-tools', c['build_tools'], 'aapt')): + logging.critical('Android Build Tools "' + + versioned_build_tools + + '" does not contain "aapt"!') + return False + return True + + def write_password_file(pwtype, password=None): ''' writes out passwords to a protected file instead of passing passwords as diff --git a/fdroidserver/init.py b/fdroidserver/init.py index ace07bf8..c51b6e59 100644 --- a/fdroidserver/init.py +++ b/fdroidserver/init.py @@ -155,18 +155,15 @@ def main(): logging.info('Try running `fdroid init` in an empty directory.') sys.exit() - # now that we have a local config.py, read configuration... - config = common.read_config(options) - # try to find a working aapt, in all the recent possible paths - build_tools = os.path.join(config['sdk_path'], 'build-tools') + build_tools = os.path.join(test_config['sdk_path'], 'build-tools') aaptdirs = [] - aaptdirs.append(os.path.join(build_tools, config['build_tools'])) + aaptdirs.append(os.path.join(build_tools, test_config['build_tools'])) aaptdirs.append(build_tools) - for f in sorted(os.listdir(build_tools), reverse=True): + for f in os.listdir(build_tools): if os.path.isdir(os.path.join(build_tools, f)): aaptdirs.append(os.path.join(build_tools, f)) - for d in aaptdirs: + for d in sorted(aaptdirs, reverse=True): if os.path.isfile(os.path.join(d, 'aapt')): aapt = os.path.join(d, 'aapt') break @@ -174,9 +171,15 @@ def main(): dirname = os.path.basename(os.path.dirname(aapt)) if dirname == 'build-tools': # this is the old layout, before versioned build-tools - write_to_config('build_tools', '') + test_config['build_tools'] = '' else: - write_to_config('build_tools', dirname) + test_config['build_tools'] = dirname + write_to_config('build_tools', test_config['build_tools']) + if not common.test_build_tools_exists(test_config): + sys.exit(3) + + # now that we have a local config.py, read configuration... + config = common.read_config(options) # track down where the Android NDK is ndk_path = '/opt/android-ndk' diff --git a/tests/run-tests b/tests/run-tests index 2d0ad5cd..f3e9a3e7 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -3,6 +3,11 @@ set -e set -x +echo_header() { + echo "==============================================================================" + echo $1 +} + copy_apks_into_repo() { for f in `ls -1 ../../*/bin/*.apk`; do name=$(basename $(dirname `dirname $f`)) @@ -40,7 +45,7 @@ if [ -z $fdroid ]; then fi #------------------------------------------------------------------------------# -echo "setup a new repo from scratch using ANDROID_HOME" +echo_header "setup a new repo from scratch using ANDROID_HOME" REPOROOT=`create_test_dir` cd $REPOROOT @@ -76,7 +81,33 @@ set -e #------------------------------------------------------------------------------# -echo "check that --android-home overrides ANDROID_HOME" +echo_header "check that fake android home passes `fdroid init`" + +REPOROOT=`create_test_dir` +FAKE_ANDROID_HOME=`create_test_dir` +create_fake_android_home $FAKE_ANDROID_HOME +KEYSTORE=$REPOROOT/keystore.jks +cd $REPOROOT +$fdroid init --keystore $KEYSTORE --android-home $FAKE_ANDROID_HOME + + +#------------------------------------------------------------------------------# +echo_header "check that 'fdroid init' fails when build-tools cannot be found" + +REPOROOT=`create_test_dir` +FAKE_ANDROID_HOME=`create_test_dir` +create_fake_android_home $FAKE_ANDROID_HOME +rm -f $FAKE_ANDROID_HOME/build-tools/*/aapt +KEYSTORE=$REPOROOT/keystore.jks +cd $REPOROOT +set +e +$fdroid init --keystore $KEYSTORE --android-home $FAKE_ANDROID_HOME +[ $? -eq 0 ] && exit 1 +set -e + + +#------------------------------------------------------------------------------# +echo_header "check that --android-home overrides ANDROID_HOME" REPOROOT=`create_test_dir` FAKE_ANDROID_HOME=`create_test_dir` @@ -94,7 +125,7 @@ set -e #------------------------------------------------------------------------------# -echo "setup a new repo from scratch with keystore and android-home set on cmd line" +echo_header "setup a new repo from scratch with keystore and android-home set on cmd line" REPOROOT=`create_test_dir` KEYSTORE=$REPOROOT/keystore.jks @@ -115,7 +146,7 @@ export ANDROID_HOME=$STORED_ANDROID_HOME #------------------------------------------------------------------------------# -echo "setup new repo from scratch using ANDROID_HOME, putting APKs in repo first" +echo_header "setup new repo from scratch using ANDROID_HOME, putting APKs in repo first" REPOROOT=`create_test_dir` cd $REPOROOT @@ -127,7 +158,7 @@ $fdroid update #------------------------------------------------------------------------------# -echo "setup a new repo from scratch and generate a keystore" +echo_header "setup a new repo from scratch and generate a keystore" REPOROOT=`create_test_dir` KEYSTORE=$REPOROOT/keystore.jks @@ -142,7 +173,7 @@ test -e repo/index.jar #------------------------------------------------------------------------------# -echo "setup a new repo from scratch with a HSM/smartcard" +echo_header "setup a new repo from scratch with a HSM/smartcard" REPOROOT=`create_test_dir` cd $REPOROOT