Home | History | Annotate | Download | only in baksmali
      1 /*
      2  * Copyright 2012, Google Inc.
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are
      7  * met:
      8  *
      9  *     * Redistributions of source code must retain the above copyright
     10  * notice, this list of conditions and the following disclaimer.
     11  *     * Redistributions in binary form must reproduce the above
     12  * copyright notice, this list of conditions and the following disclaimer
     13  * in the documentation and/or other materials provided with the
     14  * distribution.
     15  *     * Neither the name of Google Inc. nor the names of its
     16  * contributors may be used to endorse or promote products derived from
     17  * this software without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     23  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     24  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     25  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     29  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 buildscript {
     33     repositories {
     34         mavenCentral()
     35     }
     36     dependencies {
     37         classpath depends.proguard_gradle
     38     }
     39 }
     40 
     41 dependencies {
     42     compile project(':util')
     43     compile project(':dexlib2')
     44     compile depends.guava
     45     compile depends.jcommander
     46 
     47     testCompile depends.junit
     48     testCompile project(':smali')
     49 }
     50 
     51 processResources.inputs.property('version', version)
     52 processResources.expand('version': version)
     53 
     54 // Build a separate jar that contains all dependencies
     55 task fatJar(type: Jar) {
     56     from sourceSets.main.output
     57     from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
     58 
     59     classifier = 'fat'
     60 
     61     manifest {
     62         attributes('Main-Class': 'org.jf.baksmali.Main')
     63     }
     64 
     65     doLast {
     66         if (!System.getProperty('os.name').toLowerCase().contains('windows')) {
     67             ant.symlink(link: file("${destinationDir}/baksmali.jar"), resource: archivePath, overwrite: true)
     68         }
     69     }
     70 }
     71 tasks.getByPath('build').dependsOn(fatJar)
     72 
     73 uploadArchives {
     74     repositories.mavenDeployer {
     75         pom.project {
     76             description 'baksmali is a disassembler for dalvik bytecode'
     77             scm {
     78                 url 'https://github.com/JesusFreke/smali/tree/master/baksmali'
     79             }
     80         }
     81     }
     82 }
     83 
     84 task proguard(type: proguard.gradle.ProGuardTask, dependsOn: fatJar) {
     85     def outFile = fatJar.destinationDir.getPath() + '/' + fatJar.baseName + '-' + fatJar.version + '-small' + '.' + fatJar.extension
     86 
     87     injars fatJar.archivePath
     88     outjars outFile
     89 
     90     libraryjars "${System.properties['java.home']}/lib/rt.jar"
     91 
     92     dontobfuscate
     93     dontoptimize
     94 
     95     keep 'public class org.jf.baksmali.Main { public static void main(java.lang.String[]); }'
     96     keep 'public class org.jf.util.jcommander.ColonParameterSplitter'
     97     keep 'class com.beust.jcommander.** { *; }'
     98     keepclassmembers 'enum * { public static **[] values(); public static ** valueOf(java.lang.String); }'
     99 
    100     dontwarn 'com.google.common.**'
    101     dontnote 'com.google.common.**'
    102 }
    103 
    104 tasks.getByPath(':release').dependsOn(proguard)
    105 
    106 task fastbuild(dependsOn: build) {
    107 }
    108 
    109 task fb(dependsOn: fastbuild) {
    110 }
    111 
    112 tasks.getByPath('javadoc').onlyIf({
    113     !gradle.taskGraph.hasTask(fastbuild)
    114 })
    115 
    116 tasks.getByPath('test').onlyIf({
    117     !gradle.taskGraph.hasTask(fastbuild)
    118 })