Idea插件開發(fā)中使用ProGuard混淆代碼

配置gradle插件

gradle配置ProGuard插件

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'net.sf.proguard:proguard-gradle:6.2.2'
    }
}

添加混淆task

// idea 依賴所在目錄
def ideaPath = "xxx"

task proguard(type: proguard.gradle.ProGuardTask, dependsOn: jar) {
    // 輸出混淆前->混淆后的映射
    printmapping "$buildDir/mapping.txt"
    // 混淆規(guī)則文件
    configuration 'proguard-rules.pro'
    
    // 項目依賴jar
    libraryjars configurations.runtimeClasspath.collect()
    // jdk 依賴,區(qū)分jdk8 前后版本
    if (System.getProperty('java.version').startsWith('1.')) {
        libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
    } else {
        libraryjars "${System.getProperty('java.home')}/jmods/java.base.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
        libraryjars "${System.getProperty('java.home')}/jmods/java.desktop.jmod", jarfilter: '!**.jar', filter: '!module-info.class'
    }
    // 如果使用了插件,附加插件jar
    libraryjars fileTree("$ideaPath/plugins/java/lib").filter { !it.name.startsWith("debugger") }.collect()
    // idea 依賴的jar
    libraryjars files("$ideaPath/lib")


    def f = jar.archiveFile.get().asFile
    def p = new File(f.parent, "tmp.jar")
    def outPath = f.absolutePath
    if (p.exists()) {
        p.delete()
    }
    if (f.exists()) {
        f.renameTo(p)
    }

    // 混淆輸入
    injars p
    // 混淆輸出
    outjars file(outPath)
}

配置task依賴關(guān)系

prepareSandbox.dependsOn("proguard")

配置混淆文件

保證plugin.xml中使用到的class不會被混淆就可以了

如果有design文件,保證使用class的不被混淆

一般的ui只需要添加下面這個keep就可以了

-keep class * extends javax.swing.JComponent

最后運行 runIde 就可以看到混淆后的執(zhí)行效果了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容