From aba540885ee6a6a0ed20b4aff36bc1295381cc2d Mon Sep 17 00:00:00 2001 From: Connor Tumbleson Date: Thu, 23 Oct 2014 08:05:14 -0500 Subject: [PATCH] Gradle Refresh - move common functions to functions.gradle - use dependency aliases whenever possible - update to gradle 2.1 - cleanup build.gradle files with proper spacing - remove duplicated blocks - compile incrementally (java) Gradle Refresh v2 - alphabetical order dependencies - added jdk8 to build tests - moved script to file for travis Gradle Refresh v2a - fix travis - remove pointless logging jdk8 isn't ready for travis --- .travis.yml | 2 +- brut.apktool/NOTICE-smali | 98 --------------- brut.apktool/apktool-cli/build.gradle | 4 +- brut.apktool/apktool-lib/build.gradle | 35 +++--- brut.j.common/build.gradle | 2 +- brut.j.dir/build.gradle | 6 +- brut.j.util/build.gradle | 8 +- build.gradle | 154 ++++++++++------------- gradle/functions.gradle | 49 ++++++++ gradle/wrapper/gradle-wrapper.properties | 4 +- scripts/travis-ci/run-tests.sh | 2 + settings.gradle | 18 +-- 12 files changed, 156 insertions(+), 226 deletions(-) delete mode 100644 brut.apktool/NOTICE-smali create mode 100644 gradle/functions.gradle create mode 100755 scripts/travis-ci/run-tests.sh diff --git a/.travis.yml b/.travis.yml index 54a840fe..4969db70 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ jdk: before_install: - sudo apt-get update -qq - sudo apt-get install -qq libstdc++6:i386 lib32z1 expect -script: "./gradlew build fatJar proguard" +script: ./scripts/travis-ci/run-tests.sh branches: only: - master diff --git a/brut.apktool/NOTICE-smali b/brut.apktool/NOTICE-smali deleted file mode 100644 index ab562167..00000000 --- a/brut.apktool/NOTICE-smali +++ /dev/null @@ -1,98 +0,0 @@ -The majority of smali/baksmali is written and copyrighted by me (Ben Gruver) -and released under the following license: - -******************************************************************************* -Copyright (c) 2010 Ben Gruver (JesusFreke) -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -******************************************************************************* - - -Various portions of the code are taken from the Android Open Source Project, -and are used in accordance with the following license: - -******************************************************************************* -Copyright (C) 2007 The Android Open Source Project - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -******************************************************************************* - - -The smali mojo plugin is (very loosely) based on an unknown mojo plugin with -the following license: - -******************************************************************************* -Copyright 2001-2005 The Apache Software Foundation. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -******************************************************************************* - - -The RadixTree implementation in the "util" project is taken from -http://code.google.com/p/radixtree/ (version .3), and is used with minor -modifications in accordance with the following license: - -******************************************************************************* -The MIT License - -Copyright (c) 2008 Tahseen Ur Rehman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -******************************************************************************* diff --git a/brut.apktool/apktool-cli/build.gradle b/brut.apktool/apktool-cli/build.gradle index 2dce3d92..041b4c41 100644 --- a/brut.apktool/apktool-cli/build.gradle +++ b/brut.apktool/apktool-cli/build.gradle @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -apply plugin: 'fatjar' +apply plugin: 'eu.appsatori.fatjar' configurations { proguard @@ -21,7 +21,7 @@ configurations { dependencies { compile project(':brut.apktool:apktool-lib') - proguard 'net.sf.proguard:proguard-base:4.8' + proguard depends.proguard } gradle.taskGraph.whenReady { diff --git a/brut.apktool/apktool-lib/build.gradle b/brut.apktool/apktool-lib/build.gradle index 9ae3d0b5..aeb1a18b 100644 --- a/brut.apktool/apktool-lib/build.gradle +++ b/brut.apktool/apktool-lib/build.gradle @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import org.apache.tools.ant.filters.* processResources { @@ -30,21 +29,21 @@ processResources { } dependencies { - compile ("junit:junit:4.10") { - exclude(module: 'hamcrest-core') -} + compile("junit:junit:4.10") { + exclude(module: 'hamcrest-core') + } -compile project(':brut.j.dir'), - project(':brut.j.util'), - project(':brut.j.common'), - project(':brut.apktool.smali:util'), - project(':brut.apktool.smali:dexlib2'), - project(':brut.apktool.smali:baksmali'), - project(':brut.apktool.smali:smali'), - "org.yaml:snakeyaml:1.12", - "xpp3:xpp3:1.1.4c", - "xmlunit:xmlunit:1.3", - "com.google.guava:guava:12.0", - "org.apache.commons:commons-lang3:3.1" -} - \ No newline at end of file + compile project(':brut.j.dir'), + project(':brut.j.util'), + project(':brut.j.common'), + project(':brut.apktool.smali:util'), + project(':brut.apktool.smali:dexlib2'), + project(':brut.apktool.smali:baksmali'), + project(':brut.apktool.smali:smali'), + depends.snakeyaml, + depends.xmlpull, + depends.guava, + depends.commons_lang + + testCompile depends.xmlunit +} \ No newline at end of file diff --git a/brut.j.common/build.gradle b/brut.j.common/build.gradle index 17d20c5a..017f8365 100644 --- a/brut.j.common/build.gradle +++ b/brut.j.common/build.gradle @@ -15,6 +15,6 @@ */ dependencies { - testCompile 'junit:junit:4.8.2' + testCompile depends.junit } diff --git a/brut.j.dir/build.gradle b/brut.j.dir/build.gradle index 67e7d58a..b5e94512 100644 --- a/brut.j.dir/build.gradle +++ b/brut.j.dir/build.gradle @@ -15,7 +15,7 @@ */ dependencies { - compile project(':brut.j.common'), - project(':brut.j.util') - testCompile "junit:junit:3.8.1" + compile project(':brut.j.common'), + project(':brut.j.util') + testCompile depends.junit } diff --git a/brut.j.util/build.gradle b/brut.j.util/build.gradle index 0eddbf31..72999864 100644 --- a/brut.j.util/build.gradle +++ b/brut.j.util/build.gradle @@ -15,8 +15,8 @@ */ dependencies { - compile project(':brut.j.common') - compile "commons-io:commons-io:2.4", - "org.apache.commons:commons-compress:1.4.1" - testCompile "junit:junit:3.8.1" + compile project(':brut.j.common'), + depends.commons_io, + depends.commons_compress + testCompile depends.junit } diff --git a/build.gradle b/build.gradle index 647a6446..567ac60c 100644 --- a/build.gradle +++ b/build.gradle @@ -15,77 +15,47 @@ */ apply plugin: 'java' apply plugin: 'maven' +apply from: 'gradle/functions.gradle' def apktoolversion_major = '2.0.0' def apktoolversion_minor = 'RC2'; -if (!('release' in gradle.startParameter.taskNames)) { - def hash = getCheckedOutGitCommitHash(); - - if (hash == null) { - project.ext.set("hash", "dirty") - project.ext.set("apktool_version", apktoolversion_major + "-dirty") - println "Building SNAPSHOT (no .git folder found)"; - } else { - project.ext.set("hash", hash); - project.ext.set("apktool_version", apktoolversion_major + "-" + hash + "-SNAPSHOT"); - println "Building SNAPSHOT (" + getCheckedOutBranch() + "): " + hash; - } -} else { - project.ext.set("hash", "") - project.ext.set("apktool_version", apktoolversion_major + "-" + apktoolversion_minor); - println "Building RELEASE (" + getCheckedOutBranch() + "): " + apktoolversion_major + "-" + apktoolversion_minor; -} - -// https://gist.github.com/JonasGroeger/7620911 -def getCheckedOutGitCommitHash() { - def gitFolder = "$projectDir/.git/" - def takeFromHash = 6 - - def head - try { - head = new File(gitFolder + "HEAD").text.split(":") - } catch(Exception e) { - return null; - } - - def isCommit = head.length == 1 - if(isCommit) return head[0].trim().take(takeFromHash) - - def refHead = new File(gitFolder + head[1].trim()) - refHead.text.trim().take takeFromHash -} - -def getCheckedOutBranch() { - def gitFolder = "$projectDir/.git/" - - def head - try { - head = new File(gitFolder + "HEAD").text.split("/") - return head[2].trim(); - } catch(Exception e) { - return ""; - } - return "SNAPSHOT"; -} - -repositories { - mavenCentral() -} - sourceCompatibility = 1.7 targetCompatibility = 1.7 +if (!('release' in gradle.startParameter.taskNames)) { + def hash = getCheckedOutGitCommitHash(); + + if (hash == null) { + project.ext.set("hash", "dirty") + project.ext.set("apktool_version", apktoolversion_major + "-dirty") + println "Building SNAPSHOT (no .git folder found)"; + } else { + project.ext.set("hash", hash); + project.ext.set("apktool_version", apktoolversion_major + "-" + hash + "-SNAPSHOT"); + println "Building SNAPSHOT (" + getCheckedOutBranch() + "): " + hash; + } +} else { + project.ext.set("hash", "") + project.ext.set("apktool_version", apktoolversion_major + "-" + apktoolversion_minor); + println "Building RELEASE (" + getCheckedOutBranch() + "): " + apktoolversion_major + "-" + apktoolversion_minor; +} + build.doFirst { def javaVersion = System.getProperty("java.version") + //fail the build if we don't have the expected Java version if (!javaVersion.startsWith("1.7")) { - throw new GradleException("You can fix this problem!\nWe found a " + javaVersion + " JDK\nPlease update JAVA_HOME to use a 1.7 JDK\nCurrently it is set to: " + System.getProperty("java.home")); - } + throw new GradleException("You can fix this problem!\n" + + "We found a " + javaVersion + " JDK\n" + + "Please update JAVA_HOME to use a 1.7 JDK\n" + + "Currently it is set to: " + System.getProperty("java.home") + ); + } } task wrapper(type: Wrapper) { - gradleVersion = '1.10' + gradleVersion = '2.1' } // used for official releases only. Please don't use @@ -94,44 +64,52 @@ task release { buildscript { repositories { - mavenCentral() + jcenter() } - tasks.withType(Compile) { + tasks.withType(JavaCompile) { options.encoding = "UTF-8" + options.incremental = true } dependencies { - classpath 'eu.appsatori:gradle-fatjar-plugin:0.2-rc1' + classpath 'eu.appsatori:gradle-fatjar-plugin:0.3' } } subprojects { - apply plugin: 'java' - apply plugin: 'maven' - apply plugin: 'idea' - - ext { - depends = [guava: 'com.google.guava:guava:14.0', - findbugs: 'com.google.code.findbugs:jsr305:1.3.9', - junit: 'junit:junit:4.6', - antlr_runtime: 'org.antlr:antlr-runtime:3.5', - antlr: 'org.antlr:antlr:3.5', - commons_cli: 'commons-cli:commons-cli:1.2', - jflex: 'de.jflex:jflex:1.4.3', - proguard: 'net.sf.proguard:proguard-base:4.8' - ] - } - - repositories { - mavenCentral() - } - - dependencies { - testCompile 'junit:junit:4.8.2' - } - - test { - testLogging { - exceptionFormat = 'full' + apply plugin: 'java' + apply plugin: 'maven' + apply plugin: 'idea' + + ext { + depends = [ + antlr: 'org.antlr:antlr:3.5', + antlr_runtime: 'org.antlr:antlr-runtime:3.5', + commons_cli: 'commons-cli:commons-cli:1.2', + commons_compress: 'org.apache.commons:commons-compress:1.4.1', + commons_io: 'commons-io:commons-io:2.4', + commons_lang: 'org.apache.commons:commons-lang3:3.1', + findbugs: 'com.google.code.findbugs:jsr305:1.3.9', + guava: 'com.google.guava:guava:14.0', + jflex: 'de.jflex:jflex:1.4.3', + junit: 'junit:junit:4.6', + proguard: 'net.sf.proguard:proguard-base:4.8', + snakeyaml: 'org.yaml:snakeyaml:1.12', + xmlpull: 'xpp3:xpp3:1.1.4c', + xmlunit: 'xmlunit:xmlunit:1.3', + ] + } + + repositories { + mavenCentral() + } + + dependencies { + testCompile depends.junit + } + + test { + testLogging { + exceptionFormat = 'full' + } } - } } diff --git a/gradle/functions.gradle b/gradle/functions.gradle new file mode 100644 index 00000000..b910a870 --- /dev/null +++ b/gradle/functions.gradle @@ -0,0 +1,49 @@ +/** + * Copyright 2011 Ryszard Wiśniewski + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +gradle.allprojects { + + // https://gist.github.com/JonasGroeger/7620911 + ext.getCheckedOutGitCommitHash = { + def gitFolder = "$projectDir/.git/" + def takeFromHash = 6 + + def head + try { + head = new File(gitFolder + "HEAD").text.split(":") + } catch(Exception e) { + return null; + } + + def isCommit = head.length == 1 + if(isCommit) return head[0].trim().take(takeFromHash) + + def refHead = new File(gitFolder + head[1].trim()) + refHead.text.trim().take takeFromHash + } + + ext.getCheckedOutBranch = { + def gitFolder = "$projectDir/.git/" + + def head + try { + head = new File(gitFolder + "HEAD").text.split("/") + return head[2].trim(); + } catch(Exception e) { + return "SNAPSHOT"; + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index acf97b0b..5da386a5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Feb 08 18:00:26 CST 2014 +#Thu Oct 23 07:11:01 CDT 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://downloads.gradle.org/distributions/gradle-1.10-all.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.1-bin.zip diff --git a/scripts/travis-ci/run-tests.sh b/scripts/travis-ci/run-tests.sh new file mode 100755 index 00000000..c22ef629 --- /dev/null +++ b/scripts/travis-ci/run-tests.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env sh +./gradlew build fatJar proguard diff --git a/settings.gradle b/settings.gradle index 2dc3253f..90b7f05a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,10 +1,10 @@ include 'brut.j.common', - 'brut.j.util', - 'brut.j.dir', - 'brut.apktool.smali:util', - 'brut.apktool.smali:dexlib2', - 'brut.apktool.smali:baksmali', - 'brut.apktool.smali:smali', - 'brut.apktool.smali:dexlib2:accessorTestGenerator', - 'brut.apktool:apktool-lib', - 'brut.apktool:apktool-cli' \ No newline at end of file + 'brut.j.util', + 'brut.j.dir', + 'brut.apktool.smali:util', + 'brut.apktool.smali:dexlib2', + 'brut.apktool.smali:baksmali', + 'brut.apktool.smali:smali', + 'brut.apktool.smali:dexlib2:accessorTestGenerator', + 'brut.apktool:apktool-lib', + 'brut.apktool:apktool-cli' \ No newline at end of file