arnaucube
arnaucube/commonroutesServerPublic Self-hosted repository
commonroutesServer/www/platforms/android/build.gradle
www/platforms/android/build.gradleRaw
  1/*
  2       Licensed to the Apache Software Foundation (ASF) under one
  3       or more contributor license agreements.  See the NOTICE file
  4       distributed with this work for additional information
  5       regarding copyright ownership.  The ASF licenses this file
  6       to you under the Apache License, Version 2.0 (the
  7       "License"); you may not use this file except in compliance
  8       with the License.  You may obtain a copy of the License at
  9
 10         http://www.apache.org/licenses/LICENSE-2.0
 11
 12       Unless required by applicable law or agreed to in writing,
 13       software distributed under the License is distributed on an
 14       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 15       KIND, either express or implied.  See the License for the
 16       specific language governing permissions and limitations
 17       under the License.
 18*/
 19
 20apply plugin: 'com.android.application'
 21
 22buildscript {
 23    repositories {
 24        mavenCentral()
 25        jcenter()
 26    }
 27
 28    // Switch the Android Gradle plugin version requirement depending on the
 29    // installed version of Gradle. This dependency is documented at
 30    // http://tools.android.com/tech-docs/new-build-system/version-compatibility
 31    // and https://issues.apache.org/jira/browse/CB-8143
 32    dependencies {
 33        classpath 'com.android.tools.build:gradle:2.1.0'
 34    }
 35}
 36
 37// Allow plugins to declare Maven dependencies via build-extras.gradle.
 38allprojects {
 39    repositories {
 40        mavenCentral();
 41        jcenter()
 42    }
 43}
 44
 45task wrapper(type: Wrapper) {
 46    gradleVersion = '2.13'
 47}
 48
 49// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
 50// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
 51ext {
 52    apply from: 'CordovaLib/cordova.gradle'
 53    // The value for android.compileSdkVersion.
 54    if (!project.hasProperty('cdvCompileSdkVersion')) {
 55        cdvCompileSdkVersion = null;
 56    }
 57    // The value for android.buildToolsVersion.
 58    if (!project.hasProperty('cdvBuildToolsVersion')) {
 59        cdvBuildToolsVersion = null;
 60    }
 61    // Sets the versionCode to the given value.
 62    if (!project.hasProperty('cdvVersionCode')) {
 63        cdvVersionCode = null
 64    }
 65    // Sets the minSdkVersion to the given value.
 66    if (!project.hasProperty('cdvMinSdkVersion')) {
 67        cdvMinSdkVersion = null
 68    }
 69    // Whether to build architecture-specific APKs.
 70    if (!project.hasProperty('cdvBuildMultipleApks')) {
 71        cdvBuildMultipleApks = null
 72    }
 73    // .properties files to use for release signing.
 74    if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) {
 75        cdvReleaseSigningPropertiesFile = null
 76    }
 77    // .properties files to use for debug signing.
 78    if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
 79        cdvDebugSigningPropertiesFile = null
 80    }
 81    // Set by build.js script.
 82    if (!project.hasProperty('cdvBuildArch')) {
 83        cdvBuildArch = null
 84    }
 85
 86    // Plugin gradle extensions can append to this to have code run at the end.
 87    cdvPluginPostBuildExtras = []
 88}
 89
 90// PLUGIN GRADLE EXTENSIONS START
 91// PLUGIN GRADLE EXTENSIONS END
 92
 93def hasBuildExtras = file('build-extras.gradle').exists()
 94if (hasBuildExtras) {
 95    apply from: 'build-extras.gradle'
 96}
 97
 98// Set property defaults after extension .gradle files.
 99if (ext.cdvCompileSdkVersion == null) {
100    ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget()
101}
102if (ext.cdvBuildToolsVersion == null) {
103    ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
104}
105if (ext.cdvDebugSigningPropertiesFile == null && file('debug-signing.properties').exists()) {
106    ext.cdvDebugSigningPropertiesFile = 'debug-signing.properties'
107}
108if (ext.cdvReleaseSigningPropertiesFile == null && file('release-signing.properties').exists()) {
109    ext.cdvReleaseSigningPropertiesFile = 'release-signing.properties'
110}
111
112// Cast to appropriate types.
113ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean();
114ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : Integer.parseInt('' + cdvMinSdkVersion)
115ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)
116
117def computeBuildTargetName(debugBuild) {
118    def ret = 'assemble'
119    if (cdvBuildMultipleApks && cdvBuildArch) {
120        def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch
121        ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1);
122    }
123    return ret + (debugBuild ? 'Debug' : 'Release')
124}
125
126// Make cdvBuild a task that depends on the debug/arch-sepecific task.
127task cdvBuildDebug
128cdvBuildDebug.dependsOn {
129    return computeBuildTargetName(true)
130}
131
132task cdvBuildRelease
133cdvBuildRelease.dependsOn {
134    return computeBuildTargetName(false)
135}
136
137task cdvPrintProps << {
138    println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
139    println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
140    println('cdvVersionCode=' + cdvVersionCode)
141    println('cdvMinSdkVersion=' + cdvMinSdkVersion)
142    println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
143    println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
144    println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
145    println('cdvBuildArch=' + cdvBuildArch)
146    println('computedVersionCode=' + android.defaultConfig.versionCode)
147    android.productFlavors.each { flavor ->
148        println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
149    }
150}
151
152android {
153    sourceSets {
154        main {
155            manifest.srcFile 'AndroidManifest.xml'
156            java.srcDirs = ['src']
157            resources.srcDirs = ['src']
158            aidl.srcDirs = ['src']
159            renderscript.srcDirs = ['src']
160            res.srcDirs = ['res']
161            assets.srcDirs = ['assets']
162            jniLibs.srcDirs = ['libs']
163        }
164    }
165
166    defaultConfig {
167        versionCode cdvVersionCode ?: Integer.parseInt("" + privateHelpers.extractIntFromManifest("versionCode"))
168        applicationId privateHelpers.extractStringFromManifest("package")
169
170        if (cdvMinSdkVersion != null) {
171            minSdkVersion cdvMinSdkVersion
172        }
173    }
174
175    lintOptions {
176      abortOnError false;
177    }
178
179    compileSdkVersion cdvCompileSdkVersion
180    buildToolsVersion cdvBuildToolsVersion
181
182    if (Boolean.valueOf(cdvBuildMultipleApks)) {
183        productFlavors {
184            armv7 {
185                versionCode defaultConfig.versionCode*10 + 2
186                ndk {
187                    abiFilters "armeabi-v7a", ""
188                }
189            }
190            x86 {
191                versionCode defaultConfig.versionCode*10 + 4
192                ndk {
193                    abiFilters "x86", ""
194                }
195            }
196            all {
197                ndk {
198                    abiFilters "all", ""
199                }
200            }
201        }
202    }
203    /*
204
205    ELSE NOTHING! DON'T MESS WITH THE VERSION CODE IF YOU DON'T HAVE TO!
206
207    else if (!cdvVersionCode) {
208      def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion")
209      // Vary versionCode by the two most common API levels:
210      // 14 is ICS, which is the lowest API level for many apps.
211      // 20 is Lollipop, which is the lowest API level for the updatable system webview.
212      if (minSdkVersion >= 20) {
213        defaultConfig.versionCode += 9
214      } else if (minSdkVersion >= 14) {
215        defaultConfig.versionCode += 8
216      }
217    }
218    */
219
220    compileOptions {
221        sourceCompatibility JavaVersion.VERSION_1_6
222        targetCompatibility JavaVersion.VERSION_1_6
223    }
224
225    if (cdvReleaseSigningPropertiesFile) {
226        signingConfigs {
227            release {
228                // These must be set or Gradle will complain (even if they are overridden).
229                keyAlias = ""
230                keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
231                storeFile = null
232                storePassword = "__unset"
233            }
234        }
235        buildTypes {
236            release {
237                signingConfig signingConfigs.release
238            }
239        }
240        addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
241    }
242    if (cdvDebugSigningPropertiesFile) {
243        addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
244    }
245}
246
247dependencies {
248    compile fileTree(dir: 'libs', include: '*.jar')
249    // SUB-PROJECT DEPENDENCIES START
250    debugCompile project(path: "CordovaLib", configuration: "debug")
251    releaseCompile project(path: "CordovaLib", configuration: "release")
252    // SUB-PROJECT DEPENDENCIES END
253}
254
255def promptForReleaseKeyPassword() {
256    if (!cdvReleaseSigningPropertiesFile) {
257        return;
258    }
259    if ('__unset'.equals(android.signingConfigs.release.storePassword)) {
260        android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ')
261    }
262    if ('__unset'.equals(android.signingConfigs.release.keyPassword)) {
263        android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: ');
264    }
265}
266
267gradle.taskGraph.whenReady { taskGraph ->
268    taskGraph.getAllTasks().each() { task ->
269        if (task.name == 'validateReleaseSigning') {
270            promptForReleaseKeyPassword()
271        }
272    }
273}
274
275def addSigningProps(propsFilePath, signingConfig) {
276    def propsFile = file(propsFilePath)
277    def props = new Properties()
278    propsFile.withReader { reader ->
279        props.load(reader)
280    }
281
282    def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile'))
283    if (!storeFile.isAbsolute()) {
284        storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile())
285    }
286    if (!storeFile.exists()) {
287        throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath())
288    }
289    signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias')
290    signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword))
291    signingConfig.storeFile = storeFile
292    signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword))
293    def storeType = props.get('storeType', props.get('key.store.type', ''))
294    if (!storeType) {
295        def filename = storeFile.getName().toLowerCase();
296        if (filename.endsWith('.p12') || filename.endsWith('.pfx')) {
297            storeType = 'pkcs12'
298        } else {
299            storeType = signingConfig.storeType // "jks"
300        }
301    }
302    signingConfig.storeType = storeType
303}
304
305for (def func : cdvPluginPostBuildExtras) {
306    func()
307}
308
309// This can be defined within build-extras.gradle as:
310//     ext.postBuildExtras = { ... code here ... }
311if (hasProperty('postBuildExtras')) {
312    postBuildExtras()
313}