第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

Gradle badass-runtime-plugin 和 ProGuard Gradle 插件

神不在的星期二 2023-10-13 15:09:23
如何在jPackage之前運(yùn)行proguard?介紹我使用 gradle 插件在 JavaFx 中開發(fā)一個(gè)應(yīng)用程序,并使用 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"我當(dāng)前的gradle版本是:gradle-5.6.2-all問題描述如何使用 proguard 以便在 jPackage 完成其工作之前對(duì)代碼進(jìn)行混淆和優(yōu)化?我可以運(yùn)行 proguard 任務(wù),但是當(dāng)我運(yùn)行 jPackage 時(shí),代碼不會(huì)被混淆!我找到了舊版 gradle 版本的教程(Tutorial),但是我不確定如何將其與當(dāng)前插件混合使用。我嘗試了一些代碼片段,但它們都無法構(gòu)建,我不想用一堆不起作用的代碼來混淆這個(gè)主題。
查看完整描述

2 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

問題

當(dāng)您運(yùn)行 Gradle 任務(wù)時(shí),您必須根據(jù)任務(wù)的依賴關(guān)系考慮之前將執(zhí)行的任務(wù)。

您可以看到 proguard 自定義任務(wù)在它們之間連接起來,當(dāng)您運(yùn)行 時(shí)./gradlew runProguard,實(shí)際上您會(huì)得到以下任務(wù)順序:

:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:unpackProguardOutput

:runProguard

如果您現(xiàn)在想添加runtime插件,對(duì)于類似runtime或 之類的任務(wù)jpackage,您將得到以下命令:


:cleanClasses

:compileJava

:processResources

:classes

:jar

:startScripts

:installDist

:jre

:runtime

你看到問題了嗎?根本沒有調(diào)用 proguard 任務(wù),因?yàn)槲覀儧]有修改任務(wù)runtime以依賴 proguard。


解決方案


正如您所看到的,runtime和都jpackage依賴于項(xiàng)目的 jar。因此,一個(gè)簡(jiǎn)單的修復(fù)方法是將任務(wù)連接到任務(wù)proguard中jar,因此我們從 proguarded 類而不是原始類中創(chuàng)建一個(gè) jar。


在你的構(gòu)建中類似這樣的東西應(yīng)該可以工作:


jar.dependsOn(unpackProguardOutput)

但是,資源存在問題(受到混淆的 FXML 文件將被原始文件覆蓋),因?yàn)樵假Y源會(huì)再次復(fù)制到 jar 中。


所以我們可以修改jar任務(wù)來代替:


jar {

? ? dependsOn 'cleanAfterProguard'

? ? manifest {

? ? ? ? attributes(

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

? ? ? ? )

? ? }

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

}

現(xiàn)在這將是任務(wù)順序:


:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:jar

:startScripts

:installDist

:jre

:runtime

現(xiàn)在運(yùn)行./gradlew clean runtime將生成一個(gè)基于 proguarded 的運(yùn)行時(shí)映像hellofx.jar。跑步build/image/bin/hellofx應(yīng)該有效。


這同樣適用于jpackage:


:cleanClasses

:compileJava

:processResources

:classes

:proguard

:cleanAfterProguard

:jar

:startScripts

:installDist

:jre

:jpackageImage

:jpackage

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

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

查看完整回答
反對(duì) 回復(fù) 2023-10-13
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

buildscript提供依賴項(xiàng)的塊看起來完全不同:

buildscript {

? ? repositories {

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

? ? }

? ? dependencies {

? ? ? ? classpath ':proguard:'

? ? }

}

雖然它抱怨說確實(shí)如此unable to resolve class proguard.gradle.ProGuardTask,但很可能不會(huì)有任何proguard.gradle.ProGuardTask。這dependsOn: 'obfuscatedJar'很奇怪,因?yàn)槿蝿?wù)myProguardTask應(yīng)該會(huì)混淆它。


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

? ? ...

}

還要確保/usr/local/java/proguard/lib甚至已安裝,例如。,locate proguard因?yàn)閷?duì)于 Java,Android SDK 不提供它 - 因此必須將其作為buildscript依賴項(xiàng)提供。然后,您必須proguard.txt根據(jù)混淆時(shí)拋出的所有警告編寫一個(gè)自定義。


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


dependencies {

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

}



查看完整回答
反對(duì) 回復(fù) 2023-10-13
  • 2 回答
  • 0 關(guān)注
  • 163 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)