dc81e0254c
This release merged our pull requests for round corners on tablet for top line, and nicer dismiss-on-swipe animation. https://github.com/nispok/snackbar/pull/134 https://github.com/nispok/snackbar/pull/135
258 lines
12 KiB
Groovy
258 lines
12 KiB
Groovy
apply plugin: 'com.android.application'
|
|
apply plugin: 'witness'
|
|
apply plugin: 'jacoco'
|
|
apply plugin: 'com.github.kt3k.coveralls'
|
|
|
|
dependencies {
|
|
// NOTE: Always use fixed version codes not dynamic ones, e.g. 0.7.3 instead of 0.7.+, see README for more information
|
|
// NOTE: libraries are pinned to a specific build, see below
|
|
|
|
// from local Android SDK
|
|
compile 'com.android.support:support-v4:22.2.0'
|
|
compile 'com.android.support:appcompat-v7:22.2.0'
|
|
compile 'com.android.support:design:22.2.0'
|
|
compile 'com.android.support:recyclerview-v7:22.2.0'
|
|
compile 'com.android.support:cardview-v7:22.2.0'
|
|
|
|
// Unit tests in the local JVM with Robolectric
|
|
// https://developer.android.com/training/testing/unit-testing/local-unit-tests.html
|
|
// http://robolectric.org/getting-started/
|
|
// http://www.vogella.com/tutorials/Robolectric/article.html
|
|
testCompile 'junit:junit:4.12'
|
|
testCompile 'org.robolectric:robolectric:3.0'
|
|
|
|
// UI testing with Espresso
|
|
androidTestCompile 'com.android.support.test:runner:0.3'
|
|
androidTestCompile 'com.android.support.test:rules:0.3'
|
|
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2'
|
|
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2'
|
|
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2') {
|
|
exclude group: 'com.android.support', module: 'appcompat'
|
|
exclude group: 'com.android.support', module: 'support-v4'
|
|
exclude module: 'recyclerview-v7'
|
|
}
|
|
|
|
// Temporary workaround for bug: https://code.google.com/p/android-test-kit/issues/detail?id=136
|
|
// from https://github.com/googlesamples/android-testing/blob/master/build.gradle#L21
|
|
configurations.all {
|
|
resolutionStrategy.force 'com.android.support:support-annotations:22.2.0'
|
|
}
|
|
|
|
// JCenter etc.
|
|
compile 'com.eftimoff:android-patternview:1.0.1@aar'
|
|
compile 'com.journeyapps:zxing-android-embedded:2.3.0@aar'
|
|
compile 'com.journeyapps:zxing-android-integration:2.3.0@aar'
|
|
compile 'com.google.zxing:core:3.2.0'
|
|
compile 'com.jpardogo.materialtabstrip:library:1.0.9'
|
|
compile 'com.getbase:floatingactionbutton:1.9.0'
|
|
compile 'org.commonjava.googlecode.markdown4j:markdown4j:2.2-cj-1.0'
|
|
compile 'com.splitwise:tokenautocomplete:1.3.3@aar'
|
|
compile 'se.emilsjolander:stickylistheaders:2.6.0'
|
|
compile 'org.sufficientlysecure:html-textview:1.2'
|
|
compile 'com.mikepenz:materialdrawer:3.0.9@aar'
|
|
compile 'com.mikepenz:iconics:1.0.2'
|
|
compile 'com.mikepenz.iconics:octicons-typeface:2.2.0@aar'
|
|
compile 'com.mikepenz.iconics:meteocons-typeface:1.1.1@aar'
|
|
compile 'com.mikepenz.iconics:community-material-typeface:1.0.0@aar'
|
|
compile 'com.nispok:snackbar:2.11.0'
|
|
compile 'com.squareup.okhttp:okhttp:2.4.0'
|
|
|
|
// libs as submodules
|
|
compile project(':extern:openpgp-api-lib:openpgp-api')
|
|
compile project(':extern:openkeychain-api-lib:openkeychain-intents')
|
|
compile project(':extern:spongycastle:core')
|
|
compile project(':extern:spongycastle:pg')
|
|
compile project(':extern:spongycastle:pkix')
|
|
compile project(':extern:spongycastle:prov')
|
|
compile project(':extern:minidns')
|
|
compile project(':extern:KeybaseLib:Lib')
|
|
compile project(':extern:safeslinger-exchange:safeslinger-exchange')
|
|
}
|
|
|
|
// Output of ./gradlew -q calculateChecksums
|
|
// Comment out the libs referenced as git submodules!
|
|
dependencyVerification {
|
|
verify = [
|
|
'com.android.support:support-v4:7bb6e40a18774aa2595e4d8f9fe0ae14e61670f71a1279272fb0b79b8be71180',
|
|
'com.android.support:appcompat-v7:2d5867698410b41f75140c91d6c1e58da74ae0f97baf6e0bdd1f7cc1017ceb2c',
|
|
'com.android.support:design:41ff5f700d1bf8c190e1d3ac33582f92ad6e1f3b1080c8b8e2ac4f7b703be76a',
|
|
'com.android.support:recyclerview-v7:3a8da14585fa1c81f06e7cef4d93a7641f0323d8f984ff9a7bd7a6e416b46888',
|
|
'com.android.support:cardview-v7:15b934f69f10d85f5adc12231ba1b708618a7daf6e5102af42addf2c67a85e2c',
|
|
'com.eftimoff:android-patternview:cec80e7265b8d8278b3c55b5fcdf551e4600ac2c8bf60d8dd76adca538af0b1e',
|
|
'com.journeyapps:zxing-android-embedded:702a4f58154dbd9baa80f66b6a15410f7a4d403f3e73b66537a8bfb156b4b718',
|
|
'com.journeyapps:zxing-android-integration:562737821b6d34c899b6fd2234ce0a8a31e02ff1fd7c59f6211961ce9767c7c8',
|
|
'com.google.zxing:core:7fe5a8ff437635a540e56317649937b768b454795ce999ed5f244f83373dee7b',
|
|
'com.jpardogo.materialtabstrip:library:c6ef812fba4f74be7dc4a905faa4c2908cba261a94c13d4f96d5e67e4aad4aaa',
|
|
'com.getbase:floatingactionbutton:052aa2a94e49e5dccc97cb99f2add87e8698b84859f0e3ac181100c0bc7640ca',
|
|
'org.commonjava.googlecode.markdown4j:markdown4j:e952e825d29e1317d96f79f346bfb6786c7c5eef50bd26e54a80823704b62e13',
|
|
'com.splitwise:tokenautocomplete:20bee71cc59b3828eb000b684d46ddf738efd56b8fee453a509cd16fda42c8cb',
|
|
'se.emilsjolander:stickylistheaders:8c05981ec5725be33f7cee5e68c13f3db49cd5c75f1aaeb04024920b1ef96ad4',
|
|
'org.sufficientlysecure:html-textview:1d3bed31ef837437154de8d2362a0e6b0e59b6c3535d87ee48c2fab12c84f9bb',
|
|
'com.mikepenz:materialdrawer:70c3efb3842461db41df6a918ea93969a7da21e63c092be838b153e5a47a17bf',
|
|
'com.mikepenz:iconics:c1a02203d8e0d638959463c00af3ab9096e0a7c1ad5928762eb10ef5ce8a63cd',
|
|
'com.mikepenz.iconics:octicons-typeface:67ed7d456a9ce5f5307b85f955797bfb3dd674e2f6defb31c6b8bbe2ede290be',
|
|
'com.mikepenz.iconics:meteocons-typeface:39a8a9e70cd8287cdb119af57a672a41dd09240dba6697f5a0dbda1ccc33298b',
|
|
'com.mikepenz.iconics:community-material-typeface:f1c5afee5f0f10d66beb3ed0df977246a02a9c46de4e05d7c0264bcde53b6b7f',
|
|
'com.squareup.okhttp:okhttp:bc0da7ac1f5441619faa2082811938acf7df97e4a8e08f0e043ff4937414d5ad',
|
|
// 'OpenKeychain.extern.openpgp-api-lib:openpgp-api:b918e50a7876fad34e4020ee41418039772c5fe8dd36825720ca8ffecb7d0f06',
|
|
// 'OpenKeychain.extern.openkeychain-api-lib:openkeychain-intents:111d7d53b9e920ad3405f8f3eb0ab7bd3aee66d577442452754b83c7c1c1d49a',
|
|
// 'com.madgag.spongycastle:core:97276487be598747ba78c063c90cea7fc3c7ad9bc7aeba03c0b9c98692052b8a',
|
|
// 'com.madgag.spongycastle:pg:da319de706d946f178140959c74aec126f7803f1104dbad89bb1f55a53f6e1a9',
|
|
// 'com.madgag.spongycastle:pkix:979aa4b2aaef94866e0f97b05b1922244eaf8b650f3691a3c44760ff0a41562b',
|
|
// 'com.madgag.spongycastle:prov:902a484219bbf4e395a1c32da65b2453133e195bcc92336dc8c33b7c58edcd60',
|
|
// 'OpenKeychain.extern:minidns:8274d50124d9584e95df0c5da7798269ac9caf0eab560df929c2c658ca624037',
|
|
// 'OpenKeychain.extern.KeybaseLib:Lib:d52e7888cea6de9e077501bb533270b2a86b52cb8af49e5f44ee8c4bb19ea017',
|
|
// 'OpenKeychain.extern.safeslinger-exchange:safeslinger-exchange:76e5da6b4f5f8835b12649e17569f0d0d8d89552815a61383c128545632689d1',
|
|
// 'OpenKeychain.extern.snackbar:lib:6847a73d2680558d35f0b384ac3ed006532c0a2306598b000db94ef18aab62aa',
|
|
'com.android.support:support-annotations:beac5cae60bdb597df9af9c916f785c2f71f8c8ae4be9a32d4298dea85496a42',
|
|
'com.squareup.okio:okio:b53c1760864e1c39b5275d9023e2a6fbe8f3189e6e67b4c87877b8ec8f92e05a',
|
|
'com.nispok:snackbar:46b5eb9d630d329e13c2ce00ee9fb115ffb66c23c72cff32ee97eedd76824c6f',
|
|
]
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion 15
|
|
targetSdkVersion 22
|
|
versionCode 34100
|
|
versionName "3.4.1"
|
|
applicationId "org.sufficientlysecure.keychain"
|
|
// the androidjunitrunner is broken regarding coverage, see here:
|
|
// https://code.google.com/p/android/issues/detail?id=170607
|
|
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
|
// this workaround runner fixes the coverage problem, BUT doesn't work
|
|
// with android studio single test execution. use it to generate coverage
|
|
// data, but keep the other one otherwis
|
|
// testInstrumentationRunner "org.sufficientlysecure.keychain.JacocoWorkaroundJUnitRunner"
|
|
}
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_7
|
|
targetCompatibility JavaVersion.VERSION_1_7
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
minifyEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
|
|
// Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE.
|
|
buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.account\""
|
|
|
|
// Reference them in .xml files.
|
|
resValue "string", "account_type", "org.sufficientlysecure.keychain.account"
|
|
}
|
|
|
|
debug {
|
|
applicationIdSuffix ".debug"
|
|
|
|
// Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE.
|
|
buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.debug.account\""
|
|
|
|
// Reference them in .xml files.
|
|
resValue "string", "account_type", "org.sufficientlysecure.keychain.debug.account"
|
|
|
|
// Enable code coverage (Jacoco)
|
|
testCoverageEnabled true
|
|
}
|
|
}
|
|
|
|
/*
|
|
* To sign release build, create file gradle.properties in ~/.gradle/ with this content:
|
|
*
|
|
* signingStoreLocation=/home/key.store
|
|
* signingStorePassword=xxx
|
|
* signingKeyAlias=alias
|
|
* signingKeyPassword=xxx
|
|
*/
|
|
if (project.hasProperty('signingStoreLocation') &&
|
|
project.hasProperty('signingStorePassword') &&
|
|
project.hasProperty('signingKeyAlias') &&
|
|
project.hasProperty('signingKeyPassword')) {
|
|
println "Found sign properties in gradle.properties! Signing build…"
|
|
|
|
signingConfigs {
|
|
release {
|
|
storeFile file(signingStoreLocation)
|
|
storePassword signingStorePassword
|
|
keyAlias signingKeyAlias
|
|
keyPassword signingKeyPassword
|
|
}
|
|
}
|
|
|
|
buildTypes.release.signingConfig = signingConfigs.release
|
|
} else {
|
|
buildTypes.release.signingConfig = null
|
|
}
|
|
|
|
// NOTE: Lint is disabled because it slows down builds,
|
|
// to enable it comment out the code at the bottom of this build.gradle
|
|
lintOptions {
|
|
// Do not abort build if lint finds errors
|
|
abortOnError false
|
|
|
|
checkAllWarnings true
|
|
htmlReport true
|
|
htmlOutput file('lint-report.html')
|
|
}
|
|
|
|
// Disable preDexing, causes com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) on some systems
|
|
dexOptions {
|
|
preDexLibraries = false
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'LICENSE.txt'
|
|
exclude 'META-INF/LICENSE.txt'
|
|
exclude 'META-INF/NOTICE.txt'
|
|
exclude '.readme'
|
|
}
|
|
}
|
|
|
|
// apply plugin: 'spoon'
|
|
|
|
task jacocoTestReport(type:JacocoReport) {
|
|
group = "Reporting"
|
|
description = "Generate Jacoco coverage reports"
|
|
|
|
classDirectories = fileTree(
|
|
dir: "${buildDir}/intermediates/classes/debug",
|
|
excludes: ['**/R.class',
|
|
'**/R$*.class',
|
|
'**/*$ViewInjector*.*',
|
|
'**/BuildConfig.*',
|
|
'**/Manifest*.*']
|
|
)
|
|
|
|
sourceDirectories = files("${buildDir.parent}/src/main/java")
|
|
additionalSourceDirs = files([
|
|
"${buildDir}/generated/source/buildConfig/debug",
|
|
"${buildDir}/generated/source/r/debug"
|
|
])
|
|
executionData = files([
|
|
"${buildDir}/jacoco/testDebug.exec",
|
|
"${buildDir}/outputs/code-coverage/connected/coverage.ec"
|
|
])
|
|
|
|
reports {
|
|
xml.enabled = true
|
|
html.enabled = true
|
|
}
|
|
}
|
|
|
|
// Fix for: No report file available: [/home/travis/build/open-keychain/open-keychain/OpenKeychain/build/reports/cobertura/coverage.xml, /home/travis/build/open-keychain/open-keychain/OpenKeychain/build/reports/jacoco/test/jacocoTestReport.xml]
|
|
coveralls {
|
|
jacocoReportPath 'build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml'
|
|
}
|
|
|
|
// NOTE: This disables Lint!
|
|
tasks.whenTaskAdded { task ->
|
|
if (task.name.contains('lint')) {
|
|
task.enabled = false
|
|
}
|
|
}
|
|
|