首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gradle java应用程序示例

gradle java应用程序示例
EN

Stack Overflow用户
提问于 2020-10-14 14:52:40
回答 1查看 4.9K关注 0票数 3

我对混淆和试图弄清楚如何混淆使用gradle创建的java应用程序很陌生。这个想法是在gradle构建之后创建的可运行的jar被混淆了。这是gradle文件

代码语言:javascript
复制
plugins {
    // Apply the java plugin to add support for Java
    id 'java'
    // Apply the application plugin to add support for building a CLI application.
    id 'application'
}
repositories {
     mavenCentral()
}
dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:29.0-jre'
    // Use JUnit test framework
    testImplementation 'junit:junit:4.13'
}
application {
    // Define the main class for the application.
    mainClassName = 'com.abc.gradle.hello.App'
}
jar {
    manifest {
        attributes 'Main-Class': 'com.abc.gradle.hello.App'
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-15 15:51:19

最后,我可以通过以下步骤实现这一点

  1. 创建一个可运行的jar,并将所有依赖库复制到目录“依赖项”中,并在清单中添加类路径。

任务createJar(类型: Jar) {println(“清除.”)清除清单{属性(‘主类’:'com.abc.gradle.hello.App','Class-Path':configurations.default.collect {‘依赖/’+ it.getName() }.join(‘') }}{ configurations.compile.collect {it.isDirectory(’)}}?it : zipTree(it) }}与jar println "${outputJar} created“}

  1. 复制依赖项

任务copyDepends(类型:复制){从configurations.default到"${dependsDir}“}

  1. 用Proguard混淆库

任务进程保护(类型: proguard.gradle.ProGuardTask) {println(“执行混淆.”)配置‘"${buildDir}/libs/${rootProject.name}_proguard.jar“’injars ${outputJar} "${outputJar}”外部injars "${System.getProperty('java.home')}/lib/rt.jar“库injars "${dependsDir}”}

这是完整的build.gradle

代码语言:javascript
复制
buildscript {
 repositories {
    mavenCentral()
 }
 dependencies {
    classpath 'net.sf.proguard:proguard-gradle:6.0.3'
    classpath 'net.sf.proguard:proguard-base:6.0.3'
 }
}

plugins {
 id 'java'
 id 'application'
}

repositories {
  mavenCentral()
}

dependencies {
   implementation 'org.slf4j:slf4j-api:1.7.30'
   implementation 'ch.qos.logback:logback-classic:1.2.3'
   implementation 'ch.qos.logback:logback-core:1.2.3'
   testImplementation 'junit:junit:4.13'
}

def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
def dependsDir = "${buildDir}/libs/dependencies/"
def runnableJar = "${rootProject.name}_fat.jar";

task copyDepends(type: Copy) {
 from configurations.default
 into "${dependsDir}"
}

task createJar(type: Jar) {
 println("Cleaning...")
 clean
 manifest {
    attributes('Main-Class': 'com.abc.gradle.hello.App',
            'Class-Path': configurations.default.collect { 'dependencies/' + 
   it.getName() }.join(' ')
    )
  }
  from {
    configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
   } with jar
   println "${outputJar} created"
  }

task proguard(type: proguard.gradle.ProGuardTask) {
   println("Performing obfuscation..")
   configuration 'proguard.conf'
   injars "${outputJar}"
   outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"

   libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
   libraryjars "${dependsDir}"

  }

Proguard.conf

代码语言:javascript
复制
-keep public class * {
   public * ;
 }

分级命令混淆

代码语言:javascript
复制
gradle createJar
gradle copyDepends
gradle proguard
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64355998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档