2016-11-15 13 views
1

AndroidスタジオのJavaモジュール用build.gradleファイルでproguardを使用しようとしていますが、結果のソースコードを確認する必要がありますが、他のプロジェクトはビルドタスクが失敗します。以下に、私がやろうとしていることとエラーを示します。javaモジュールでproguardを使用するAndroidスタジオ

import proguard.gradle.ProGuardTask 

apply plugin: 'java' 

task proguardFiles(dependsOn: compileJava, type: ProGuardTask) { 
    // 
} 


Error:Cause: startup failed: 
script '...Path\build.gradle': 1: unable to resolve class proguard.gradle.ProGuardTask 
@ line 1, column 1. 
import proguard.gradle.ProGuardTask 
^ 

1 error 

ソリューションについてのアイデアはありますか?

答えて

2

解決策が自分の質問に見つかりました。これは、これが必要な人に役立つことを願っています。これを入れて同じファイルまたはプロジェクト構成(Gradleのファイル)の中に、他の場所で

import proguard.gradle.ProGuardTask 

はGradleのファイルの先頭に含める

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'net.sf.proguard:proguard-gradle:5.2.1' 
    } 
} 

は最終的にカスタムproguardTaskを定義します。

task proguardFiles(type: ProGuardTask, dependsOn: compileJava) { 
    printmapping "$buildDir/outputs/mapping/mapping.txt" 
    configuration 'proguard-rules.pro' 

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

    injars sourceSets.main.output 

    outjars "$buildDir/libs/myJarName-${version}.jar" 
} 

と動作するはずです。

1

あなたがあなたのアンドロイドモジュールlibフォルダに出力フォルダからjarファイルをコピーせずに、あなたのJava libがProGuardのしたい場合は、ここでは1つの実行可能な解決策だ:

import proguard.gradle.ProGuardTask 

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

task proguardFiles(type: ProGuardTask, dependsOn: compileJava) { 
    // make jar task wait for proguardFiles task finish 
    tasks.jar.dependsOn.add(proguardFiles) 

    println "proguarding" 

    printmapping "$buildDir/mapping.txt" 
    configuration 'proguard-rules.pro' 
    libraryjars files(configurations.compile.findAll {}.collect()) 
    injars sourceSets.main.output 

    // files output type, don't use jar 
    outjars "$buildDir/libs/${project.name}" 
    delete "$buildDir/libs/${project.name}" 

    doLast { 
     println "copying product:${sourceSets.main.output.classesDir}" 

     // replace orginal class files with proguarded class files 
     delete "${sourceSets.main.output.classesDir}" 
     copy { 
      from "$buildDir/libs/${project.name}" 
      into "${sourceSets.main.output.classesDir}" 
     } 
    } 
} 
関連する問題