Magisk/stub/build.gradle.kts

145 lines
4.4 KiB
Plaintext
Raw Normal View History

2021-09-03 04:31:33 +00:00
import io.michaelrocks.paranoid.plugin.ParanoidExtension
import org.gradle.internal.os.OperatingSystem
import java.io.OutputStream
import java.io.PrintStream
import java.nio.file.Paths
2020-07-04 13:53:31 +00:00
plugins {
id("com.android.application")
}
2021-09-03 04:31:33 +00:00
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("io.michaelrocks:paranoid-gradle-plugin:0.3.5")
}
}
apply(plugin = "io.michaelrocks.paranoid")
extensions.configure<ParanoidExtension>("paranoid") {
obfuscationSeed = if (RAND_SEED != 0) RAND_SEED else null
includeSubprojects = true
}
2020-07-04 13:53:31 +00:00
android {
val canary = !Config.version.contains(".")
2021-03-05 13:09:25 +00:00
val url = Config["DEV_CHANNEL"] ?: if (canary) null
else "https://cdn.jsdelivr.net/gh/topjohnwu/magisk-files@${Config.version}/app-release.apk"
2020-07-04 13:53:31 +00:00
defaultConfig {
applicationId = "com.topjohnwu.magisk"
versionCode = 1
2021-09-03 04:31:33 +00:00
versionName = "1.0"
2021-01-23 04:45:37 +00:00
buildConfigField("int", "STUB_VERSION", Config.stubVersion)
2021-03-05 13:09:25 +00:00
buildConfigField("String", "APK_URL", url?.let { "\"$it\"" } ?: "null" )
2020-07-04 13:53:31 +00:00
}
buildTypes {
getByName("release") {
isMinifyEnabled = true
2020-12-29 10:39:47 +00:00
isShrinkResources = false
2020-10-16 05:59:40 +00:00
proguardFiles("proguard-rules.pro")
2020-07-04 13:53:31 +00:00
}
}
2020-08-13 16:40:24 +00:00
dependenciesInfo {
includeInApk = false
includeInBundle = false
}
2020-07-04 13:53:31 +00:00
}
2021-09-03 04:31:33 +00:00
// Make sure we have a working manifest while building
val ensureManifest by tasks.registering {
val manifest = file("src/main/AndroidManifest.xml")
if (!manifest.exists()) {
PrintStream(manifest).use {
it.println("<manifest package=\"com.topjohnwu.magisk\"/>")
}
}
}
tasks["preBuild"]?.dependsOn(ensureManifest)
android.applicationVariants.all {
val manifest = file("src/main/AndroidManifest.xml")
val outSrcDir = File(buildDir, "generated/source/obfuscate/$name")
val templateDir = file("template")
val resDir = file("res")
val androidJar = Paths.get(android.sdkDirectory.path, "platforms",
android.compileSdkVersion, "android.jar")
val aaptCommand = if (OperatingSystem.current().isWindows) "aapt2.exe" else "aapt2"
val aapt = Paths.get(android.sdkDirectory.path,
"build-tools", android.buildToolsVersion, aaptCommand)
val dummy = object : OutputStream() {
override fun write(b: Int) {}
override fun write(bytes: ByteArray, off: Int, len: Int) {}
}
val genSrcTask = tasks.register("generate${name.capitalize()}ObfuscatedSources") {
doLast {
val xml = genStubManifest(templateDir, outSrcDir)
PrintStream(manifest).use {
it.print(xml)
}
val compileTmp = File.createTempFile("tmp", ".zip")
val linkTmp = File.createTempFile("tmp", ".zip")
val optTmp = File.createTempFile("tmp", ".zip")
val stubXml = File.createTempFile("tmp", ".xml")
try {
PrintStream(stubXml).use {
it.println("<manifest package=\"com.topjohnwu.magisk\"/>")
}
exec {
commandLine(aapt, "compile",
"-o", compileTmp,
"--dir", resDir)
standardOutput = dummy
errorOutput = dummy
}
exec {
commandLine(aapt, "link",
"-o", linkTmp,
"-I", androidJar,
"--min-sdk-version", android.defaultConfig.minSdk,
"--target-sdk-version", android.defaultConfig.targetSdk,
"--manifest", stubXml,
"--java", outSrcDir, compileTmp)
standardOutput = dummy
errorOutput = dummy
}
exec {
commandLine(aapt, "optimize",
"-o", optTmp,
"--collapse-resource-names", linkTmp)
standardOutput = dummy
errorOutput = dummy
}
genEncryptedResources(optTmp, outSrcDir)
} finally {
compileTmp.delete()
linkTmp.delete()
optTmp.delete()
stubXml.delete()
}
}
}
registerJavaGeneratingTask(genSrcTask, outSrcDir)
}
2020-07-04 13:53:31 +00:00
dependencies {
implementation(project(":app:shared"))
}