2017-04-05 06:18:46 +08:00
/ *
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 .
* /
apply plugin: 'com.android.application'
buildscript {
repositories {
mavenCentral ( )
2018-09-26 15:29:31 +08:00
google ( )
2018-06-12 05:12:58 +08:00
jcenter ( )
2017-04-05 06:18:46 +08:00
}
dependencies {
2020-01-16 07:40:54 +08:00
apply from: '../CordovaLib/cordova.gradle'
2019-02-10 08:35:46 +08:00
classpath 'com.android.tools.build:gradle:3.3.0'
2020-01-16 07:40:54 +08:00
if ( cdvHelpers . getConfigPreference ( 'GoogleServicesEnabled' , 'false' ) . toBoolean ( ) ) {
String defaultGoogleServiceVersion = '4.2.0'
/ * *
* Fetches the user ' s defined Google Services Plugin Version from config . xml .
* If the version is not set or invalid , it will default to the $ { defaultGoogleServiceVersion }
* /
String googleServicesVersion = cdvHelpers . getConfigPreference ( 'GoogleServicesVersion' , defaultGoogleServiceVersion )
if ( ! cdvHelpers . isVersionValid ( googleServicesVersion ) ) {
println ( "The defined Google Services plugin version (${googleServicesVersion}) does not appear to be a valid version. Falling back to version: ${defaultGoogleServiceVersion}." )
googleServicesVersion = defaultGoogleServiceVersion
}
// Create the Google Services classpath and set it.
String googleServicesClassPath = "com.google.gms:google-services:${googleServicesVersion}"
println "Adding classpath: ${googleServicesClassPath}"
classpath googleServicesClassPath
}
2017-04-05 06:18:46 +08:00
}
}
// Allow plugins to declare Maven dependencies via build-extras.gradle.
allprojects {
repositories {
2018-09-26 15:29:31 +08:00
mavenCentral ( )
2017-04-05 06:18:46 +08:00
jcenter ( )
}
}
task wrapper ( type: Wrapper ) {
2019-02-10 08:35:46 +08:00
gradleVersion = '4.10.3'
2017-04-05 06:18:46 +08:00
}
// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
ext {
2017-06-14 02:58:00 +08:00
apply from: '../CordovaLib/cordova.gradle'
2018-09-26 15:29:31 +08:00
2017-04-05 06:18:46 +08:00
// The value for android.compileSdkVersion.
if ( ! project . hasProperty ( 'cdvCompileSdkVersion' ) ) {
cdvCompileSdkVersion = null ;
}
// The value for android.buildToolsVersion.
if ( ! project . hasProperty ( 'cdvBuildToolsVersion' ) ) {
cdvBuildToolsVersion = null ;
}
// Sets the versionCode to the given value.
if ( ! project . hasProperty ( 'cdvVersionCode' ) ) {
cdvVersionCode = null
}
// Sets the minSdkVersion to the given value.
if ( ! project . hasProperty ( 'cdvMinSdkVersion' ) ) {
cdvMinSdkVersion = null
}
2019-04-06 12:28:25 +08:00
// Sets the maxSdkVersion to the given value.
if ( ! project . hasProperty ( 'cdvMaxSdkVersion' ) ) {
cdvMaxSdkVersion = null
}
// The value for android.targetSdkVersion.
if ( ! project . hasProperty ( 'cdvTargetSdkVersion' ) ) {
cdvTargetSdkVersion = null ;
}
2017-04-05 06:18:46 +08:00
// Whether to build architecture-specific APKs.
if ( ! project . hasProperty ( 'cdvBuildMultipleApks' ) ) {
cdvBuildMultipleApks = null
}
2018-09-12 18:04:00 +08:00
// Whether to append a 0 "abi digit" to versionCode when only a single APK is build
2017-11-28 06:10:59 +08:00
if ( ! project . hasProperty ( 'cdvVersionCodeForceAbiDigit' ) ) {
cdvVersionCodeForceAbiDigit = null
}
2017-04-05 06:18:46 +08:00
// .properties files to use for release signing.
if ( ! project . hasProperty ( 'cdvReleaseSigningPropertiesFile' ) ) {
cdvReleaseSigningPropertiesFile = null
}
// .properties files to use for debug signing.
if ( ! project . hasProperty ( 'cdvDebugSigningPropertiesFile' ) ) {
cdvDebugSigningPropertiesFile = null
}
// Set by build.js script.
if ( ! project . hasProperty ( 'cdvBuildArch' ) ) {
cdvBuildArch = null
}
// Plugin gradle extensions can append to this to have code run at the end.
cdvPluginPostBuildExtras = [ ]
}
// PLUGIN GRADLE EXTENSIONS START
// PLUGIN GRADLE EXTENSIONS END
2018-11-14 21:00:36 +08:00
def hasBuildExtras1 = file ( 'build-extras.gradle' ) . exists ( )
if ( hasBuildExtras1 ) {
2017-04-05 06:18:46 +08:00
apply from: 'build-extras.gradle'
}
2018-11-14 21:00:36 +08:00
def hasBuildExtras2 = file ( '../build-extras.gradle' ) . exists ( )
if ( hasBuildExtras2 ) {
apply from: '../build-extras.gradle'
}
2017-04-05 06:18:46 +08:00
// Set property defaults after extension .gradle files.
2019-04-06 12:28:25 +08:00
ext . cdvCompileSdkVersion = cdvCompileSdkVersion = = null ? (
defaultCompileSdkVersion = = null
? privateHelpers . getProjectTarget ( )
: defaultCompileSdkVersion
) : Integer . parseInt ( '' + cdvCompileSdkVersion ) ;
2017-04-05 06:18:46 +08:00
if ( ext . cdvBuildToolsVersion = = null ) {
2017-06-14 01:36:00 +08:00
ext . cdvBuildToolsVersion = privateHelpers . findLatestInstalledBuildTools ( )
//ext.cdvBuildToolsVersion = project.ext.defaultBuildToolsVersion
2017-04-05 06:18:46 +08:00
}
2017-11-30 02:56:05 +08:00
if ( ext . cdvDebugSigningPropertiesFile = = null & & file ( '../debug-signing.properties' ) . exists ( ) ) {
ext . cdvDebugSigningPropertiesFile = '../debug-signing.properties'
2017-04-05 06:18:46 +08:00
}
2017-11-30 02:56:05 +08:00
if ( ext . cdvReleaseSigningPropertiesFile = = null & & file ( '../release-signing.properties' ) . exists ( ) ) {
ext . cdvReleaseSigningPropertiesFile = '../release-signing.properties'
2017-04-05 06:18:46 +08:00
}
// Cast to appropriate types.
ext . cdvBuildMultipleApks = cdvBuildMultipleApks = = null ? false : cdvBuildMultipleApks . toBoolean ( ) ;
2017-11-28 06:10:59 +08:00
ext . cdvVersionCodeForceAbiDigit = cdvVersionCodeForceAbiDigit = = null ? false : cdvVersionCodeForceAbiDigit . toBoolean ( ) ;
2019-04-06 12:28:25 +08:00
// minSdkVersion, maxSdkVersion and targetSdkVersion
2018-11-14 13:18:53 +08:00
ext . cdvMinSdkVersion = cdvMinSdkVersion = = null ? defaultMinSdkVersion : Integer . parseInt ( '' + cdvMinSdkVersion )
2019-04-06 12:28:25 +08:00
if ( cdvMaxSdkVersion ! = null ) {
ext . cdvMaxSdkVersion = Integer . parseInt ( '' + cdvMaxSdkVersion )
}
ext . cdvTargetSdkVersion = cdvTargetSdkVersion = = null ? defaultTargetSdkVersion : Integer . parseInt ( '' + cdvTargetSdkVersion )
2017-04-05 06:18:46 +08:00
ext . cdvVersionCode = cdvVersionCode = = null ? null : Integer . parseInt ( '' + cdvVersionCode )
def computeBuildTargetName ( debugBuild ) {
def ret = 'assemble'
if ( cdvBuildMultipleApks & & cdvBuildArch ) {
def arch = cdvBuildArch = = 'arm' ? 'armv7' : cdvBuildArch
ret + = '' + arch . toUpperCase ( ) . charAt ( 0 ) + arch . substring ( 1 ) ;
}
return ret + ( debugBuild ? 'Debug' : 'Release' )
}
// Make cdvBuild a task that depends on the debug/arch-sepecific task.
task cdvBuildDebug
cdvBuildDebug . dependsOn {
return computeBuildTargetName ( true )
}
task cdvBuildRelease
cdvBuildRelease . dependsOn {
return computeBuildTargetName ( false )
}
2018-09-26 15:29:31 +08:00
task cdvPrintProps {
doLast {
println ( 'cdvCompileSdkVersion=' + cdvCompileSdkVersion )
println ( 'cdvBuildToolsVersion=' + cdvBuildToolsVersion )
println ( 'cdvVersionCode=' + cdvVersionCode )
println ( 'cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit )
println ( 'cdvMinSdkVersion=' + cdvMinSdkVersion )
2019-04-06 12:28:25 +08:00
println ( 'cdvMaxSdkVersion=' + cdvMaxSdkVersion )
println ( 'cdvTargetSdkVersion=' + cdvTargetSdkVersion )
2018-09-26 15:29:31 +08:00
println ( 'cdvBuildMultipleApks=' + cdvBuildMultipleApks )
println ( 'cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile )
println ( 'cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile )
println ( 'cdvBuildArch=' + cdvBuildArch )
println ( 'computedVersionCode=' + android . defaultConfig . versionCode )
android . productFlavors . each { flavor - >
println ( 'computed' + flavor . name . capitalize ( ) + 'VersionCode=' + flavor . versionCode )
}
2017-04-05 06:18:46 +08:00
}
}
android {
defaultConfig {
versionCode cdvVersionCode ? : new BigInteger ( "" + privateHelpers . extractIntFromManifest ( "versionCode" ) )
applicationId privateHelpers . extractStringFromManifest ( "package" )
if ( cdvMinSdkVersion ! = null ) {
minSdkVersion cdvMinSdkVersion
}
2019-04-06 12:28:25 +08:00
if ( cdvMaxSdkVersion ! = null ) {
maxSdkVersion cdvMaxSdkVersion
}
if ( cdvTargetSdkVersion ! = null ) {
targetSdkVersion cdvTargetSdkVersion
}
2017-04-05 06:18:46 +08:00
}
lintOptions {
abortOnError false ;
}
compileSdkVersion cdvCompileSdkVersion
buildToolsVersion cdvBuildToolsVersion
2018-09-12 19:52:11 +08:00
// This code exists for Crosswalk and other Native APIs.
// By default, we multiply the existing version code in the
// Android Manifest by 10 and add a number for each architecture.
// If you are not using Crosswalk or SQLite, you can
// ignore this chunk of code, and your version codes will be respected.
2017-04-05 06:18:46 +08:00
if ( Boolean . valueOf ( cdvBuildMultipleApks ) ) {
2017-11-21 10:21:49 +08:00
flavorDimensions "default"
2017-04-05 06:18:46 +08:00
productFlavors {
2017-11-28 03:42:25 +08:00
armeabi {
versionCode defaultConfig . versionCode * 10 + 1
ndk {
abiFilters = [ "armeabi" ]
}
}
2017-04-05 06:18:46 +08:00
armv7 {
versionCode defaultConfig . versionCode * 10 + 2
ndk {
2017-11-28 03:42:25 +08:00
abiFilters = [ "armeabi-v7a" ]
}
}
arm64 {
versionCode defaultConfig . versionCode * 10 + 3
ndk {
abiFilters = [ "arm64-v8a" ]
2017-04-05 06:18:46 +08:00
}
}
x86 {
versionCode defaultConfig . versionCode * 10 + 4
ndk {
2017-11-28 03:42:25 +08:00
abiFilters = [ "x86" ]
2017-04-05 06:18:46 +08:00
}
}
2017-11-28 03:42:25 +08:00
x86_64 {
versionCode defaultConfig . versionCode * 10 + 5
2017-04-05 06:18:46 +08:00
ndk {
2017-11-28 03:42:25 +08:00
abiFilters = [ "x86_64" ]
2017-04-05 06:18:46 +08:00
}
}
}
2017-11-28 06:10:59 +08:00
} else if ( Boolean . valueOf ( cdvVersionCodeForceAbiDigit ) ) {
// This provides compatibility to the default logic for versionCode before cordova-android 5.2.0
defaultConfig {
versionCode defaultConfig . versionCode * 10
}
2017-04-05 06:18:46 +08:00
}
compileOptions {
2017-11-16 03:39:32 +08:00
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
2017-04-05 06:18:46 +08:00
}
if ( cdvReleaseSigningPropertiesFile ) {
signingConfigs {
release {
2017-11-29 06:59:50 +08:00
// These must be set or Gradle will complain (even if they are overridden).
keyAlias = ""
2017-04-05 06:18:46 +08:00
keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
storeFile = null
storePassword = "__unset"
}
}
buildTypes {
release {
signingConfig signingConfigs . release
}
}
addSigningProps ( cdvReleaseSigningPropertiesFile , signingConfigs . release )
}
2018-09-26 15:29:31 +08:00
2017-04-05 06:18:46 +08:00
if ( cdvDebugSigningPropertiesFile ) {
addSigningProps ( cdvDebugSigningPropertiesFile , signingConfigs . debug )
}
}
/ *
* WARNING: Cordova Lib and platform scripts do management inside of this code here ,
* if you are adding the dependencies manually , do so outside the comments , otherwise
* the Cordova tools will overwrite them
* /
dependencies {
2017-11-02 08:08:43 +08:00
implementation fileTree ( dir: 'libs' , include: '*.jar' )
2017-04-05 06:18:46 +08:00
// SUB-PROJECT DEPENDENCIES START
debugCompile ( project ( path: ":CordovaLib" , configuration: "debug" ) )
releaseCompile ( project ( path: ":CordovaLib" , configuration: "release" ) )
// SUB-PROJECT DEPENDENCIES END
}
def promptForReleaseKeyPassword ( ) {
if ( ! cdvReleaseSigningPropertiesFile ) {
return ;
}
if ( '__unset' . equals ( android . signingConfigs . release . storePassword ) ) {
android . signingConfigs . release . storePassword = privateHelpers . promptForPassword ( 'Enter key store password: ' )
}
if ( '__unset' . equals ( android . signingConfigs . release . keyPassword ) ) {
android . signingConfigs . release . keyPassword = privateHelpers . promptForPassword ( 'Enter key password: ' ) ;
}
}
gradle . taskGraph . whenReady { taskGraph - >
taskGraph . getAllTasks ( ) . each ( ) { task - >
2017-10-19 02:09:08 +08:00
if ( [ 'validateReleaseSigning' , 'validateSigningRelease' , 'validateSigningArmv7Release' , 'validateSigningX76Release' ] . contains ( task . name ) ) {
promptForReleaseKeyPassword ( )
}
2017-04-05 06:18:46 +08:00
}
}
def addSigningProps ( propsFilePath , signingConfig ) {
def propsFile = file ( propsFilePath )
def props = new Properties ( )
propsFile . withReader { reader - >
props . load ( reader )
}
def storeFile = new File ( props . get ( 'key.store' ) ? : privateHelpers . ensureValueExists ( propsFilePath , props , 'storeFile' ) )
if ( ! storeFile . isAbsolute ( ) ) {
storeFile = RelativePath . parse ( true , storeFile . toString ( ) ) . getFile ( propsFile . getParentFile ( ) )
}
if ( ! storeFile . exists ( ) ) {
throw new FileNotFoundException ( 'Keystore file does not exist: ' + storeFile . getAbsolutePath ( ) )
}
signingConfig . keyAlias = props . get ( 'key.alias' ) ? : privateHelpers . ensureValueExists ( propsFilePath , props , 'keyAlias' )
signingConfig . keyPassword = props . get ( 'keyPassword' , props . get ( 'key.alias.password' , signingConfig . keyPassword ) )
signingConfig . storeFile = storeFile
signingConfig . storePassword = props . get ( 'storePassword' , props . get ( 'key.store.password' , signingConfig . storePassword ) )
def storeType = props . get ( 'storeType' , props . get ( 'key.store.type' , '' ) )
if ( ! storeType ) {
def filename = storeFile . getName ( ) . toLowerCase ( ) ;
if ( filename . endsWith ( '.p12' ) | | filename . endsWith ( '.pfx' ) ) {
storeType = 'pkcs12'
} else {
storeType = signingConfig . storeType // "jks"
}
}
signingConfig . storeType = storeType
}
for ( def func : cdvPluginPostBuildExtras ) {
func ( )
}
// This can be defined within build-extras.gradle as:
// ext.postBuildExtras = { ... code here ... }
if ( hasProperty ( 'postBuildExtras' ) ) {
postBuildExtras ( )
}
2020-01-16 07:40:54 +08:00
if ( cdvHelpers . getConfigPreference ( 'GoogleServicesEnabled' , 'false' ) . toBoolean ( ) ) {
apply plugin: 'com.google.gms.google-services'
}