这个插件可以让你的 Android 项目 (AGP 8.x) 构建里,于 R8 之前 插入 Zelix KlassMaster 进行「字符串加密 和 控制流混淆」
compile → [zkmObfuscate<Variant>] → R8(shrink + optimize + rename) → dex
使用 AGP 官方 ScopedArtifacts.toTransform(CLASSES)
注意:必须用 JDK
然后由于我现在懒得上任何一个仓库所以你需要 Clone 本仓库并
./gradlew publishToMavenLocal发到你的本地
然后编辑你的 settings.gradle.kts,在 pluginManagement.repositories 第一行加 mavenLocal():
pluginManagement {
repositories {
+ mavenLocal()
google()
mavenCentral()
gradlePluginPortal()
}
}编辑你的 app/build.gradle.kts
plugins {
id("com.android.application")
// ...
+ id("cn.xcnya.obfuscation") version "0.1.3" // 在这加上插件
}
android {
buildTypes {
release {
+ isMinifyEnabled = true // 必须开 R8,插件默认只对 release 生效
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
}然后在 android{} 块之后插入混淆配置
obfuscation {
zkmJar.set(File("E:/Java-Obf/tools/ZKM 25.0.0/ZKM.jar")) // 你的班级大帅路径
// 以下均有默认,通常不用动:
// enabled.set(true) // 临时跳过本地 release 迭代时设 false
// buildTypes.set(listOf("release")) // 只对哪些 buildType 生效
// encryptStrings.set(true) // 字符串加密
// flowObfuscation.set(true) // 控制流混淆,要是和 R8 optimizer 打架就给他关了(ProGuard 的控制流其实也不是不行)
// renameInZkm.set(false) // 让 R8 改就够了,你要用 ZKM 改记得给 R8 加 -dontobfuscate
// scriptTemplate.set(file("my.zkm.template")) // 覆盖内置模板
}然后构建你的 APP 即可
./gradlew :app:assembleReleaseAGPL v3