291 lines
14 KiB
Groovy
291 lines
14 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:23.1.1'
|
|
compile 'com.android.support:appcompat-v7:23.1.1'
|
|
compile 'com.android.support:design:23.1.1'
|
|
compile 'com.android.support:recyclerview-v7:23.1.1'
|
|
compile 'com.android.support:cardview-v7:23.1.1'
|
|
|
|
// 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'
|
|
testCompile 'org.mockito:mockito-core:1.10.19'
|
|
|
|
// 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:23.1.1'
|
|
}
|
|
|
|
// JCenter etc.
|
|
compile 'com.eftimoff:android-patternview:1.0.3@aar'
|
|
compile 'com.journeyapps:zxing-android-embedded:3.0.2@aar'
|
|
compile 'com.google.zxing:core:3.2.0'
|
|
compile 'com.jpardogo.materialtabstrip:library:1.1.0'
|
|
compile 'com.getbase:floatingactionbutton:1.10.1'
|
|
compile 'org.commonjava.googlecode.markdown4j:markdown4j:2.2-cj-1.0'
|
|
compile 'org.ocpsoft.prettytime:prettytime:3.2.7.Final'
|
|
compile 'com.splitwise:tokenautocomplete:2.0.2@aar'
|
|
compile 'se.emilsjolander:stickylistheaders:2.7.0'
|
|
compile 'org.sufficientlysecure:html-textview:1.3'
|
|
compile 'com.mikepenz:materialdrawer:4.4.2@aar'
|
|
compile 'com.mikepenz:materialize:0.2.7'
|
|
compile 'com.mikepenz:iconics-core:1.7.9@aar'
|
|
compile 'com.mikepenz:google-material-typeface:1.2.0.1@aar'
|
|
compile 'com.mikepenz:fontawesome-typeface:4.4.0.1@aar'
|
|
compile 'com.mikepenz:community-material-typeface:1.2.64.1@aar'
|
|
compile 'com.nispok:snackbar:2.11.0'
|
|
compile 'com.squareup.okhttp:okhttp:2.5.0'
|
|
compile 'com.squareup.okhttp:okhttp-urlconnection:2.5.0'
|
|
compile 'org.apache.james:apache-mime4j-core:0.7.2'
|
|
compile 'org.apache.james:apache-mime4j-dom:0.7.2'
|
|
compile 'org.thoughtcrime.ssl.pinning:AndroidPinning:1.0.0'
|
|
compile 'com.cocosw:bottomsheet:1.1.1@aar'
|
|
|
|
// 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: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:5c7dceb6c824089fe80f502e5206264048ef8bffa4e8ddeab180b81723e79b7f',
|
|
'com.android.support:appcompat-v7:0a8762214382b7e8d4b989b4ac10b5c846b957d767ccb7bccbc6be5afa885a82',
|
|
'com.android.support:design:41a9cd75ca78f25df5f573db7cedf8bb66beae00c330943923ba9f3e2051736d',
|
|
'com.android.support:recyclerview-v7:7606373da0931a1e62588335465a0e390cd676c98117edab29220317495faefd',
|
|
'com.android.support:cardview-v7:5a5bc04a278662bfafdea5b11b2108a4b354dca6c68958b312f6f45cc5fe2e38',
|
|
'com.eftimoff:android-patternview:2e7a2bbfb4fed229d4b5598aa4e69e45066fbea72c971d69461db7d916cb7ebc',
|
|
'com.journeyapps:zxing-android-embedded:561c5d94391342bb77689b8d32a320d085a11853f72afda1128d595b815ef563',
|
|
'com.google.zxing:core:7fe5a8ff437635a540e56317649937b768b454795ce999ed5f244f83373dee7b',
|
|
'com.jpardogo.materialtabstrip:library:24d19232b319f8c73e25793432357919a7ed972186f57a3b2c9093ea74ad8311',
|
|
'com.getbase:floatingactionbutton:3edefa511aac4d90794c7b0496aca59cff2eee1e32679247b4f85acbeee05240',
|
|
'org.commonjava.googlecode.markdown4j:markdown4j:e952e825d29e1317d96f79f346bfb6786c7c5eef50bd26e54a80823704b62e13',
|
|
'org.ocpsoft.prettytime:prettytime:a6bc2641b3ab7873df604b77b6680c75b86d98e78afefb367940972f925591b5',
|
|
'com.splitwise:tokenautocomplete:2fc238424130b42155b5f2e39799a90bbbd13b148850afbe534ab08bb913c7f7',
|
|
'se.emilsjolander:stickylistheaders:a08ca948aa6b220f09d82f16bbbac395f6b78897e9eeac6a9f0b0ba755928eeb',
|
|
'org.sufficientlysecure:html-textview:39048e35894e582adada388e6c00631803283f8defed8e07ad58a5f284f272ee',
|
|
'com.mikepenz:materialize:db365f859084048ac4e9cc4254642593dbb1ae9ce25c8fc26c93e2a5fadb3480',
|
|
'com.mikepenz:materialdrawer:fe9726e0f045eb3fe63832aa5383d9e2c7bcd8b87a6f26478aba1c330e9d36fe',
|
|
'com.mikepenz:google-material-typeface:a8319333a7f7ca369b9b5c62913f96787d934e312acefa8c9a5fcefd394fc6ee',
|
|
'com.mikepenz:iconics-core:e1ba25442c1645b7adfb7d101871c26ed64a6c5b892e9abee8d4d2a80d948d9e',
|
|
'com.mikepenz:community-material-typeface:520f1065730a1171763696ac9c4e770fedbbcf1a8dad6eb1028ba29489e1a2ce',
|
|
'com.mikepenz:fontawesome-typeface:8c58117eb42efe301a170049336f7838af7559d84b0cc9a2bd7aca8b130f0a50',
|
|
'com.squareup.okhttp:okhttp:1cc716e29539adcda677949508162796daffedb4794cbf947a6f65e696f0381c',
|
|
'com.nispok:snackbar:46b5eb9d630d329e13c2ce00ee9fb115ffb66c23c72cff32ee97eedd76824c6f',
|
|
'org.apache.james:apache-mime4j-core:4d7434c68f94b81a253c12f28e6bbb4d6239c361d6086a46e22e594bb43ac660',
|
|
'com.squareup.okhttp:okhttp-urlconnection:79ec6f4e79e683105e87fe83278a531c693e538d30e3b9237000ce7c94fcb2cf',
|
|
'org.thoughtcrime.ssl.pinning:AndroidPinning:afa1d74e699257fa75cb109ff29bac50726ef269c6e306bdeffe8223cee06ef4',
|
|
'org.apache.james:apache-mime4j-dom:7e6b06ee164a1c21b7e477249ea0b74a18fddce44764e5764085f58dd8c34633',
|
|
// 'OpenKeychain.extern.openpgp-api-lib:openpgp-api:262e58d318d19e8ce8a78934136c9656fa51dc5fd026caa034c41390e0ef299d',
|
|
'com.cocosw:bottomsheet:871f5f4d6c10936569caf3528271efd77594a67aa5511765c96d7096c9b05f96',
|
|
// 'com.madgag.spongycastle:core:d898b5b81ce9d456c65a3a2fe0b0be9b74e366aabe4ee1d13499a865cd20ee19',
|
|
// 'OpenKeychain.extern.openkeychain-api-lib:openkeychain-intents:c25d0c05cc129e2975161f8454350a8868dbe1ffca8583e900935cb0b38db842',
|
|
// 'com.madgag.spongycastle:pg:abd30d5a3c6ab6edbf7e2b60de3dae865bb5b5e4b41925ea8ac985e2a7fce4a0',
|
|
// 'com.madgag.spongycastle:pkix:c5fd572191d31d2b05d7143d9e22d74ee3e8a43552c26d31114a27022b7a06ce',
|
|
// 'com.madgag.spongycastle:prov:7a28f314e20683281254f92124f137d48173ea1dc3364a709d7cc66a5e46ec4e',
|
|
// 'OpenKeychain.extern.safeslinger-exchange:safeslinger-exchange:75a3d23eff4d5c14fdc8912b5d593bf340f07b833ceabacbcd60a8e83b5b8b79',
|
|
'com.android.support:support-annotations:f347a35b9748a4103b39a6714a77e2100f488d623fd6268e259c177b200e9d82',
|
|
// 'OpenKeychain.extern:minidns:0084c81e30a4b06edac9b00689eeaa3cbbb9ea3b26aaa4fad205bb660ea0fcdb',
|
|
// 'OpenKeychain.extern.KeybaseLib:Lib:c11785bf613f3fad8bf1670ef9fce1a10027cefbf2b3a67d487c6b8964f0e05a',
|
|
'com.squareup.okio:okio:114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266',
|
|
]
|
|
}
|
|
|
|
|
|
|
|
android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
|
|
|
// TODO: remove org.apache dependencies in LinkedTokenResource etc.
|
|
useLibrary 'org.apache.http.legacy'
|
|
|
|
defaultConfig {
|
|
minSdkVersion 15
|
|
targetSdkVersion 23
|
|
versionCode 37000
|
|
versionName "3.7"
|
|
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\""
|
|
buildConfigField "String", "PROVIDER_CONTENT_AUTHORITY", "\"org.sufficientlysecure.keychain.provider\""
|
|
|
|
// Reference them in .xml files.
|
|
resValue "string", "account_type", "org.sufficientlysecure.keychain.account"
|
|
resValue "string", "provider_content_authority", "org.sufficientlysecure.keychain.provider"
|
|
|
|
// Github API
|
|
buildConfigField "String", "GITHUB_CLIENT_ID", "\"c942cd81844d94e7e41b\""
|
|
buildConfigField "String", "GITHUB_CLIENT_SECRET", "\"f1dd17e70a0614abbd9310b00a310e23c6c8edff\""
|
|
}
|
|
|
|
debug {
|
|
applicationIdSuffix ".debug"
|
|
|
|
// Reference them in the java files with e.g. BuildConfig.ACCOUNT_TYPE.
|
|
buildConfigField "String", "ACCOUNT_TYPE", "\"org.sufficientlysecure.keychain.debug.account\""
|
|
buildConfigField "String", "PROVIDER_CONTENT_AUTHORITY", "\"org.sufficientlysecure.keychain.debug.provider\""
|
|
|
|
// Reference them in .xml files.
|
|
resValue "string", "account_type", "org.sufficientlysecure.keychain.debug.account"
|
|
resValue "string", "provider_content_authority", "org.sufficientlysecure.keychain.debug.provider"
|
|
|
|
// Github API
|
|
buildConfigField "String", "GITHUB_CLIENT_ID", "\"c942cd81844d94e7e41b\""
|
|
buildConfigField "String", "GITHUB_CLIENT_SECRET", "\"f1dd17e70a0614abbd9310b00a310e23c6c8edff\""
|
|
|
|
// 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')
|
|
}
|
|
|
|
dexOptions {
|
|
incremental = true
|
|
// Disable preDexing, causes com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) on some systems
|
|
preDexLibraries = false
|
|
jumboMode = true
|
|
javaMaxHeapSize "2g"
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'LICENSE.txt'
|
|
exclude 'META-INF/LICENSE.txt'
|
|
exclude 'META-INF/NOTICE.txt'
|
|
exclude 'META-INF/DEPENDENCIES'
|
|
exclude 'META-INF/LICENSE'
|
|
exclude 'META-INF/NOTICE'
|
|
exclude '.readme'
|
|
}
|
|
}
|
|
|
|
// apply plugin: 'spoon'
|
|
|
|
task jacocoTestReport(type:JacocoReport, dependsOn: "testDebugUnitTest") {
|
|
group = "Reporting"
|
|
description = "Generate Jacoco coverage reports"
|
|
|
|
classDirectories = fileTree(
|
|
dir: "${buildDir}/intermediates/classes/debug",
|
|
excludes: ['**/R.class',
|
|
'**/R$*.class',
|
|
'**/*$ViewInjector*.*',
|
|
'**/BuildConfig.*',
|
|
'**/Manifest*.*',
|
|
'**/*Activity*.*',
|
|
'**/*Fragment*.*']
|
|
)
|
|
|
|
sourceDirectories = files("${buildDir.parent}/src/main/java")
|
|
additionalSourceDirs = files([
|
|
"${buildDir}/generated/source/buildConfig/debug",
|
|
"${buildDir}/generated/source/r/debug"
|
|
])
|
|
executionData = fileTree(dir: "${buildDir}/jacoco", include: "**/*.exec")
|
|
|
|
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
|
|
}
|
|
}
|
|
|