| /* |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| */ |
| |
| import java.util.regex.Pattern |
| |
| String getProjectTarget(String defaultTarget) { |
| def manifestFile = file("project.properties") |
| def pattern = Pattern.compile("target\\s*=\\s*(.*)") |
| def matcher = pattern.matcher(manifestFile.getText()) |
| if (matcher.find()) { |
| matcher.group(1) |
| } else { |
| defaultTarget |
| } |
| } |
| |
| String[] getAvailableBuildTools() { |
| def buildToolsDir = new File(getAndroidSdkDir(), "build-tools") |
| buildToolsDir.list() |
| .findAll { it ==~ /[0-9.]+/ } |
| .sort { a, b -> compareVersions(b, a) } |
| } |
| |
| String latestBuildToolsAvailable(String minBuildToolsVersion) { |
| def availableBuildToolsVersions |
| try { |
| availableBuildToolsVersions = getAvailableBuildTools() |
| } catch (e) { |
| println "An exception occurred while trying to find the Android build tools." |
| throw e |
| } |
| if (availableBuildToolsVersions.length > 0) { |
| def highestBuildToolsVersion = availableBuildToolsVersions[0] |
| if (compareVersions(highestBuildToolsVersion, minBuildToolsVersion) < 0) { |
| throw new RuntimeException( |
| "No usable Android build tools found. Highest installed version is " + |
| highestBuildToolsVersion + "; minimum version required is " + |
| minBuildToolsVersion + ".") |
| } |
| highestBuildToolsVersion |
| } else { |
| throw new RuntimeException( |
| "No installed build tools found. Please install the Android build tools version " + |
| minBuildToolsVersion + " or higher.") |
| } |
| } |
| |
| // Return the first non-zero result of subtracting version list elements |
| // pairwise. If they are all identical, return the difference in length of |
| // the two lists. |
| int compareVersionList(Collection aParts, Collection bParts) { |
| def pairs = ([aParts, bParts]).transpose() |
| pairs.findResult(aParts.size()-bParts.size()) {it[0] - it[1] != 0 ? it[0] - it[1] : null} |
| } |
| |
| // Compare two version strings, such as "19.0.0" and "18.1.1.0". If all matched |
| // elements are identical, the longer version is the largest by this method. |
| // Examples: |
| // "19.0.0" > "19" |
| // "19.0.1" > "19.0.0" |
| // "19.1.0" > "19.0.1" |
| // "19" > "18.999.999" |
| int compareVersions(String a, String b) { |
| def aParts = a.tokenize('.').collect {it.toInteger()} |
| def bParts = b.tokenize('.').collect {it.toInteger()} |
| compareVersionList(aParts, bParts) |
| } |
| |
| String getAndroidSdkDir() { |
| def rootDir = project.rootDir |
| def androidSdkDir = null |
| String envVar = System.getenv("ANDROID_HOME") |
| def localProperties = new File(rootDir, 'local.properties') |
| String systemProperty = System.getProperty("android.home") |
| if (envVar != null) { |
| androidSdkDir = envVar |
| } else if (localProperties.exists()) { |
| Properties properties = new Properties() |
| localProperties.withInputStream { instr -> |
| properties.load(instr) |
| } |
| def sdkDirProp = properties.getProperty('sdk.dir') |
| if (sdkDirProp != null) { |
| androidSdkDir = sdkDirProp |
| } else { |
| sdkDirProp = properties.getProperty('android.dir') |
| if (sdkDirProp != null) { |
| androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath() |
| } |
| } |
| } |
| if (androidSdkDir == null && systemProperty != null) { |
| androidSdkDir = systemProperty |
| } |
| if (androidSdkDir == null) { |
| throw new RuntimeException( |
| "Unable to determine Android SDK directory.") |
| } |
| androidSdkDir |
| } |
| |
| cordovaSdkVersion = getProjectTarget("android-19") |
| cordovaBuildToolsVersion = latestBuildToolsAvailable("19.1.0") |
| |