NewPipe/app/build.gradle

313 lines
11 KiB
Groovy
Raw Normal View History

plugins {
2021-12-05 03:16:37 +01:00
id "com.android.application"
id "kotlin-android"
id "kotlin-kapt"
id "kotlin-parcelize"
id "checkstyle"
2021-12-05 03:22:15 +01:00
id "org.sonarqube" version "3.3"
}
2015-09-04 02:15:03 +02:00
android {
compileSdk 31
2022-02-26 01:36:06 +01:00
buildToolsVersion '31.0.0'
2015-09-04 02:15:03 +02:00
defaultConfig {
applicationId "org.schabi.newpipe"
resValue "string", "app_name", "NewPipe"
minSdk 19
targetSdk 29
2022-04-16 18:28:23 +02:00
versionCode 986
versionName "0.23.0"
2020-10-18 10:44:27 +02:00
multiDexEnabled true
2019-10-04 14:59:08 +02:00
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
2015-09-04 02:15:03 +02:00
}
2015-09-04 02:15:03 +02:00
buildTypes {
debug {
debuggable true
2020-02-23 20:56:56 +01:00
// suffix the app id and the app name with git branch name
def workingBranch = getGitWorkingBranch()
def normalizedWorkingBranch = workingBranch.replaceFirst("^[^A-Za-z]+", "").replaceAll("[^0-9A-Za-z]+", "")
if (normalizedWorkingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
// default values when branch name could not be determined or is master or dev
applicationIdSuffix ".debug"
resValue "string", "app_name", "NewPipe Debug"
} else {
applicationIdSuffix ".debug." + normalizedWorkingBranch
resValue "string", "app_name", "NewPipe " + workingBranch
archivesBaseName = 'NewPipe_' + normalizedWorkingBranch
}
}
// Keep the release build type at the end of the list to override 'archivesBaseName' of
// debug build. This seems to be a Gradle bug, therefore
// TODO: update Gradle version
release {
if (System.properties.containsKey('packageSuffix')) {
applicationIdSuffix System.getProperty('packageSuffix')
resValue "string", "app_name", "NewPipe " + System.getProperty('packageSuffix')
archivesBaseName = 'NewPipe_' + System.getProperty('packageSuffix')
}
minifyEnabled true
shrinkResources false // disabled to fix F-Droid's reproducible build
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
archivesBaseName = 'app'
}
2015-09-04 02:15:03 +02:00
}
2015-12-24 14:55:33 +01:00
2022-01-21 22:25:11 +01:00
lint {
2015-12-01 21:31:10 +01:00
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
// suppress false warning ("Resource IDs will be non-final in Android Gradle Plugin version
// 5.0, avoid using them in switch case statements"), which affects only library projects
disable 'NonConstantResourceId'
2015-12-01 21:31:10 +01:00
}
2016-02-05 17:09:29 +01:00
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
2021-12-05 03:16:37 +01:00
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
encoding 'utf-8'
2016-02-05 17:09:29 +01:00
}
kotlinOptions {
2021-12-05 03:16:37 +01:00
jvmTarget = JavaVersion.VERSION_11
}
sourceSets {
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
2020-10-31 05:37:18 +01:00
buildFeatures {
viewBinding true
}
2015-09-04 02:15:03 +02:00
}
ext {
checkstyleVersion = '10.0'
2021-07-22 01:31:41 +02:00
androidxLifecycleVersion = '2.3.1'
androidxRoomVersion = '2.4.2'
androidxWorkVersion = '2.7.1'
icepickVersion = '3.2.0'
exoPlayerVersion = '2.17.1'
2021-12-13 03:26:59 +01:00
googleAutoServiceVersion = '1.0.1'
2022-05-16 17:45:56 +02:00
groupieVersion = '2.10.1'
2021-06-20 23:26:59 +02:00
markwonVersion = '4.6.2'
leakCanaryVersion = '2.5'
2021-06-20 23:26:59 +02:00
stethoVersion = '1.6.0'
2021-12-13 03:26:59 +01:00
mockitoVersion = '4.0.0'
assertJVersion = '3.22.0'
}
2018-08-17 17:03:26 +02:00
2020-06-28 14:59:44 +02:00
configurations {
checkstyle
2020-10-31 21:55:45 +01:00
ktlint
2020-06-28 14:59:44 +02:00
}
2020-03-27 20:45:26 +01:00
checkstyle {
getConfigDirectory().set(rootProject.file("checkstyle"))
2020-03-27 20:45:26 +01:00
ignoreFailures false
showViolations true
2020-05-01 16:06:02 +02:00
toolVersion = checkstyleVersion
2020-03-27 20:45:26 +01:00
}
task runCheckstyle(type: Checkstyle) {
source 'src'
include '**/*.java'
exclude '**/gen/**'
exclude '**/R.java'
exclude '**/BuildConfig.java'
exclude 'main/java/us/shandian/giga/**'
2020-06-28 14:59:44 +02:00
classpath = configurations.checkstyle
2020-03-27 20:45:26 +01:00
showViolations true
reports {
2021-07-06 18:16:20 +02:00
xml.getRequired().set(true)
html.getRequired().set(true)
2020-03-27 20:45:26 +01:00
}
}
2020-10-31 21:55:45 +01:00
def outputDir = "${project.buildDir}/reports/ktlint/"
def inputFiles = project.fileTree(dir: "src", include: "**/*.kt")
task runKtlint(type: JavaExec) {
inputs.files(inputFiles)
outputs.dir(outputDir)
2021-07-06 18:16:20 +02:00
getMainClass().set("com.pinterest.ktlint.Main")
2020-10-31 21:55:45 +01:00
classpath = configurations.ktlint
args "src/**/*.kt"
}
task formatKtlint(type: JavaExec) {
inputs.files(inputFiles)
outputs.dir(outputDir)
2021-07-06 18:16:20 +02:00
getMainClass().set("com.pinterest.ktlint.Main")
2020-10-31 21:55:45 +01:00
classpath = configurations.ktlint
args "-F", "src/**/*.kt"
}
2020-05-01 20:09:52 +02:00
2020-04-20 17:01:36 +02:00
afterEvaluate {
if (!System.properties.containsKey('skipFormatKtlint')) {
preDebugBuild.dependsOn formatKtlint
}
preDebugBuild.dependsOn runCheckstyle, runKtlint
2020-04-20 17:01:36 +02:00
}
2020-03-27 20:45:26 +01:00
sonarqube {
properties {
property "sonar.projectKey", "TeamNewPipe_NewPipe"
property "sonar.organization", "teamnewpipe"
property "sonar.host.url", "https://sonarcloud.io"
}
}
2015-09-04 02:15:03 +02:00
dependencies {
/** Desugaring **/
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
/** NewPipe libraries **/
// You can use a local version by uncommenting a few lines in settings.gradle
2021-06-17 20:47:22 +02:00
// Or you can use a commit you pushed to GitHub by just replacing TeamNewPipe with your GitHub
// name and the commit hash with the commit hash of the (pushed) commit you want to test
// This works thanks to JitPack: https://jitpack.io/
implementation 'com.github.TeamNewPipe:nanojson:1d9e1aea9049fc9f85e68b43ba39fe7be1c1f751'
Add support of other delivery methods than progressive HTTP (in the player only) Detailed changes: - External players: - Add a message instruction about stream selection; - Add a message when there is no stream available for external players; - Return now HLS, DASH and SmoothStreaming URL contents, in addition to progressive HTTP ones. - Player: - Support DASH, HLS and SmoothStreaming streams for videos, whether they are content URLs or the manifests themselves, in addition to progressive HTTP ones; - Use a custom HttpDataSource to play YouTube contents, based of ExoPlayer's default one, which allows better spoofing of official clients (custom user-agent and headers (depending of the client used), use of range and rn (set dynamically by the DataSource) parameters); - Fetch YouTube progressive contents as DASH streams, like official clients, support fully playback of livestreams which have ended recently and OTF streams; - Use ExoPlayer's default retries count for contents on non-fatal errors (instead of Integer.MAX_VALUE for non-live contents and 5 for live contents). - Download dialog: - Add message about support of progressive HTTP streams only for downloading; - Remove several duplicated code and update relevant usages; - Support downloading of contents with an unknown media format. - ListHelper: - Catch NumberFormatException when trying to compare two video streams between them. - Tests: - Update ListHelperTest and StreamItemAdapterTest to fix breaking changes in the extractor. - Other places: - Fixes deprecation of changes made in the extractor; - Improve some code related to the files changed. - Issues fixed and/or improved with the changes: - Seeking of PeerTube HLS streams (the duration shown was the one from the stream duration and not the one parsed, incomplete because HLS streams are fragmented MP4s with multiple sidx boxes, for which seeking is not supported by ExoPlayer) (the app now uses the HLS manifest returned for each quality, in the master playlist (not fetched and computed by the extractor)); - Crash when loading PeerTube streams with a separated audio; - Lack of some streams on some YouTube videos (OTF streams); - Loading times of YouTube streams, after a quality change or a playback start; - View count of YouTube ended livestreams interpreted as watching count (this type of streams is not interpreted anymore as livestreams); - Watchable time of YouTube ended livestreams; - Playback of SoundCloud HLS-only tracks (which cannot be downloaded anymore because the workaround which was used is being removed by SoundCloud, so it has been removed from the extractor).
2022-06-16 11:13:19 +02:00
implementation 'com.github.TeamNewPipe:NewPipeExtractor:1b51eab664ec7cbd2295c96d8b43000379cd1b7b'
2020-05-01 16:06:02 +02:00
/** Checkstyle **/
2020-06-28 14:59:44 +02:00
checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
2022-02-26 22:08:10 +01:00
ktlint 'com.pinterest:ktlint:0.44.0'
/** Kotlin **/
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlin_version}"
/** AndroidX **/
2021-07-22 01:31:41 +02:00
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
2021-07-22 01:31:41 +02:00
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.documentfile:documentfile:1.0.1'
2021-07-22 01:31:41 +02:00
implementation 'androidx.fragment:fragment-ktx:1.3.6'
implementation "androidx.lifecycle:lifecycle-livedata:${androidxLifecycleVersion}"
implementation "androidx.lifecycle:lifecycle-viewmodel:${androidxLifecycleVersion}"
2022-03-02 17:01:01 +01:00
implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'
implementation 'androidx.media:media:1.5.0'
implementation 'androidx.multidex:multidex:2.0.1'
2022-03-02 17:01:01 +01:00
implementation 'androidx.preference:preference:1.2.0'
2021-10-19 23:31:59 +02:00
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation "androidx.room:room-runtime:${androidxRoomVersion}"
implementation "androidx.room:room-rxjava3:${androidxRoomVersion}"
kapt "androidx.room:room-compiler:${androidxRoomVersion}"
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
2021-10-19 23:31:59 +02:00
// Newer version specified to prevent accessibility regressions with RecyclerView, see:
// https://developer.android.com/jetpack/androidx/releases/viewpager2#1.1.0-alpha01
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
implementation 'androidx.webkit:webkit:1.4.0'
implementation "androidx.work:work-runtime-ktx:${androidxWorkVersion}"
implementation "androidx.work:work-rxjava3:${androidxWorkVersion}"
2022-05-16 16:54:44 +02:00
implementation 'com.google.android.material:material:1.5.0'
2017-04-26 21:32:20 +02:00
/** Third-party libraries **/
// Instance state boilerplate elimination
implementation "frankiesardo:icepick:${icepickVersion}"
kapt "frankiesardo:icepick-processor:${icepickVersion}"
// HTML parser
2021-12-13 03:26:59 +01:00
implementation "org.jsoup:jsoup:1.14.3"
2017-04-26 21:32:20 +02:00
// HTTP client
2020-10-31 21:55:45 +01:00
//noinspection GradleDependency --> do not update okhttp to keep supporting Android 4.4 users
implementation "com.squareup.okhttp3:okhttp:3.12.13"
2018-03-30 03:24:30 +02:00
// Media player
2020-05-01 16:06:02 +02:00
implementation "com.google.android.exoplayer:exoplayer:${exoPlayerVersion}"
implementation "com.google.android.exoplayer:extension-mediasession:${exoPlayerVersion}"
// Metadata generator for service descriptors
compileOnly "com.google.auto.service:auto-service-annotations:${googleAutoServiceVersion}"
kapt "com.google.auto.service:auto-service:${googleAutoServiceVersion}"
// Manager for complex RecyclerView layouts
implementation "com.github.lisawray.groupie:groupie:${groupieVersion}"
implementation "com.github.lisawray.groupie:groupie-viewbinding:${groupieVersion}"
// Image loading
//noinspection GradleDependency --> 2.8 is the last version, not 2.71828!
implementation "com.squareup.picasso:picasso:2.8"
// Markdown library for Android
implementation "io.noties.markwon:core:${markwonVersion}"
implementation "io.noties.markwon:linkify:${markwonVersion}"
2020-05-01 16:06:02 +02:00
// File picker
2020-05-01 16:06:02 +02:00
implementation "com.nononsenseapps:filepicker:4.2.1"
// Crash reporting
2022-05-16 17:45:56 +02:00
implementation "ch.acra:acra-core:5.9.3"
2020-05-01 16:06:02 +02:00
// Properly restarting
implementation 'com.jakewharton:process-phoenix:2.1.2'
// Reactive extensions for Java VM
2021-12-13 03:26:59 +01:00
implementation "io.reactivex.rxjava3:rxjava:3.0.13"
2020-10-31 21:55:45 +01:00
implementation "io.reactivex.rxjava3:rxandroid:3.0.0"
// RxJava binding APIs for Android UI widgets
2020-10-31 21:55:45 +01:00
implementation "com.jakewharton.rxbinding4:rxbinding:4.0.0"
2020-05-01 16:06:02 +02:00
// Date and time formatting
2021-12-13 03:26:59 +01:00
implementation "org.ocpsoft.prettytime:prettytime:5.0.2.Final"
/** Debugging **/
// Memory leak detection
implementation "com.squareup.leakcanary:leakcanary-object-watcher-android:${leakCanaryVersion}"
implementation "com.squareup.leakcanary:plumber-android:${leakCanaryVersion}"
debugImplementation "com.squareup.leakcanary:leakcanary-android:${leakCanaryVersion}"
// Debug bridge for Android
debugImplementation "com.facebook.stetho:stetho:${stethoVersion}"
debugImplementation "com.facebook.stetho:stetho-okhttp3:${stethoVersion}"
/** Testing **/
testImplementation 'junit:junit:4.13.2'
testImplementation "org.mockito:mockito-core:${mockitoVersion}"
testImplementation "org.mockito:mockito-inline:${mockitoVersion}"
2021-12-13 03:26:59 +01:00
androidTestImplementation "androidx.test.ext:junit:1.1.3"
androidTestImplementation "androidx.test:runner:1.4.0"
androidTestImplementation "androidx.room:room-testing:${androidxRoomVersion}"
androidTestImplementation "org.assertj:assertj-core:${assertJVersion}"
2015-09-04 02:15:03 +02:00
}
static String getGitWorkingBranch() {
try {
def gitProcess = "git rev-parse --abbrev-ref HEAD".execute()
gitProcess.waitFor()
if (gitProcess.exitValue() == 0) {
return gitProcess.text.trim()
} else {
// not a git repository
return ""
}
} catch (IOException ignored) {
// git was not found
return ""
}
2020-03-27 20:45:26 +01:00
}