123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- apply plugin: 'com.android.application'
- apply plugin: 'witness'
- apply from: 'witness.gradle'
- def getStdout = { command, defaultValue ->
- def stdout = new ByteArrayOutputStream()
- try {
- exec {
- commandLine = command
- standardOutput = stdout
- }
- return stdout.toString().trim()
- } catch (Exception ignored) {
- return defaultValue
- }
- }
- android {
- compileSdkVersion rootProject.ext.compileSdkVersion
- buildToolsVersion rootProject.ext.buildToolsVersion
- defaultConfig {
- minSdkVersion rootProject.ext.minSdkVersion
- targetSdkVersion rootProject.ext.targetSdkVersion
- versionCode rootProject.ext.versionCode
- versionName rootProject.ext.versionName
- applicationId "org.briarproject.briar.android"
- buildConfigField "String", "GitHash",
- "\"${getStdout(['git', 'rev-parse', '--short=7', 'HEAD'], 'No commit hash')}\""
- def now = (long) (System.currentTimeMillis() / 1000)
- buildConfigField "Long", "BuildTimestamp",
- "${getStdout(['git', 'log', '-n', '1', '--format=%ct'], now)}000L"
- testInstrumentationRunner 'org.briarproject.briar.android.BriarTestRunner'
- testInstrumentationRunnerArguments disableAnalytics: 'true'
- }
- buildTypes {
- debug {
- applicationIdSuffix ".debug"
- shrinkResources false
- minifyEnabled true
- crunchPngs false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- testProguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt', 'proguard-test.txt'
- }
- release {
- shrinkResources false
- minifyEnabled true
- crunchPngs false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
- }
- }
- flavorDimensions "version"
- productFlavors {
- screenshot {
- dimension "version"
- minSdkVersion 18
- applicationIdSuffix ".screenshot" // = org.briarproject.briar.android.screenshot.debug
- }
- official {
- dimension "version"
- }
- }
- variantFilter { variant ->
- if (variant.flavors*.name.contains("screenshot") && variant.buildType.name == "release") {
- setIgnore(true)
- }
- }
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
- testOptions {
- unitTests {
- includeAndroidResources = true
- }
- }
- lintOptions {
- warning 'MissingTranslation'
- warning 'ImpliedQuantity'
- warning 'ExtraTranslation'
- // FIXME
- warning 'InvalidPackage'
- }
- }
- dependencies {
- implementation project(path: ':briar-core', configuration: 'default')
- implementation project(path: ':bramble-core', configuration: 'default')
- implementation project(':bramble-android')
- implementation 'androidx.preference:preference:1.1.0'
- implementation 'androidx.exifinterface:exifinterface:1.0.0'
- implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
- implementation 'com.google.android.material:material:1.1.0-beta01'
- implementation 'androidx.recyclerview:recyclerview-selection:1.1.0-rc01'
- implementation 'ch.acra:acra:4.11'
- implementation 'info.guardianproject.panic:panic:1.0'
- implementation 'info.guardianproject.trustedintents:trustedintents:0.2'
- implementation 'de.hdodenhof:circleimageview:3.0.1'
- implementation 'com.google.zxing:core:3.3.3' // newer version need minSdk 24
- implementation 'uk.co.samuelwall:material-tap-target-prompt:3.0.0'
- implementation 'com.vanniktech:emoji-google:0.6.0'
- implementation 'com.github.kobakei:MaterialFabSpeedDial:1.2.1'
- implementation 'com.github.chrisbanes:PhotoView:2.3.0'
- def glideVersion = '4.10.0'
- implementation("com.github.bumptech.glide:glide:$glideVersion") {
- exclude group: 'com.android.support'
- exclude module: 'disklrucache' // when there's no disk cache, we can't accidentally use it
- }
- annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
- annotationProcessor "com.github.bumptech.glide:compiler:$glideVersion"
- compileOnly 'javax.annotation:jsr250-api:1.0'
- def espressoVersion = '3.2.0'
- def jmockVersion = '2.8.2'
- testImplementation project(path: ':bramble-api', configuration: 'testOutput')
- testImplementation project(path: ':bramble-core', configuration: 'testOutput')
- testImplementation 'androidx.test:runner:1.2.0'
- testImplementation 'androidx.test.ext:junit:1.1.1'
- testImplementation 'androidx.fragment:fragment-testing:1.1.0'
- testImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
- testImplementation 'org.robolectric:robolectric:4.3.1'
- testImplementation 'org.mockito:mockito-core:3.1.0'
- testImplementation 'junit:junit:4.12'
- testImplementation "org.jmock:jmock:$jmockVersion"
- testImplementation "org.jmock:jmock-junit4:$jmockVersion"
- testImplementation "org.jmock:jmock-legacy:$jmockVersion"
- androidTestImplementation project(path: ':bramble-api', configuration: 'testOutput')
- androidTestImplementation 'androidx.test.ext:junit:1.1.1'
- androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
- androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
- androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
- androidTestAnnotationProcessor "com.google.dagger:dagger-compiler:2.24"
- androidTestCompileOnly 'javax.annotation:jsr250-api:1.0'
- androidTestImplementation 'junit:junit:4.12'
- androidTestScreenshotImplementation('tools.fastlane:screengrab:1.2.0') {
- // workaround for jetifier issue https://issuetracker.google.com/issues/123060356
- exclude group: 'com.android.support.test.uiautomator'
- }
- androidTestScreenshotImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
- }
- task verifyTranslations {
- doLast {
- def file = project.file("src/main/res/values/arrays.xml")
- def arrays = new XmlParser().parse(file)
- def lc = arrays.children().find { it.@name == "pref_language_values" }
- def translations = []
- lc.children().each { value -> translations.add(value.text()) }
- def folders = ["default", "en-US"]
- def exceptions = ["values-night", "values-v21", "values-ldrtl"]
- project.file("src/main/res").eachDir { dir ->
- if (dir.name.startsWith("values-") && !exceptions.contains(dir.name)) {
- folders.add(dir.name.substring(7).replace("-r", "-"))
- }
- }
- folders.each { n ->
- if (!translations.remove(n) && n != 'iw') {
- throw new GradleException("Translation " + n + " is missing in $file")
- }
- }
- if (translations.size() != 0)
- throw new GradleException("Translations\n" + translations.join("\n")
- + "\nhave no matching value folder")
- // Some devices use iw instead of he for hebrew
- def hebrew_legacy = project.file("src/main/res/values-iw")
- def hebrew = project.file("src/main/res/values-he")
- // Copy values-he to values-iw
- if (hebrew.exists()) {
- hebrew_legacy.mkdir()
- copy {
- from hebrew.getAbsolutePath()
- into hebrew_legacy.getAbsolutePath()
- }
- }
- }
- }
- project.afterEvaluate {
- preBuild.dependsOn.add(verifyTranslations)
- }
|