亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

神不在的星期二 2023-10-13 15:09:23
如何在jPackage之前運行proguard?介紹我使用 gradle 插件在 JavaFx 中開發一個應用程序,并使用 jPackager 打包它,也使用 gradle 插件。我使用的主要插件是:id 'org.openjfx.javafxplugin' version '0.0.8' id 'org.beryx.runtime' version '1.7.0' id "com.github.johnrengelman.shadow" version "5.1.0"我當前的gradle版本是:gradle-5.6.2-all問題描述如何使用 proguard 以便在 jPackage 完成其工作之前對代碼進行混淆和優化?我可以運行 proguard 任務,但是當我運行 jPackage 時,代碼不會被混淆!我找到了舊版 gradle 版本的教程(Tutorial),但是我不確定如何將其與當前插件混合使用。我嘗試了一些代碼片段,但它們都無法構建,我不想用一堆不起作用的代碼來混淆這個主題。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

問題

當您運行 Gradle 任務時,您必須根據任務的依賴關系考慮之前將執行的任務。

您可以看到 proguard 自定義任務在它們之間連接起來,當您運行 時./gradlew runProguard,實際上您會得到以下任務順序:

:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:unpackProguardOutput

:runProguard

如果您現在想添加runtime插件,對于類似runtime或 之類的任務jpackage,您將得到以下命令:


:cleanClasses

:compileJava

:processResources

:classes

:jar

:startScripts

:installDist

:jre

:runtime

你看到問題了嗎?根本沒有調用 proguard 任務,因為我們沒有修改任務runtime以依賴 proguard。


解決方案


正如您所看到的,runtime和都jpackage依賴于項目的 jar。因此,一個簡單的修復方法是將任務連接到任務proguard中jar,因此我們從 proguarded 類而不是原始類中創建一個 jar。


在你的構建中類似這樣的東西應該可以工作:


jar.dependsOn(unpackProguardOutput)

但是,資源存在問題(受到混淆的 FXML 文件將被原始文件覆蓋),因為原始資源會再次復制到 jar 中。


所以我們可以修改jar任務來代替:


jar {

? ? dependsOn 'cleanAfterProguard'

? ? manifest {

? ? ? ? attributes(

? ? ? ? ? ? ? ? 'Main-Class': 'org.openjfx.Launcher'

? ? ? ? )

? ? }

? ? from zipTree("${buildDir}/proguard/output.jar")

}

現在這將是任務順序:


:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:jar

:startScripts

:installDist

:jre

:runtime

現在運行./gradlew clean runtime將生成一個基于 proguarded 的運行時映像hellofx.jar。跑步build/image/bin/hellofx應該有效。


這同樣適用于jpackage:


:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:jar

:startScripts

:installDist

:jre

:jpackageImage

:jpackage

在這張圖片中,您可以看到 hellofx.app 中包含的 jar 僅包含 proguarded 類。

https://img1.sycdn.imooc.com/6528ed860001cc9606880801.jpg

查看完整回答
反對 回復 2023-10-13
?
米脂

TA貢獻1836條經驗 獲得超3個贊

buildscript提供依賴項的塊看起來完全不同:

buildscript {

? ? repositories {

? ? ? ? flatDir dirs: '/usr/local/java/proguard/lib'

? ? }

? ? dependencies {

? ? ? ? classpath ':proguard:'

? ? }

}

雖然它抱怨說確實如此unable to resolve class proguard.gradle.ProGuardTask,但很可能不會有任何proguard.gradle.ProGuardTask。這dependsOn: 'obfuscatedJar'很奇怪,因為任務myProguardTask應該會混淆它。


task myProguardTask(type: proguard.gradle.ProGuardTask) {

? ? ...

}

還要確保/usr/local/java/proguard/lib甚至已安裝,例如。,locate proguard因為對于 Java,Android SDK 不提供它 - 因此必須將其作為buildscript依賴項提供。然后,您必須proguard.txt根據混淆時拋出的所有警告編寫一個自定義。


更新proguard-gradle插件可能是另一種可能的選擇:


dependencies {

? ? classpath 'net.sf.proguard:proguard-gradle:6.2.0'

}



查看完整回答
反對 回復 2023-10-13
  • 2 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號