You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by er...@apache.org on 2022/05/18 14:18:39 UTC

[cordova-android] branch master updated: feat: support custom compileSdk setting (#1431)

This is an automated email from the ASF dual-hosted git repository.

erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-android.git


The following commit(s) were added to refs/heads/master by this push:
     new 4744bfe6 feat: support custom compileSdk setting (#1431)
4744bfe6 is described below

commit 4744bfe6bfa8bfa6b6d453164b5f5b73cf254c42
Author: エリス <er...@users.noreply.github.com>
AuthorDate: Wed May 18 23:18:33 2022 +0900

    feat: support custom compileSdk setting (#1431)
    
    * feat: support custom compileSdk setting
    * chore: apply suggestions from code review
    * chore: apply cdv-gradle-config-defaults.json suggestion
    * fix: set compile sdk when null
    * fix: move compileSdk null check to gradle
    * fix: compile sdk requirement warning & display in gradle per subproject
    
    Co-authored-by: Norman Breau <no...@nbsolutions.ca>
---
 framework/build.gradle                    |  4 ++-
 framework/cdv-gradle-config-defaults.json |  1 +
 framework/cordova.gradle                  | 15 +++++++++++
 lib/builders/plugin-build.gradle          |  2 +-
 lib/check_reqs.js                         | 42 +++++++++++++++++++++++++++++++
 lib/create.js                             |  4 ++-
 lib/prepare.js                            |  9 +++++++
 templates/project/app/build.gradle        |  2 +-
 templates/project/build.gradle            |  2 ++
 test/androidx/app/build.gradle            |  2 +-
 10 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/framework/build.gradle b/framework/build.gradle
index 38cd42d7..0f192d15 100644
--- a/framework/build.gradle
+++ b/framework/build.gradle
@@ -26,6 +26,8 @@ buildscript {
         // Android Gradle Plugin (AGP) Build Tools
         classpath "com.android.tools.build:gradle:${cordovaConfig.AGP_VERSION}"
     }
+
+    cdvHelpers.verifyCordovaConfigForBuild()
 }
 
 allprojects {
@@ -42,7 +44,7 @@ allprojects {
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion cordovaConfig.SDK_VERSION
+    compileSdkVersion cordovaConfig.COMPILE_SDK_VERSION
     buildToolsVersion cordovaConfig.BUILD_TOOLS_VERSION
 
     compileOptions {
diff --git a/framework/cdv-gradle-config-defaults.json b/framework/cdv-gradle-config-defaults.json
index 749f4e12..41413763 100644
--- a/framework/cdv-gradle-config-defaults.json
+++ b/framework/cdv-gradle-config-defaults.json
@@ -1,6 +1,7 @@
 {
     "MIN_SDK_VERSION": 22,
     "SDK_VERSION": 32,
+    "COMPILE_SDK_VERSION": null,
     "GRADLE_VERSION": "7.4.2",
     "MIN_BUILD_TOOLS_VERSION": "32.0.0",
     "AGP_VERSION": "7.1.0",
diff --git a/framework/cordova.gradle b/framework/cordova.gradle
index d6d0d699..427cfc23 100644
--- a/framework/cordova.gradle
+++ b/framework/cordova.gradle
@@ -161,6 +161,9 @@ def doApplyCordovaConfigCustomization() {
     if (project.hasProperty('cdvSdkVersion')) {
         cordovaConfig.SDK_VERSION = Integer.parseInt('' + cdvSdkVersion)
     }
+    if (project.hasProperty('cdvCompileSdkVersion')) {
+        cordovaConfig.COMPILE_SDK_VERSION = Integer.parseInt('' + cdvCompileSdkVersion)
+    }
     if (project.hasProperty('cdvMaxSdkVersion')) {
         cordovaConfig.MAX_SDK_VERSION = Integer.parseInt('' + cdvMaxSdkVersion)
     }
@@ -190,6 +193,12 @@ def doApplyCordovaConfigCustomization() {
     }
 }
 
+def doVerifyCordovaConfigForBuild() {
+    if (cordovaConfig.COMPILE_SDK_VERSION < cordovaConfig.SDK_VERSION) {
+        println "The \"compileSdkVersion\" (${cordovaConfig.COMPILE_SDK_VERSION}) should be greater than or equal to the the \"targetSdkVersion\" (${cordovaConfig.SDK_VERSION})."
+    }
+}
+
 // Properties exported here are visible to all plugins.
 ext {
     def defaultsFilePath = './cdv-gradle-config-defaults.json'
@@ -210,6 +219,10 @@ ext {
     def jsonFile = new File(targetConfigFilePath)
     cordovaConfig = new groovy.json.JsonSlurper().parseText(jsonFile.text)
 
+    if (cordovaConfig.COMPILE_SDK_VERSION == null) {
+        cordovaConfig.COMPILE_SDK_VERSION = cordovaConfig.SDK_VERSION
+    }
+
     // Apply Gradle Properties
     doApplyCordovaConfigCustomization()
 
@@ -227,6 +240,8 @@ ext {
     cdvHelpers.getConfigXml = { doGetConfigXml() }
     // Returns the value for the desired <preference>. Added in 4.1.0.
     cdvHelpers.getConfigPreference = { name, defaultValue -> doGetConfigPreference(name, defaultValue) }
+    // Display warnings if any cordova config is not proper for build.
+    cdvHelpers.verifyCordovaConfigForBuild = { doVerifyCordovaConfigForBuild() }
 }
 
 buildscript {
diff --git a/lib/builders/plugin-build.gradle b/lib/builders/plugin-build.gradle
index 985f1d6e..56ad8559 100644
--- a/lib/builders/plugin-build.gradle
+++ b/lib/builders/plugin-build.gradle
@@ -42,7 +42,7 @@ dependencies {
 }
 
 android {
-    compileSdkVersion cordovaConfig.SDK_VERSION
+    compileSdkVersion cordovaConfig.COMPILE_SDK_VERSION
     buildToolsVersion cordovaConfig.BUILD_TOOLS_VERSION
 
     compileOptions {
diff --git a/lib/check_reqs.js b/lib/check_reqs.js
index 6a9f79f5..cc0b07bf 100644
--- a/lib/check_reqs.js
+++ b/lib/check_reqs.js
@@ -44,6 +44,31 @@ module.exports.get_target = function (projectRoot) {
     return `android-${Math.max(userTargetSdkVersion, SDK_VERSION)}`;
 };
 
+/**
+ * @param {string} projectRoot
+ * @returns {string} The android target in format "android-${target}"
+ */
+module.exports.get_compile = function (projectRoot) {
+    const userTargetSdkVersion = getUserTargetSdkVersion(projectRoot) || SDK_VERSION;
+    const userCompileSdkVersion = getUserCompileSdkVersion(projectRoot) || userTargetSdkVersion;
+
+    module.exports.isCompileSdkValid(userCompileSdkVersion, userTargetSdkVersion);
+
+    return userCompileSdkVersion;
+};
+
+module.exports.isCompileSdkValid = (compileSdk, targetSdk) => {
+    targetSdk = (targetSdk || SDK_VERSION);
+    compileSdk = (compileSdk || targetSdk);
+    const isValid = compileSdk >= targetSdk;
+
+    if (!isValid) {
+        events.emit('warn', `The "android-compileSdkVersion" (${compileSdk}) should be greater than or equal to the "android-targetSdkVersion" (${targetSdk}).`);
+    }
+
+    return isValid;
+};
+
 /**
  * @param {string} projectRoot
  * @returns {number} target sdk or 0 if undefined
@@ -61,6 +86,23 @@ function getUserTargetSdkVersion (projectRoot) {
     return isNaN(targetSdkVersion) ? 0 : targetSdkVersion;
 }
 
+/**
+ * @param {string} projectRoot
+ * @returns {number} target sdk or 0 if undefined
+ */
+function getUserCompileSdkVersion (projectRoot) {
+    // If the repo config.xml file exists, find the desired compileSdkVersion.
+    // We need to use the cordova project's config.xml here, since the platform
+    // project's config.xml does not yet have the user's preferences when this
+    // function is called during `Api.createPlatform`.
+    const configFile = path.join(projectRoot, '../../config.xml');
+    if (!fs.existsSync(configFile)) return 0;
+
+    const configParser = new ConfigParser(configFile);
+    const compileSdkVersion = parseInt(configParser.getPreference('android-compileSdkVersion', 'android'), 10);
+    return isNaN(compileSdkVersion) ? 0 : compileSdkVersion;
+}
+
 module.exports.get_gradle_wrapper = function () {
     let androidStudioPath;
     let i = 0;
diff --git a/lib/create.js b/lib/create.js
index d1445bd5..6ee2387c 100755
--- a/lib/create.js
+++ b/lib/create.js
@@ -208,6 +208,7 @@ exports.create = function (project_path, config, options, events) {
 
     const safe_activity_name = config.android_activityName() || options.activityName || 'MainActivity';
     const target_api = check_reqs.get_target(project_path);
+    const compile_api = check_reqs.get_compile(project_path);
 
     // Make the package conform to Java package types
     return exports.validatePackageName(package_name)
@@ -220,7 +221,8 @@ exports.create = function (project_path, config, options, events) {
             events.emit('log', '\tPackage: ' + package_name);
             events.emit('log', '\tName: ' + project_name);
             events.emit('log', '\tActivity: ' + safe_activity_name);
-            events.emit('log', '\tAndroid target: ' + target_api);
+            events.emit('log', '\tAndroid Target SDK: ' + target_api);
+            events.emit('log', '\tAndroid Compile SDK: ' + compile_api);
 
             events.emit('verbose', 'Copying android template project to ' + project_path);
 
diff --git a/lib/prepare.js b/lib/prepare.js
index b0d2e6cd..365b4692 100644
--- a/lib/prepare.js
+++ b/lib/prepare.js
@@ -82,6 +82,14 @@ function updateUserProjectGradleConfig (project) {
         ...getUserGradleConfig(project._config)
     };
 
+    // Check if compile sdk is valid.
+    // The returned result is iggnored and since we do not need and will not throw  an error.
+    // Only using the valid check call for display the warning when target is greater then compiled.
+    checkReqs.isCompileSdkValid(
+        projectGradleConfig.COMPILE_SDK_VERSION,
+        projectGradleConfig.SDK_VERSION
+    );
+
     // Write out changes
     const projectGradleConfigPath = path.join(project.root, 'cdv-gradle-config.json');
     fs.writeJSONSync(projectGradleConfigPath, projectGradleConfig, { spaces: 2 });
@@ -92,6 +100,7 @@ function getUserGradleConfig (configXml) {
         { xmlKey: 'android-minSdkVersion', gradleKey: 'MIN_SDK_VERSION', type: Number },
         { xmlKey: 'android-maxSdkVersion', gradleKey: 'MAX_SDK_VERSION', type: Number },
         { xmlKey: 'android-targetSdkVersion', gradleKey: 'SDK_VERSION', type: Number },
+        { xmlKey: 'android-compileSdkVersion', gradleKey: 'COMPILE_SDK_VERSION', type: Number },
         { xmlKey: 'android-buildToolsVersion', gradleKey: 'BUILD_TOOLS_VERSION', type: String },
         { xmlKey: 'GradleVersion', gradleKey: 'GRADLE_VERSION', type: String },
         { xmlKey: 'AndroidGradlePluginVersion', gradleKey: 'AGP_VERSION', type: String },
diff --git a/templates/project/app/build.gradle b/templates/project/app/build.gradle
index 08959e08..cc47c1c5 100644
--- a/templates/project/app/build.gradle
+++ b/templates/project/app/build.gradle
@@ -188,7 +188,7 @@ android {
             maxSdkVersion cordovaConfig.MAX_SDK_VERSION
         }
         targetSdkVersion cordovaConfig.SDK_VERSION
-        compileSdkVersion cordovaConfig.SDK_VERSION
+        compileSdkVersion cordovaConfig.COMPILE_SDK_VERSION
     }
 
     lintOptions {
diff --git a/templates/project/build.gradle b/templates/project/build.gradle
index 949bc3fa..1e4eec73 100644
--- a/templates/project/build.gradle
+++ b/templates/project/build.gradle
@@ -27,6 +27,8 @@ buildscript {
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
     }
+
+    cdvHelpers.verifyCordovaConfigForBuild()
 }
 
 allprojects {
diff --git a/test/androidx/app/build.gradle b/test/androidx/app/build.gradle
index 747cecb1..c1eff500 100644
--- a/test/androidx/app/build.gradle
+++ b/test/androidx/app/build.gradle
@@ -21,7 +21,7 @@ apply plugin: 'com.android.application'
 apply from: '../../../framework/cordova.gradle'
 
 android {
-    compileSdkVersion cordovaConfig.SDK_VERSION
+    compileSdkVersion cordovaConfig.COMPILE_SDK_VERSION
     buildToolsVersion cordovaConfig.BUILD_TOOLS_VERSION
 
     defaultConfig {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org