From 24bdb4047edf01d8994eb9f1bc670abb91fc1062 Mon Sep 17 00:00:00 2001 From: Nicholas Roth Date: Fri, 3 Oct 2025 21:08:55 -0400 Subject: [PATCH] Fix build scripts to work with Gradle 9.1.0 without errors --- baksmali/build.gradle | 9 ++++++--- build.gradle | 17 +++++++++++++---- dexlib2/build.gradle | 11 +++++++++-- smali/build.gradle | 19 +++++++++++++++---- 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/baksmali/build.gradle b/baksmali/build.gradle index d84f72b15..a05aa4344 100644 --- a/baksmali/build.gradle +++ b/baksmali/build.gradle @@ -57,7 +57,7 @@ task fatJar(type: Jar) { from sourceSets.main.output from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - classifier = 'fat' + archiveClassifier = 'fat' manifest { attributes('Main-Class': 'org.jf.baksmali.Main') @@ -65,9 +65,12 @@ task fatJar(type: Jar) { doLast { if (!System.getProperty('os.name').toLowerCase().contains('windows')) { - ant.symlink(link: file("${destinationDirectory.get()}/baksmali.jar"), resource: archivePath, overwrite: true) + ant.symlink(link: file("${destinationDirectory.get()}/baksmali.jar"), resource: archiveFile.get().asFile, overwrite: true) } } + + dependsOn ':util:jar' + dependsOn ':dexlib2:jar' } tasks.getByPath('build').dependsOn(fatJar) @@ -125,4 +128,4 @@ tasks.getByPath('javadoc').onlyIf({ tasks.getByPath('test').onlyIf({ !gradle.taskGraph.hasTask(fastbuild) -}) \ No newline at end of file +}) diff --git a/build.gradle b/build.gradle index 6cbb291d5..bae08471e 100644 --- a/build.gradle +++ b/build.gradle @@ -31,6 +31,8 @@ apply plugin: 'idea' + + version = '2.5.2' def jcommanderVersion = '' @@ -71,10 +73,17 @@ task(install).doLast { // The projects that get pushed to maven def maven_release_projects = ['smali', 'baksmali', 'dexlib2', 'util'] + subprojects { apply plugin: 'java-library' apply plugin: 'idea' + java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } + } + if (JavaVersion.current().isJava8Compatible()) { allprojects { tasks.withType(Javadoc) { @@ -86,8 +95,8 @@ subprojects { version = parent.version java { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } ext { @@ -100,7 +109,7 @@ subprojects { antlr: 'org.antlr:antlr:3.5.2', stringtemplate: 'org.antlr:stringtemplate:3.2.1', jflex_plugin: 'org.xbib.gradle.plugin:gradle-plugin-jflex:1.1.0', - proguard_gradle: 'net.sf.proguard:proguard-gradle:6.2.2', + proguard_gradle: 'com.guardsquare:proguard-gradle:7.5.0', dx: 'com.google.android.tools:dx:1.7', gson: 'com.google.code.gson:gson:2.3.1', jcommander: jcommanderVersion @@ -170,7 +179,7 @@ subprojects { } signing { - required { gradle.taskGraph.hasTask('publish') } + required = gradle.taskGraph.hasTask('publish') sign(publishing.publications["mavenJava"]) } diff --git a/dexlib2/build.gradle b/dexlib2/build.gradle index 9a46eb8b9..c200dc130 100644 --- a/dexlib2/build.gradle +++ b/dexlib2/build.gradle @@ -40,6 +40,13 @@ sourceSets { } } +test { + jvmArgs += [ + '--add-opens', 'java.base/java.lang=ALL-UNNAMED', + '--add-opens', 'java.base/java.util=ALL-UNNAMED' + ] +} + configurations { accessorTestGenerator dx @@ -71,7 +78,7 @@ task generateAccessorTestSource(type: JavaExec) { outputs.dir file(testAccessorOutputDir) classpath = configurations.accessorTestGenerator - main = 'org.jf.dexlib2.AccessorTestGenerator' + mainClass = 'org.jf.dexlib2.AccessorTestGenerator' args testAccessorOutputFile } compileAccessorTestJava.dependsOn(generateAccessorTestSource) @@ -84,7 +91,7 @@ task generateAccessorTestDex(type: JavaExec, dependsOn: compileAccessorTestJava) inputs.dir(project.sourceSets.accessorTest.output.classesDirs) outputs.file outputDex - main 'com.android.dx.command.Main' + mainClass = 'com.android.dx.command.Main' classpath = configurations.dx args '--dex' diff --git a/smali/build.gradle b/smali/build.gradle index 507c79ad5..da14a4f4e 100644 --- a/smali/build.gradle +++ b/smali/build.gradle @@ -48,11 +48,17 @@ configurations { implementation.exclude group: 'org.antlr', module: 'antlr' } +compileJava.dependsOn(generateGrammarSource, jflex) + sourceSets { main { resources { // This adds the generated .tokens files to the jar srcDir 'build/generated-src/antlr/main' + } + java { + srcDir 'build/generated-src/antlr/main' + srcDir 'build/generated-src/jflex' } } } @@ -63,7 +69,8 @@ idea { if (buildDir.exists()) { excludeDirs.addAll(buildDir.listFiles()) } - for (sourceDir in (sourceDirs + testSourceDirs)) { + def allSourceDirs = project.sourceSets.main.allSource.srcDirs + project.sourceSets.test.allSource.srcDirs + for (sourceDir in allSourceDirs) { excludeDirs.remove(sourceDir); while ((sourceDir = sourceDir.getParentFile()) != null) { excludeDirs.remove(sourceDir); @@ -87,21 +94,24 @@ dependencies { processResources.inputs.property('version', version) processResources.expand('version': version) +processResources.dependsOn(generateGrammarSource) // Build a separate jar that contains all dependencies -task fatJar(type: Jar, dependsOn: jar) { +task fatJar(type: Jar, dependsOn: [jar, ':util:jar', ':dexlib2:jar']) { from sourceSets.main.output from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } - classifier = 'fat' + archiveClassifier = 'fat' manifest { attributes('Main-Class': 'org.jf.smali.Main') } doLast { + def rootLibsDirProvider = rootProject.layout.buildDirectory.dir('libs') if (!System.getProperty('os.name').toLowerCase().contains('windows')) { - ant.symlink(link: file("${destinationDirectory.get()}/smali.jar"), resource: archivePath, overwrite: true) + mkdir rootLibsDirProvider.get() + ant.symlink(link: file("${rootLibsDirProvider.get()}/smali.jar"), resource: archiveFile.get().asFile, overwrite: true) } } } @@ -160,6 +170,7 @@ task proguard(type: proguard.gradle.ProGuardTask, dependsOn: fatJar) { sourcesJar { duplicatesStrategy = DuplicatesStrategy.INCLUDE + dependsOn jflex, generateGrammarSource } tasks.getByPath(':release').dependsOn(proguard)