b19f7a776f
Implemented SuperSlim in Recyclerview of ViewKeyAdvCertsFragment. Some changes to the way data is bound to the views in the list.
331 lines
16 KiB
Groovy
331 lines
16 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:24.1.1'
|
|
compile 'com.android.support:appcompat-v7:24.1.1'
|
|
compile 'com.android.support:design:24.1.1'
|
|
compile 'com.android.support:recyclerview-v7:24.1.1'
|
|
compile 'com.android.support:cardview-v7:24.1.1'
|
|
compile 'com.android.support:support-annotations:24.1.1'
|
|
|
|
// JCenter etc.
|
|
compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
|
|
compile 'com.google.zxing:core:3.2.1'
|
|
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:4.0.1.Final'
|
|
compile 'com.splitwise:tokenautocomplete:2.0.7@aar'
|
|
compile 'org.sufficientlysecure:html-textview:1.8'
|
|
compile 'org.sufficientlysecure:donations:2.4'
|
|
compile 'com.nispok:snackbar:2.11.0'
|
|
compile 'com.squareup.okhttp3:okhttp:3.2.0'
|
|
compile 'com.squareup.okhttp3:okhttp-urlconnection:3.2.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.3.0@aar'
|
|
compile 'com.tonicartos:superslim:0.4.13'
|
|
|
|
// Material Drawer
|
|
compile 'com.mikepenz:materialdrawer:5.2.2@aar'
|
|
compile 'com.mikepenz:fastadapter:1.4.4'
|
|
compile 'com.mikepenz:materialize:0.8.8'
|
|
compile 'com.mikepenz:iconics-core:2.5.11@aar'
|
|
compile 'com.mikepenz:google-material-typeface:2.2.0.1.original@aar'
|
|
compile 'com.mikepenz:fontawesome-typeface:4.6.0.1@aar'
|
|
compile 'com.mikepenz:community-material-typeface:1.5.54.1@aar'
|
|
|
|
// Nordpol
|
|
compile 'com.fidesmo:nordpol-android:0.1.18'
|
|
|
|
// libs as submodules
|
|
compile project(':openpgp-api-lib')
|
|
compile project(':openkeychain-api-lib')
|
|
compile project(':extern:bouncycastle:core')
|
|
compile project(':extern:bouncycastle:pg')
|
|
compile project(':extern:bouncycastle:prov')
|
|
compile project(':extern:minidns')
|
|
compile project(':KeybaseLib')
|
|
compile project(':safeslinger-exchange')
|
|
|
|
// 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.1.2') {
|
|
exclude group: 'org.bouncycastle', module: 'bcprov-jdk16'
|
|
}
|
|
testCompile 'org.mockito:mockito-core:1.10.19'
|
|
|
|
// UI testing with Espresso
|
|
// Force usage of support libs in the test app, since they are internally used by the runner module.
|
|
// https://github.com/googlesamples/android-testing/blob/master/ui/espresso/BasicSample/app/build.gradle#L28
|
|
androidTestCompile 'com.android.support:support-annotations:24.1.1'
|
|
androidTestCompile 'com.android.support:appcompat-v7:24.1.1'
|
|
androidTestCompile 'com.android.support:design:24.1.1'
|
|
androidTestCompile 'com.android.support.test:runner:0.5'
|
|
androidTestCompile 'com.android.support.test:rules:0.5'
|
|
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
|
|
androidTestCompile 'com.android.support.test.espresso:espresso-intents:2.2.2'
|
|
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.2') {
|
|
exclude group: 'com.android.support', module: 'appcompat'
|
|
exclude group: 'com.android.support', module: 'support-v4'
|
|
exclude module: 'recyclerview-v7'
|
|
}
|
|
|
|
}
|
|
|
|
// Output of ./gradlew -q calculateChecksums
|
|
// Comment out the libs referenced as git submodules!
|
|
dependencyVerification {
|
|
verify = [
|
|
'com.android.support:support-v4:246c99385a84fe179d7b833c9ddaf2576f217b0abba5e74b5353cc78756f5880',
|
|
'com.android.support:appcompat-v7:bf8db89d678286043778990fc967346e94321cc8d8bad99e9b0db20588509156',
|
|
'com.android.support:design:391d3d1fd274c3150e949653b9863af61e80953bbb90f3cbd40e9d2f1bd548d9',
|
|
'com.android.support:recyclerview-v7:e89e0ba2b73bb4002965ff42f93cfe3e7da05162716b15218e31f7dd140fa40e',
|
|
'com.android.support:cardview-v7:eb74ab41045d182fcf783c7479c5b35fb1f4d771ed307b2e7b84ab3a8fe10e96',
|
|
'com.android.support:support-annotations:bac4e534657165b0c4c362c97db389dcb152e43273435d2ccaa939a82e03f42c',
|
|
'com.journeyapps:zxing-android-embedded:afe4cd51d95ba0fd3a4bfe08c5a160bd32602aa174d511600ac824b6de4c79f1',
|
|
'com.google.zxing:core:b4d82452e7a6bf6ec2698904b332431717ed8f9a850224f295aec89de80f2259',
|
|
'com.jpardogo.materialtabstrip:library:24d19232b319f8c73e25793432357919a7ed972186f57a3b2c9093ea74ad8311',
|
|
'com.getbase:floatingactionbutton:3edefa511aac4d90794c7b0496aca59cff2eee1e32679247b4f85acbeee05240',
|
|
'org.commonjava.googlecode.markdown4j:markdown4j:e952e825d29e1317d96f79f346bfb6786c7c5eef50bd26e54a80823704b62e13',
|
|
'org.ocpsoft.prettytime:prettytime:ef7098d973ae78b57d1a22dc37d3b8a771bf030301300e24055d676b6cdc5e75',
|
|
'com.splitwise:tokenautocomplete:f56239588390f103b270b7c12361d99b06313a5a0410dc7f66e241ac4baf9baa',
|
|
'org.sufficientlysecure:html-textview:206f484fe4178be6c831fe680de558764967e7b56496c4cc7f37f2979a477df6',
|
|
'org.sufficientlysecure:donations:96f8197bab26dfe41900d824f10f8f1914519cd62eedb77bdac5b223eccdf0a6',
|
|
'com.nispok:snackbar:46b5eb9d630d329e13c2ce00ee9fb115ffb66c23c72cff32ee97eedd76824c6f',
|
|
'com.squareup.okhttp3:okhttp:a41cdb7b024c56436a21e38f00b4d12e3b7e01451ffe6c4f545acba805bba03b',
|
|
'com.squareup.okhttp3:okhttp-urlconnection:7d6598a6665c166e2d4b78956a96056b9be7de192b3c923ccf4695d08e580833',
|
|
'org.apache.james:apache-mime4j-core:4d7434c68f94b81a253c12f28e6bbb4d6239c361d6086a46e22e594bb43ac660',
|
|
'org.apache.james:apache-mime4j-dom:7e6b06ee164a1c21b7e477249ea0b74a18fddce44764e5764085f58dd8c34633',
|
|
'org.thoughtcrime.ssl.pinning:AndroidPinning:afa1d74e699257fa75cb109ff29bac50726ef269c6e306bdeffe8223cee06ef4',
|
|
'com.cocosw:bottomsheet:4af6112a7f4cad4e2b70e5fdf1edc39f51275523a0f53011a012837dc103e597',
|
|
'com.mikepenz:materialdrawer:4169462fdde042e2bb53a7c2b4e2334d569d16b2020781ee05741b50e1a2967d',
|
|
'com.mikepenz:fastadapter:1bfc00216d71dfdfe0d8e7a9d92bb97bfaa1794543930e34b1f79d5d7adbddf6',
|
|
'com.mikepenz:materialize:575195b2fa5b2414fb14a59470ee21d8a8cd8355b651e0cf52e477e3ff1cd96c',
|
|
'com.mikepenz:iconics-core:d57c6b0ecb33d9ed9708da62e07ad8993d80a16f374f7a2018be7837a60b7ed7',
|
|
'com.mikepenz:google-material-typeface:47eabb0aadcc0f56530c3ca462b671a5cf5251101cef8f581aedf90ca511914a',
|
|
'com.mikepenz:fontawesome-typeface:033cf3460d8074bd37a1fefc2ff4eac8f2e3db835ec78bf386d46710e4d0827c',
|
|
'com.mikepenz:community-material-typeface:382e8446fc08fe03cb1e0f91ee329ffd514c113ad22f8389b88424ac71ed5fbb',
|
|
'com.fidesmo:nordpol-android:56f43fe2b1676817bcb4085926de14a08282ef6729c855c198d81aec62b20d65',
|
|
// 'OpenKeychain:openpgp-api-lib:2c145be0d124d37558f65ed962c47358b7e424dd4c00dc8818aad64598664c3d',
|
|
// 'OpenKeychain:openkeychain-api-lib:afff9f8410d8781fcd4023ca247d876ca124a6ee4f718afbc3740fc6078a255d',
|
|
// 'OpenKeychain.extern.bouncycastle:core:18876ec7629c427002ee00bb361b016b86159dcd9aac68951aec92f9ca41bb7a',
|
|
// 'OpenKeychain.extern.bouncycastle:pg:b6469f69d17ecb43c86c082fb1b5c01ae2f8e7a8ca5fa29e9f199c74dc021be1',
|
|
// 'OpenKeychain.extern.bouncycastle:prov:db7c1a72a86d918a25fc1ca8553762d1280274e8e2f02299f344b244bb527708',
|
|
// 'OpenKeychain.extern:minidns:8b324812d4b9ea9d639be43183f4292e5f257319fbb6c23faf2ee420f041d279',
|
|
// 'OpenKeychain:KeybaseLib:a992fb93c718fa34ab45850e34a294e413c9410e2b00243a43e6f303d85b6147',
|
|
// 'OpenKeychain:safeslinger-exchange:99d6ce7745edf5341495932bb26d0d1f8894b1edbfbddffc8514b2cf4149ad9b',
|
|
'com.android.support:animated-vector-drawable:4fcd1fc36034a804200ef3e552b0f2f688a0a7a8a007de43201e40bfedda73b3',
|
|
'com.android.support:support-vector-drawable:45b1f180b437a750429f6c1457181c167ba211c17fcb992f83cdbefef5eb1519',
|
|
'com.squareup.okio:okio:114bdc1f47338a68bcbc95abf2f5cdc72beeec91812f2fcd7b521c1937876266',
|
|
'com.fidesmo:nordpol-core:3de58e850a00bba5b4d3a604d1399bcd89f695ea191ec0b03a57222e18062d15',
|
|
]
|
|
}
|
|
|
|
|
|
|
|
android {
|
|
compileSdkVersion rootProject.ext.compileSdkVersion
|
|
buildToolsVersion rootProject.ext.buildToolsVersion
|
|
|
|
defaultConfig {
|
|
minSdkVersion 15
|
|
targetSdkVersion 24
|
|
versionCode 42000
|
|
versionName "4.2 beta1"
|
|
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
|
|
}
|
|
|
|
testOptions.unitTests.all {
|
|
// log results of tests to console, useful for travis
|
|
testLogging {
|
|
events 'passed', 'skipped', 'failed' //, 'standardOut', 'standardError'
|
|
}
|
|
}
|
|
|
|
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 {
|
|
minifyEnabled true
|
|
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
testProguardFile('proguard-rules.pro')
|
|
|
|
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\""
|
|
}
|
|
|
|
// Workaround for http://stackoverflow.com/questions/27909613/cannot-see-parameter-value-in-android-studio-when-breakpoint-is-in-first-line-of
|
|
debugWithTestCoverage.initWith(debug)
|
|
debugWithTestCoverage {
|
|
// Enable code coverage (Jacoco)
|
|
testCoverageEnabled true
|
|
}
|
|
}
|
|
|
|
productFlavors {
|
|
google {
|
|
buildConfigField "boolean", "DONATIONS_GOOGLE", "true"
|
|
buildConfigField "String", "GOOGLE_PLAY_PUBKEY", "\"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwX9SOQ/EL4u5pvbYmYMagN5DDenuSaMaVs2cVPzqxMaIHp6/9/nGuzj2/CpcB4ASd2vvfLlE9tZRkPmFTULWc4Sp4OR+JenQufZZr7Y8WGPkFyqd+dOxhIqKKLtH1QuqSyhby3gEMlWzydJY3rHXlH2Bpu65Uroawq76nynnELXNlzsCM231XWgj4HA87qxv9hSWLCpu16wKxZIX3d6mwZLZmGF+xYJAzVr291oDYYl+h6BDoIcAfmQFsv5MexNwBFO+TLVrvL0e5qdGHZxwwD1/68VSY8FxAEfM+yq7jovdVSdcXlJQjZrV5TRDdFWrtEB6njGA3YZWXP6B6MMMoQIDAQAB\""
|
|
buildConfigField "String", "PAYPAL_USER", "null"
|
|
buildConfigField "String", "PAYPAL_CURRENCY_CODE", "null"
|
|
buildConfigField "String", "BITCOIN_ADDRESS", "null"
|
|
}
|
|
fdroid {
|
|
buildConfigField "boolean", "DONATIONS_GOOGLE", "false"
|
|
buildConfigField "String", "GOOGLE_PLAY_PUBKEY", "null"
|
|
buildConfigField "String", "PAYPAL_USER", "\"dominik@sufficientlysecure.org\""
|
|
buildConfigField "String", "PAYPAL_CURRENCY_CODE", "\"EUR\""
|
|
buildConfigField "String", "BITCOIN_ADDRESS", "\"1JZfAKTbTU5LJTkDELhPUF4Xa6VstEZgz6\""
|
|
}
|
|
}
|
|
|
|
/*
|
|
* 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
|
|
preDexLibraries = true
|
|
// dexInProcess requires much RAM, which is not available on all dev systems
|
|
dexInProcess = 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'
|
|
}
|
|
}
|
|
|
|
task jacocoTestReport(type:JacocoReport, dependsOn: "testFdroidDebugWithTestCoverageUnitTest") {
|
|
group = "Reporting"
|
|
description = "Generate Jacoco coverage reports"
|
|
|
|
classDirectories = fileTree(
|
|
dir: "${buildDir}/intermediates/classes/fdroid/debugWithTestCoverage",
|
|
excludes: ['**/R.class',
|
|
'**/R$*.class',
|
|
'**/*$ViewInjector*.*',
|
|
'**/BuildConfig.*',
|
|
'**/Manifest*.*',
|
|
'**/*Activity*.*',
|
|
'**/*Fragment*.*']
|
|
)
|
|
|
|
sourceDirectories = files("${buildDir.parent}/src/main/java")
|
|
additionalSourceDirs = files([
|
|
"${buildDir}/generated/source/buildConfig/fdroid/debugWithTestCoverage",
|
|
"${buildDir}/generated/source/r/fdroid/debugWithTestCoverage"
|
|
])
|
|
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
|
|
}
|
|
}
|
|
|