apply plugin: 'com.android.application' apply plugin: 'checkstyle' apply plugin: 'pmd' /* gets the version name from the latest Git tag, stripping the leading v off */ def getVersionName = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--tags', '--always' standardOutput = stdout } return stdout.toString().trim() } def isCi = "true".equals(System.getenv("CI")) def preDexEnabled = "true".equals(System.getProperty("pre-dex", "true")) def fullApplicationId = "org.fdroid.fdroid" def basicApplicationId = "org.fdroid.basic" // yes, this actually needs both quotes https://stackoverflow.com/a/41391841 def privilegedExtensionApplicationId = '"org.fdroid.fdroid.privileged"' android { compileSdkVersion 27 buildToolsVersion '27.0.3' defaultConfig { versionCode 1008000 versionName getVersionName() testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" /* The Android Testing Support Library collects analytics to continuously improve the testing experience. More specifically, it uploads a hash of the package name of the application under test for each invocation. If you do not wish to upload this data, you can opt-out by passing the following argument to the test runner: disableAnalytics "true". */ testInstrumentationRunnerArguments disableAnalytics: 'true' } buildTypes { // use proguard on debug too since we have unknowingly broken // release builds before. all { minifyEnabled true useProguard true shrinkResources true buildConfigField "String", "PRIVILEGED_EXTENSION_PACKAGE_NAME", privilegedExtensionApplicationId proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'src/androidTest/proguard-rules.pro' } debug { applicationIdSuffix ".debug" resValue "string", "applicationId", fullApplicationId + applicationIdSuffix versionNameSuffix "-debug" println 'buildTypes.debug defaultConfig.versionCode ' + defaultConfig.versionCode } } flavorDimensions "base" productFlavors { full { dimension "base" applicationId fullApplicationId resValue "string", "applicationId", fullApplicationId } basic { dimension "base" applicationId basicApplicationId resValue "string", "applicationId", basicApplicationId } } compileOptions { compileOptions.encoding = "UTF-8" } aaptOptions { cruncherEnabled = false } dexOptions { // Improve build server performance by allowing disabling of pre-dexing // see http://tools.android.com/tech-docs/new-build-system/tips#TOC-Improving-Build-Server-performance // Skip pre-dexing when running on CI or when disabled via -Dpre-dex=false. preDexLibraries = preDexEnabled && !isCi } testOptions { unitTests { includeAndroidResources = true // prevent tests from dying on android.util.Log calls returnDefaultValues = true all { // All the usual Gradle options. testLogging { events "skipped", "failed", "standardOut", "standardError" showStandardStreams = true } } } } sourceSets { test { java.srcDirs += "$projectDir/src/testShared/java" } androidTest { java.srcDirs += "$projectDir/src/testShared/java" } } lintOptions { checkReleaseBuilds false abortOnError true htmlReport true xmlReport false textReport false lintConfig file("lint.xml") } packagingOptions { exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/INDEX.LIST' exclude '.readme' } } dependencies { implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:gridlayout-v7:27.1.1' implementation 'com.android.support:support-annotations:27.1.1' implementation 'com.android.support:recyclerview-v7:27.1.1' implementation 'com.android.support:cardview-v7:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:support-vector-drawable:27.1.1' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:palette-v7:27.1.1' implementation 'com.android.support:preference-v14:27.1.1' implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' implementation 'com.google.zxing:core:3.3.3' implementation 'info.guardianproject.netcipher:netcipher:2.0.0-beta1' implementation 'info.guardianproject.panic:panic:1.0' implementation 'commons-io:commons-io:2.6' implementation 'commons-net:commons-net:3.6' implementation 'ch.acra:acra:4.9.1' implementation 'io.reactivex:rxjava:1.1.0' implementation 'com.hannesdorfmann:adapterdelegates3:3.0.1' implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.5' implementation 'com.fasterxml.jackson.core:jackson-core:2.8.11' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.8.11' implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.11' implementation 'org.bouncycastle:bcprov-jdk15on:1.60' fullImplementation 'org.bouncycastle:bcpkix-jdk15on:1.60' fullImplementation 'cc.mvdan.accesspoint:library:0.2.0' fullImplementation 'org.jmdns:jmdns:3.5.5' fullImplementation 'org.nanohttpd:nanohttpd:2.3.1' testImplementation 'org.robolectric:robolectric:3.8' testImplementation "com.android.support.test:monitor:1.0.2" testImplementation 'org.bouncycastle:bcprov-jdk15on:1.60' testImplementation 'junit:junit:4.12' testImplementation 'org.mockito:mockito-core:2.7.22' androidTestImplementation 'com.android.support:support-annotations:27.1.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test:rules:1.0.2' androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3' } checkstyle { toolVersion = '7.2' } task checkstyle(type: Checkstyle) { configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml") source 'src/main/java', 'src/test/java', 'src/androidTest/java' include '**/*.java' classpath = files() } pmd { toolVersion = '5.5.1' consoleOutput = true } task pmdMain(type: Pmd) { dependsOn 'assembleDebug' ruleSetFiles = files("${project.rootDir}/config/pmd/rules.xml", "${project.rootDir}/config/pmd/rules-main.xml") ruleSets = [] // otherwise defaults clash with the list in rules.xml source 'src/main/java' include '**/*.java' exclude '**/kellinwood/**/*.java' } task pmdTest(type: Pmd) { dependsOn 'assembleDebug' ruleSetFiles = files("${project.rootDir}/config/pmd/rules.xml", "${project.rootDir}/config/pmd/rules-test.xml") ruleSets = [] // otherwise defaults clash with the list in rules.xml source 'src/test/java', 'src/androidTest/java' include '**/*.java' } task pmd(dependsOn: [pmdMain, pmdTest]) {}