apply plugin: 'com.android.application' def getVersionName = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--tags', '--always' standardOutput = stdout } return stdout.toString().trim() } android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { applicationId "org.xbmc.kore" minSdkVersion 15 targetSdkVersion 26 versionCode 19 versionName = getVersionName() } File keystoreFile = file('keystore.properties') signingConfigs { release { if (keystoreFile.exists()) { def Properties keyProps = new Properties() keyProps.load(new FileInputStream(keystoreFile)) storeFile file(keyProps["store"]) keyAlias keyProps["alias"] storePassword keyProps["storePass"] keyPassword keyProps["pass"] } } } sourceSets { fullDebug { assets.srcDirs += 'src/testUtils/assets' } test { java.srcDirs += 'src/testUtils/java' } androidTest { java.srcDirs += 'src/testUtils/java' } instrumentationTest { assets.srcDirs += 'src/testUtils/assets' } } productFlavors { full { } instrumentationTest { applicationId "org.xbmc.kore.instrumentationtest" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" proguardFiles 'proguardTest-rules.pro' } } buildTypes { // debug { // minifyEnabled true // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // } release { if (keystoreFile.exists()) { signingConfig signingConfigs.release } minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { // Too much trouble keeping all translations in sync disable 'MissingTranslation' //The xml launcher icon introduced in API 26 causes lint to generate //an error that the icon is not a PNG format //This reduces the error to a warning warning 'IconLauncherFormat' } // allprojects { // gradle.projectsEvaluated { // tasks.withType(JavaCompile) { // options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" // } // } // } packagingOptions { exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' } } ext { supportLibVersion = '26.1.0' } dependencies { compile "com.android.support:support-v4:${supportLibVersion}" compile "com.android.support:appcompat-v7:${supportLibVersion}" compile "com.android.support:cardview-v7:${supportLibVersion}" compile "com.android.support:preference-v14:${supportLibVersion}" compile "com.android.support:support-v13:${supportLibVersion}" compile "com.android.support:design:${supportLibVersion}" compile 'com.fasterxml.jackson.core:jackson-databind:2.5.2' compile 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' compile 'com.squareup.okhttp:okhttp:2.3.0' compile 'com.squareup.picasso:picasso:2.5.2' compile 'de.greenrobot:eventbus:2.4.0' compile 'org.jmdns:jmdns:3.5.1' compile 'com.astuetz:pagerslidingtabstrip:1.0.1' compile 'at.blogc:expandabletextview:1.0.3' compile 'com.sothree.slidinguppanel:library:3.3.1' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test:rules:0.5' androidTestCompile 'org.hamcrest:hamcrest-library:1.3' androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' androidTestCompile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2' androidTestCompile "com.android.support:support-v13:${supportLibVersion}" instrumentationTestCompile 'junit:junit:4.12' testCompile 'org.robolectric:robolectric:3.1.1' testCompile 'junit:junit:4.12' compile fileTree(dir: 'libs', include: ['*.jar']) } // Get the path to ADB. Required when running tests directly from Android Studio. // Source: http://stackoverflow.com/a/26771087/112705 def adb = android.getAdbExe().toString() // Source: http://stackoverflow.com/q/29908110/112705 afterEvaluate { task grantAnimationPermissionDev(type: Exec, dependsOn: 'installInstrumentationTestDebug') { doFirst { println("Executing: $adb shell pm grant $android.productFlavors.instrumentationTest.applicationId android.permission.SET_ANIMATION_SCALE") commandLine "$adb shell pm grant $android.productFlavors.instrumentationTest.applicationId android.permission.SET_ANIMATION_SCALE".split(' ') } } // When launching individual tests from Android Studio, it seems that only the assemble tasks // get called directly, not the install* versions tasks.each { task -> if (task.name.startsWith('assembleInstrumentationTestDebugAndroidTest')) { task.dependsOn grantAnimationPermissionDev } } } /** * Android gradle plugin 2.3.x contains a bug where the assets for fullDebug * are not copied. The task assembleFullDebug does copy the required assets, * so this dependency fixes the issue. */ tasks.whenTaskAdded { task -> if (task.name.contains("compileFullDebugUnitTestSources")) { task.dependsOn assembleFullDebug } }