plugins { id 'java' } group = 'dev.maelstrom' version = '0.3-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.10.0') testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() } tasks.register('extractApk', JavaExec) { onlyIf { !file('build/extracted').exists() } classpath = files('tools/apktool_2.9.3.jar') args = ['d', 'source-apk/tumblr.apk', '-o', 'build/extracted'] } tasks.register('mergeSmali') { dependsOn tasks.extractApk doLast { copy { into 'build/smali-merged' from('src/main/smali') from('build/extracted') { include 'smali_classes*/**', 'smali/**' } duplicatesStrategy 'exclude' } } } tasks.register('smali') { dependsOn tasks.mergeSmali doLast { mkdir('build/dex') javaexec { classpath = fileTree('tools/d2j').filter { it.name.endsWith('.jar') } println(classpath.files) mainClass = 'com.googlecode.d2j.smali.SmaliCmd' args = ['-o', 'build/dex/classes.dex', 'build/smali-merged/smali'] } } } // NOTE: Maybe broken if gradle thinks the extracted files are newer? tasks.register('mergeResources') { dependsOn tasks.extractApk dependsOn tasks.smali doLast { // copy { // Copy from extracted // from 'build/extracted' // into 'build/merged' // //exclude 'smali_classes*', 'smali' // } // copy { // Copy resources from src // from 'src/main/resources' // into 'build/merged' // } // copy { // Copy smali from src // from 'src/main/smali' // into 'build/merged' // } copy { into('build/merged') from('build/extracted') { exclude 'smali_classes*', 'smali' } from('build/dex') from('src/main/resources') duplicatesStrategy 'include' } } } tasks.register('buildApk', JavaExec) { dependsOn mergeResources classpath = files('tools/apktool_2.9.3.jar') args = ['b', 'build/merged', '-o', 'build/merged-apktool/tumblr-ykit.apk'] }