2016-11-22 3 views
2

ProGuardを使用してコードを難読化し、出力コードを使用してShadowを使用して、必要な依存性をJARに追加します。ProGuard ObufscationとShadow Dependencies

現在、私は-obf JARと-all JARを取得しています。私が必要とするものは、難読化されたコードを持つ-all JARです。

import proguard.gradle.ProGuardTask 

apply plugin: 'com.github.johnrengelman.shadow' 
apply plugin: 'java' 

buildscript { 
    repositories { 
    mavenCentral() 
    jcenter() 
    } 

    dependencies { 
    classpath group: 'net.sf.proguard', name: 'proguard-gradle', version: '5.3.1' 
    classpath group: 'com.github.jengelman.gradle.plugins', name: 'shadow', version: '1.2.4' 
    } 
} 

repositories { 
    mavenCentral() 
    jcenter() 
} 

jar { 
    manifest { attributes("Main-Class": "com.skcraft.launcher.Launcher") } 
} 

dependencies { 
    compile 'org.projectlombok:lombok:1.12.2' 
    compile 'com.fasterxml.jackson.core:jackson-databind:2.3.0' 
    compile 'commons-lang:commons-lang:2.6' 
    compile 'commons-io:commons-io:1.2' 
    compile 'com.google.guava:guava:15.0' 
    compile 'com.beust:jcommander:1.32' 
    compile 'com.miglayout:miglayout:3.7.4' 
    compile 'com.google.code.findbugs:jsr305:3.0.0' 
    compile files ('libs/javax-crypto.jar') 
} 

processResources { 
    filesMatching('**/*.properties') { 
    filter { 
     it.replace('${project.version}', project.version) 
    } 
    } 
} 

task obfuscate(type: proguard.gradle.ProGuardTask) { 
    configuration '../proguard.txt' 

    injars jar 
    outjars "${buildDir}/libs/launcher-${version}-obf.jar" 

    libraryjars files(configurations.compile.collect()) 
} 

shadowJar { 
    dependencies { 
    exclude(dependency('org.projectlombok:lombok')) 
    } 
} 

build.dependsOn(obfuscate) 
build.dependsOn(shadowJar) 

task wrapper(type: Wrapper) { gradleVersion = "3.1" } 

私はshadowJarを使って思いついたのですが、それを難読化しましたが、proguard.txtを設定してコードを難読化する必要があります。私は以下これを行うにしようとしましたが、それはまだエラーを投げ、すべてのパッケージを難読化してみました:事前

答えて

1

私はそれを理解しました。私はここに解決策を掲載すると考えました。

shadowJar { 
from file("${buildDir}/libs/launcher-${version}-obf.jar") 
dependencies { 
    exclude(dependency('org.projectlombok:lombok')) 
} 
} 

ありがとう:

シャドウタスクを使用して

は、私はそれからの読み取りしたいファイルを指定することができました!

+0

は私にとってはうまくいきませんでした。私は最初に難読化された薄い瓶を作り、それをシャドウジャーのパラメータとして渡しました。しかし、生成されたjarファイルには、難読化されたコードはありませんでした。 ファットジャーを逆コンパイルすることで効果があるかどうかチェックしましたか? – wizneel

1

にあなたは、次のルールを削除する必要があります

# Include java runtime classes 
-libraryjars <java.home>/lib/rt.jar 

# Output a source map file 
-printmapping proguard.map 

# Keep filenames and line numbers 
-keepattributes SourceFile, LineNumberTable 

# Disable certain proguard optimizations which remove stackframes (same as Android defaults) 
-optimizations !method/inlining/* 

-keep public class * { 
    public protected *; 
} 

-keepclassmembernames class * { 
    java.lang.Class class$(java.lang.String); 
    java.lang.Class class$(java.lang.String, boolean); 
} 

-keepclasseswithmembernames class * { 
    native <methods>; 
} 

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

-keep class !com.skcraft.** { *; } 

ありがとう:

-keep public class * { 
    public protected *; 
} 

このルールは暗黙のうちにあなた自身のコード以外すべてを保持します:

-keep class !com.skcraft.** { *; } 

ルールを終了するn除外パターン(!)は、パターンに一致しないすべてのものが保持されることを意味します。

+0

まだ動作しませんでしたが、それでもエラーをスローするすべてのファイルを変更しようとしました。 –

+0

申し訳ありませんが、私はあなたの問題を誤解しました。あなたの難読化タスクには、 'libraryjars files(configurations.compile.collect())'があります.ProGuardを使って単一のuber jarにすべての依存関係を集めたい場合は、injarthに変更する必要があります。さらに、この傷害は正しく働くためにアウトジャーの上になければなりません。 –

+0

あなたはまだ誤解されています。私はすでにJARをすべての依存関係で渡すことができます。私のコード以外のすべてを無視するようにproguardの設定を変更する必要があります。com.skcraftパッケージ –