You've already forked TrickyStore
mirror of
https://github.com/5ec1cff/TrickyStore.git
synced 2025-09-06 06:37:07 +00:00
193 lines
6.6 KiB
Plaintext
193 lines
6.6 KiB
Plaintext
import android.databinding.tool.ext.capitalizeUS
|
|
import org.apache.tools.ant.filters.FixCrLfFilter
|
|
import org.apache.tools.ant.filters.ReplaceTokens
|
|
import java.security.MessageDigest
|
|
|
|
plugins {
|
|
alias(libs.plugins.agp.app)
|
|
alias(libs.plugins.lsplugin.cmaker)
|
|
}
|
|
|
|
val moduleId: String by rootProject.extra
|
|
val moduleName: String by rootProject.extra
|
|
val verCode: Int by rootProject.extra
|
|
val verName: String by rootProject.extra
|
|
val commitHash: String by rootProject.extra
|
|
val abiList: List<String> by rootProject.extra
|
|
val androidMinSdkVersion: Int by rootProject.extra
|
|
val author: String by rootProject.extra
|
|
val description: String by rootProject.extra
|
|
val moduleDescription = description
|
|
|
|
android {
|
|
defaultConfig {
|
|
ndk {
|
|
abiFilters.addAll(abiList)
|
|
}
|
|
}
|
|
|
|
buildFeatures {
|
|
prefab = true
|
|
}
|
|
|
|
externalNativeBuild {
|
|
cmake {
|
|
version = "3.28.0+"
|
|
path("src/main/cpp/CMakeLists.txt")
|
|
}
|
|
}
|
|
}
|
|
|
|
cmaker {
|
|
default {
|
|
arguments += arrayOf(
|
|
"-DANDROID_STL=none",
|
|
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
|
|
"-DANDROID_ALLOW_UNDEFINED_SYMBOLS=ON",
|
|
"-DMODULE_NAME=$moduleId",
|
|
"-DCMAKE_CXX_STANDARD=23",
|
|
"-DCMAKE_C_STANDARD=23",
|
|
"-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON",
|
|
"-DCMAKE_VISIBILITY_INLINES_HIDDEN=ON",
|
|
"-DCMAKE_CXX_VISIBILITY_PRESET=hidden",
|
|
"-DCMAKE_C_VISIBILITY_PRESET=hidden",
|
|
)
|
|
abiFilters(*abiList.toTypedArray())
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation(libs.cxx)
|
|
}
|
|
|
|
evaluationDependsOn(":service")
|
|
|
|
afterEvaluate {
|
|
android.applicationVariants.forEach { variant ->
|
|
val variantLowered = variant.name.lowercase()
|
|
val variantCapped = variant.name.capitalizeUS()
|
|
val buildTypeCapped = variant.buildType.name.replaceFirstChar { it.uppercase() }
|
|
val buildTypeLowered = variant.buildType.name.lowercase()
|
|
val supportedAbis = abiList.map {
|
|
when (it) {
|
|
"arm64-v8a" -> "arm64"
|
|
"armeabi-v7a" -> "arm"
|
|
"x86" -> "x86"
|
|
"x86_64" -> "x64"
|
|
else -> error("unsupported abi $it")
|
|
}
|
|
}.joinToString(" ")
|
|
|
|
val moduleDir = layout.buildDirectory.file("outputs/module/$variantLowered")
|
|
val zipFileName =
|
|
"$moduleName-$verName-$verCode-$commitHash-$buildTypeLowered.zip".replace(' ', '-')
|
|
|
|
val prepareModuleFilesTask = task<Sync>("prepareModuleFiles$variantCapped") {
|
|
group = "module"
|
|
dependsOn(
|
|
"assemble$variantCapped",
|
|
":service:package$buildTypeCapped"
|
|
)
|
|
into(moduleDir)
|
|
from(rootProject.layout.projectDirectory.file("README.md"))
|
|
from(layout.projectDirectory.file("template")) {
|
|
exclude("module.prop", "customize.sh", "post-fs-data.sh", "service.sh", "daemon")
|
|
filter<FixCrLfFilter>("eol" to FixCrLfFilter.CrLf.newInstance("lf"))
|
|
}
|
|
from(layout.projectDirectory.file("template")) {
|
|
include("module.prop")
|
|
expand(
|
|
"moduleId" to moduleId,
|
|
"moduleName" to moduleName,
|
|
"versionName" to "$verName ($verCode-$commitHash-$variantLowered)",
|
|
"versionCode" to verCode,
|
|
"author" to author,
|
|
"description" to moduleDescription,
|
|
)
|
|
}
|
|
from(layout.projectDirectory.file("template")) {
|
|
include("customize.sh", "post-fs-data.sh", "service.sh", "daemon")
|
|
val tokens = mapOf(
|
|
"DEBUG" to if (buildTypeLowered == "debug") "true" else "false",
|
|
"SONAME" to moduleId,
|
|
"SUPPORTED_ABIS" to supportedAbis,
|
|
"MIN_SDK" to androidMinSdkVersion.toString()
|
|
)
|
|
filter<ReplaceTokens>("tokens" to tokens)
|
|
filter<FixCrLfFilter>("eol" to FixCrLfFilter.CrLf.newInstance("lf"))
|
|
}
|
|
from(project(":service").tasks.getByName("package$buildTypeCapped").outputs) {
|
|
include("*.apk")
|
|
rename(".*\\.apk", "service.apk")
|
|
}
|
|
from(layout.buildDirectory.file("intermediates/stripped_native_libs/$variantLowered/strip${variantCapped}DebugSymbols/out/lib")) {
|
|
exclude("**/libbinder.so", "**/libutils.so")
|
|
into("lib")
|
|
}
|
|
|
|
doLast {
|
|
fileTree(moduleDir).visit {
|
|
if (isDirectory) return@visit
|
|
val md = MessageDigest.getInstance("SHA-256")
|
|
file.forEachBlock(4096) { bytes, size ->
|
|
md.update(bytes, 0, size)
|
|
}
|
|
file(file.path + ".sha256").writeText(
|
|
org.apache.commons.codec.binary.Hex.encodeHexString(
|
|
md.digest()
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
val zipTask = task<Zip>("zip$variantCapped") {
|
|
group = "module"
|
|
dependsOn(prepareModuleFilesTask)
|
|
archiveFileName.set(zipFileName)
|
|
destinationDirectory.set(layout.projectDirectory.file("release").asFile)
|
|
from(moduleDir)
|
|
}
|
|
|
|
val pushTask = task<Exec>("push$variantCapped") {
|
|
group = "module"
|
|
dependsOn(zipTask)
|
|
commandLine("adb", "push", zipTask.outputs.files.singleFile.path, "/data/local/tmp")
|
|
}
|
|
|
|
val installKsuTask = task<Exec>("installKsu$variantCapped") {
|
|
group = "module"
|
|
dependsOn(pushTask)
|
|
commandLine(
|
|
"adb", "shell", "su", "-c",
|
|
"/data/adb/ksud module install /data/local/tmp/$zipFileName"
|
|
)
|
|
}
|
|
|
|
val installMagiskTask = task<Exec>("installMagisk$variantCapped") {
|
|
group = "module"
|
|
dependsOn(pushTask)
|
|
commandLine(
|
|
"adb",
|
|
"shell",
|
|
"su",
|
|
"-M",
|
|
"-c",
|
|
"magisk --install-module /data/local/tmp/$zipFileName"
|
|
)
|
|
}
|
|
|
|
task<Exec>("installKsuAndReboot$variantCapped") {
|
|
group = "module"
|
|
dependsOn(installKsuTask)
|
|
commandLine("adb", "reboot")
|
|
}
|
|
|
|
task<Exec>("installMagiskAndReboot$variantCapped") {
|
|
group = "module"
|
|
dependsOn(installMagiskTask)
|
|
commandLine("adb", "reboot")
|
|
}
|
|
}
|
|
}
|