diff --git a/jadx-core/src/main/java/jadx/core/export/gen/AndroidGradleGenerator.java b/jadx-core/src/main/java/jadx/core/export/gen/AndroidGradleGenerator.java index 6a1c06082..847debf72 100644 --- a/jadx-core/src/main/java/jadx/core/export/gen/AndroidGradleGenerator.java +++ b/jadx-core/src/main/java/jadx/core/export/gen/AndroidGradleGenerator.java @@ -31,7 +31,8 @@ public class AndroidGradleGenerator implements IExportGradleGenerator { private static final Logger LOG = LoggerFactory.getLogger(AndroidGradleGenerator.class); private static final Pattern ILLEGAL_GRADLE_CHARS = Pattern.compile("[/\\\\:>\"?*|]"); - private static final ApplicationParams UNKNOWN_APP_PARAMS = new ApplicationParams("UNKNOWN", 0, 0, 0, "UNKNOWN", "UNKNOWN", "UNKNOWN"); + private static final ApplicationParams UNKNOWN_APP_PARAMS = + new ApplicationParams("UNKNOWN", 0, 0, 0, 0, "UNKNOWN", "UNKNOWN", "UNKNOWN"); private final RootNode root; private final File projectDir; @@ -107,6 +108,7 @@ public class AndroidGradleGenerator implements IExportGradleGenerator { if (exportApp) { attrs.add(AppAttribute.APPLICATION_LABEL); attrs.add(AppAttribute.TARGET_SDK_VERSION); + attrs.add(AppAttribute.COMPILE_SDK_VERSION); attrs.add(AppAttribute.VERSION_NAME); attrs.add(AppAttribute.VERSION_CODE); } @@ -160,6 +162,7 @@ public class AndroidGradleGenerator implements IExportGradleGenerator { TemplateFile tmpl = TemplateFile.fromResources("/export/android/app.build.gradle.tmpl"); tmpl.add("applicationId", appPackage); tmpl.add("minSdkVersion", minSdkVersion); + tmpl.add("compileSdkVersion", applicationParams.getCompileSdkVersion()); tmpl.add("targetSdkVersion", applicationParams.getTargetSdkVersion()); tmpl.add("versionCode", applicationParams.getVersionCode()); tmpl.add("versionName", applicationParams.getVersionName()); @@ -174,6 +177,7 @@ public class AndroidGradleGenerator implements IExportGradleGenerator { TemplateFile tmpl = TemplateFile.fromResources("/export/android/lib.build.gradle.tmpl"); tmpl.add("packageId", pkg); tmpl.add("minSdkVersion", minSdkVersion); + tmpl.add("compileSdkVersion", applicationParams.getCompileSdkVersion()); tmpl.add("additionalOptions", genAdditionalAndroidPluginOptions(minSdkVersion)); tmpl.save(new File(baseDir, "build.gradle")); diff --git a/jadx-core/src/main/java/jadx/core/utils/android/AndroidManifestParser.java b/jadx-core/src/main/java/jadx/core/utils/android/AndroidManifestParser.java index 13f7398be..9cfaed6a7 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/AndroidManifestParser.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/AndroidManifestParser.java @@ -61,6 +61,7 @@ public class AndroidManifestParser { String applicationLabel = null; Integer minSdkVersion = null; Integer targetSdkVersion = null; + Integer compileSdkVersion = null; Integer versionCode = null; String versionName = null; String mainActivity = null; @@ -89,6 +90,14 @@ public class AndroidManifestParser { targetSdkVersion = minSdkVersion; } } + if (parseAttrs.contains(AppAttribute.COMPILE_SDK_VERSION)) { + String stringCompileSdk = usesSdk.getAttribute("android:compileSdkVersion"); + if (!stringCompileSdk.isEmpty()) { + compileSdkVersion = Integer.valueOf(stringCompileSdk); + } else { + compileSdkVersion = targetSdkVersion; + } + } } if (manifest != null) { if (parseAttrs.contains(AppAttribute.VERSION_CODE)) { @@ -105,8 +114,8 @@ public class AndroidManifestParser { application = getApplicationName(); } - return new ApplicationParams(applicationLabel, minSdkVersion, targetSdkVersion, versionCode, - versionName, mainActivity, application); + return new ApplicationParams(applicationLabel, minSdkVersion, targetSdkVersion, compileSdkVersion, + versionCode, versionName, mainActivity, application); } private String getApplicationLabel() { diff --git a/jadx-core/src/main/java/jadx/core/utils/android/AppAttribute.java b/jadx-core/src/main/java/jadx/core/utils/android/AppAttribute.java index e4d23a654..bbd8243dd 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/AppAttribute.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/AppAttribute.java @@ -3,6 +3,7 @@ package jadx.core.utils.android; public enum AppAttribute { APPLICATION_LABEL, MIN_SDK_VERSION, + COMPILE_SDK_VERSION, TARGET_SDK_VERSION, VERSION_CODE, VERSION_NAME, diff --git a/jadx-core/src/main/java/jadx/core/utils/android/ApplicationParams.java b/jadx-core/src/main/java/jadx/core/utils/android/ApplicationParams.java index d9b7c7037..ccd53159e 100644 --- a/jadx-core/src/main/java/jadx/core/utils/android/ApplicationParams.java +++ b/jadx-core/src/main/java/jadx/core/utils/android/ApplicationParams.java @@ -8,16 +8,18 @@ public class ApplicationParams { private final String applicationLabel; private final Integer minSdkVersion; private final Integer targetSdkVersion; + private final Integer compileSdkVersion; private final Integer versionCode; private final String versionName; private final String mainActivity; private final String application; - public ApplicationParams(String applicationLabel, Integer minSdkVersion, Integer targetSdkVersion, Integer versionCode, - String versionName, String mainActivity, String application) { + public ApplicationParams(String applicationLabel, Integer minSdkVersion, Integer targetSdkVersion, Integer compileSdkVersion, + Integer versionCode, String versionName, String mainActivity, String application) { this.applicationLabel = applicationLabel; this.minSdkVersion = minSdkVersion; this.targetSdkVersion = targetSdkVersion; + this.compileSdkVersion = compileSdkVersion; this.versionCode = versionCode; this.versionName = versionName; this.mainActivity = mainActivity; @@ -36,6 +38,10 @@ public class ApplicationParams { return targetSdkVersion; } + public Integer getCompileSdkVersion() { + return compileSdkVersion; + } + public Integer getVersionCode() { return versionCode; } diff --git a/jadx-core/src/main/resources/export/android/app.build.gradle.tmpl b/jadx-core/src/main/resources/export/android/app.build.gradle.tmpl index 7e9f6d9b3..c7c3f2e1c 100644 --- a/jadx-core/src/main/resources/export/android/app.build.gradle.tmpl +++ b/jadx-core/src/main/resources/export/android/app.build.gradle.tmpl @@ -3,8 +3,8 @@ plugins { } android { - compileSdkVersion 30 - buildToolsVersion "30.0.2" + namespace "{{applicationId}}" + compileSdkVersion {{compileSdkVersion}} defaultConfig { applicationId '{{applicationId}}' diff --git a/jadx-core/src/main/resources/export/android/build.gradle.tmpl b/jadx-core/src/main/resources/export/android/build.gradle.tmpl index 338aa18d5..b302943cc 100644 --- a/jadx-core/src/main/resources/export/android/build.gradle.tmpl +++ b/jadx-core/src/main/resources/export/android/build.gradle.tmpl @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:8.10.1' } } diff --git a/jadx-core/src/main/resources/export/android/lib.build.gradle.tmpl b/jadx-core/src/main/resources/export/android/lib.build.gradle.tmpl index e776563eb..e455f1d01 100644 --- a/jadx-core/src/main/resources/export/android/lib.build.gradle.tmpl +++ b/jadx-core/src/main/resources/export/android/lib.build.gradle.tmpl @@ -4,7 +4,7 @@ plugins { android { namespace '{{packageId}}' - compileSdk 30 + compileSdk {{compileSdkVersion}} defaultConfig { minSdk {{minSdkVersion}} diff --git a/jadx-core/src/test/java/jadx/tests/functional/TemplateFileTest.java b/jadx-core/src/test/java/jadx/tests/functional/TemplateFileTest.java index db84c0233..8a77355ba 100644 --- a/jadx-core/src/test/java/jadx/tests/functional/TemplateFileTest.java +++ b/jadx-core/src/test/java/jadx/tests/functional/TemplateFileTest.java @@ -17,6 +17,7 @@ public class TemplateFileTest { tmpl.add("versionCode", 3); tmpl.add("versionName", "1.2.3"); tmpl.add("additionalOptions", "useLibrary 'org.apache.http.legacy'"); + tmpl.add("compileSdkVersion", 4); String res = tmpl.build(); System.out.println(res); @@ -24,5 +25,6 @@ public class TemplateFileTest { assertThat(res).contains("targetSdkVersion 2"); assertThat(res).contains("versionCode 3"); assertThat(res).contains("versionName \"1.2.3\""); + assertThat(res).contains("compileSdkVersion 4"); } }