mirror of
https://github.com/topjohnwu/Magisk.git
synced 2026-01-21 08:53:36 -08:00
74 lines
2.4 KiB
Kotlin
74 lines
2.4 KiB
Kotlin
|
|
import org.eclipse.jgit.internal.storage.file.FileRepository
|
|
import org.gradle.api.Plugin
|
|
import org.gradle.api.Project
|
|
import org.gradle.kotlin.dsl.provideDelegate
|
|
import java.io.File
|
|
import java.util.Properties
|
|
import java.util.Random
|
|
|
|
// Set non-zero value here to fix the random seed for reproducible builds
|
|
// CI builds are always reproducible
|
|
val RAND_SEED = if (System.getenv("CI") != null) 42 else 0
|
|
lateinit var RANDOM: Random
|
|
|
|
private val props = Properties()
|
|
private var commitHash = ""
|
|
private val supportAbis = setOf("armeabi-v7a", "x86", "arm64-v8a", "x86_64", "riscv64")
|
|
private val defaultAbis = setOf("armeabi-v7a", "x86", "arm64-v8a", "x86_64")
|
|
|
|
object Config {
|
|
operator fun get(key: String): String? {
|
|
val v = props[key] as? String ?: return null
|
|
return v.ifBlank { null }
|
|
}
|
|
|
|
fun contains(key: String) = get(key) != null
|
|
|
|
val version: String get() = get("version") ?: commitHash
|
|
val versionCode: Int get() = get("magisk.versionCode")!!.toInt()
|
|
val stubVersion: String get() = get("magisk.stubVersion")!!
|
|
val abiList: Set<String> get() {
|
|
val abiList = get("abiList") ?: return defaultAbis
|
|
return abiList.split(Regex("\\s*,\\s*")).toSet() intersect supportAbis
|
|
}
|
|
}
|
|
|
|
fun Project.rootFile(path: String): File {
|
|
val file = File(path)
|
|
return if (file.isAbsolute) file
|
|
else File(rootProject.file(".."), path)
|
|
}
|
|
|
|
class MagiskPlugin : Plugin<Project> {
|
|
override fun apply(project: Project) = project.applyPlugin()
|
|
|
|
private fun Project.applyPlugin() {
|
|
initRandom(rootProject.file("dict.txt"))
|
|
props.clear()
|
|
|
|
// Get gradle properties relevant to Magisk
|
|
props.putAll(properties.filter { (key, _) -> key.startsWith("magisk.") })
|
|
|
|
// Load config.prop
|
|
val configPath: String? by this
|
|
val configFile = rootFile(configPath ?: "config.prop")
|
|
if (configFile.exists()) {
|
|
configFile.inputStream().use {
|
|
val config = Properties()
|
|
config.load(it)
|
|
// Remove properties that should be passed by commandline
|
|
config.remove("abiList")
|
|
props.putAll(config)
|
|
}
|
|
}
|
|
|
|
// Commandline override
|
|
findProperty("abiList")?.let { props.put("abiList", it) }
|
|
|
|
val repo = FileRepository(rootFile(".git"))
|
|
val refId = repo.refDatabase.exactRef("HEAD").objectId
|
|
commitHash = repo.newObjectReader().abbreviate(refId, 8).name()
|
|
}
|
|
}
|