Skip to content

Repository files navigation

Gradle Plugin for ZKM

这个插件可以让你的 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:assembleRelease

License

AGPL v3

About

Insert Zelix KlassMaster (string encryption + control flow obfuscation) before R8

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages