plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-parcelize' id 'kotlin-kapt' } ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) } ext.readPropertyWithDefault = { paramName, defaultValue -> if (project.hasProperty(paramName)) { return project.getProperties().get(paramName) } else { Properties properties = new Properties() if (project.rootProject.file('local.properties').exists()) { properties.load(project.rootProject.file('local.properties').newDataInputStream()) } if (properties.getProperty(paramName) != null) { return properties.getProperty(paramName) } else { return defaultValue } } } // Try reading secrets from file def secretsPropertiesFile = rootProject.file("secrets.properties") def secretProperties = new Properties() if (secretsPropertiesFile.exists()) { secretProperties.load(new FileInputStream(secretsPropertiesFile)) } // Otherwise read from environment variables, this happens in CI else { secretProperties.setProperty("signing_keystore_password", "${System.getenv('signing_keystore_password')}") secretProperties.setProperty("signing_key_password", "${System.getenv('signing_key_password')}") secretProperties.setProperty("signing_key_alias", "${System.getenv('signing_key_alias')}") } apply plugin: 'kotlin-kapt' android { compileSdkVersion 29 buildToolsVersion "30.0.2" defaultConfig { applicationId "net.schueller.peertube" minSdkVersion 21 targetSdkVersion 29 versionCode 1061 versionName "1.5.0" buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = [ "room.schemaLocation" : "$projectDir/schemas".toString(), "room.incremental" : "true", "room.expandProjection": "true"] } } } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("../android-signing-keystore.jks") storePassword "${secretProperties['signing_keystore_password']}" keyAlias "${secretProperties['signing_key_alias']}" keyPassword "${secretProperties['signing_key_password']}" } } buildTypes { release { minifyEnabled false testCoverageEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } applicationVariants.all { variant -> variant.resValue "string", "versionName", variant.versionName } buildFeatures{ viewBinding = true } } def room_version = "2.3.0" def lifecycleVersion = '2.3.1' def exoplayer = '2.12.3' def fragment_version = "1.3.6" dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // Layouts and design implementation 'androidx.constraintlayout:constraintlayout:2.1.1' implementation 'androidx.appcompat:appcompat:1.3.1' implementation 'com.google.android.material:material:1.4.0' implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" implementation "androidx.fragment:fragment-ktx:$fragment_version" implementation 'de.hdodenhof:circleimageview:3.1.0' // font awesome implementation 'com.mikepenz:iconics-core:5.2.4' implementation 'com.mikepenz:fontawesome-typeface:5.9.0.2-kotlin@aar' // http client / REST implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' // image downloading and caching library implementation 'com.squareup.picasso:picasso:2.71828' // json decoder/encoder implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // Torrents and WebRTC implementation 'com.github.TorrentStream:TorrentStream-Android:2.7.0' // implementation "com.github.TorrentStream:TorrentStreamServer-Android:1.0.1" // implementation 'org.webrtc:google-webrtc:1.0.+' // video player repo:jcenter() implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer" implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer" implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer" implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer" implementation "com.google.android.exoplayer:exoplayer-smoothstreaming:$exoplayer" implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer" implementation "com.google.android.exoplayer:extension-okhttp:$exoplayer" // date formatter, do not update past 4.0.4 https://github.com/sschueller/peertube-android/issues/262 implementation 'org.ocpsoft.prettytime:prettytime:4.0.4.Final' // Version comparison implementation 'org.apache.maven:maven-artifact:3.6.3' // database lib implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" // Lifecycle components kapt "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion" implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion" implementation 'androidx.preference:preference-ktx:1.1.1' // testing testImplementation 'junit:junit:4.13.1' androidTestImplementation 'androidx.test:runner:1.4.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' androidTestImplementation "androidx.room:room-testing:$room_version" } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { jvmTarget = "1.8" } }