mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 23:42:53 +08:00
121 lines
4.4 KiB
Groovy
121 lines
4.4 KiB
Groovy
/*
|
|
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 = System.env.MIN_SDK_VERSION ?: getProjectTarget("android-19")
|
|
cordovaBuildToolsVersion = latestBuildToolsAvailable("19.1.0")
|
|
|