Warning, /network/kdeconnect-android/build.gradle.kts is written in an unsupported language. File is not indexed.
0001 import com.github.jk1.license.LicenseReportExtension 0002 import com.github.jk1.license.render.ReportRenderer 0003 import com.github.jk1.license.render.TextReportRenderer 0004 0005 buildscript { 0006 dependencies { 0007 classpath(libs.android.gradlePlugin) 0008 classpath(libs.kotlin.gradlePlugin) 0009 } 0010 } 0011 0012 @Suppress("DSL_SCOPE_VIOLATION") // TODO: remove once https://youtrack.jetbrains.com/issue/KTIJ-19369 is fixed 0013 plugins { 0014 alias(libs.plugins.android.application) 0015 alias(libs.plugins.kotlin.android) 0016 alias(libs.plugins.dependencyLicenseReport) 0017 } 0018 0019 val licenseResDir = File("$projectDir/build/dependency-license-res") 0020 0021 fun String.runCommand( 0022 workingDir: File = File("."), 0023 timeoutAmount: Long = 60, 0024 timeoutUnit: TimeUnit = TimeUnit.SECONDS 0025 ): String = ProcessBuilder(split("\\s(?=(?:[^'\"`]*(['\"`])[^'\"`]*\\1)*[^'\"`]*$)".toRegex())) 0026 .directory(workingDir) 0027 .redirectOutput(ProcessBuilder.Redirect.PIPE) 0028 .redirectError(ProcessBuilder.Redirect.PIPE) 0029 .start() 0030 .apply { waitFor(timeoutAmount, timeoutUnit) } 0031 .run { 0032 val error = errorStream.bufferedReader().readText().trim() 0033 if (error.isNotEmpty()) { 0034 throw Exception(error) 0035 } 0036 inputStream.bufferedReader().readText().trim() 0037 } 0038 0039 android { 0040 namespace = "org.kde.kdeconnect_tp" 0041 compileSdk = 34 0042 defaultConfig { 0043 minSdk = 21 0044 targetSdk = 33 0045 proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") 0046 } 0047 buildFeatures { 0048 viewBinding = true 0049 compose = true 0050 } 0051 0052 composeOptions { 0053 kotlinCompilerExtensionVersion = "1.5.3" 0054 } 0055 0056 compileOptions { 0057 sourceCompatibility = JavaVersion.VERSION_1_8 0058 targetCompatibility = JavaVersion.VERSION_1_8 0059 0060 // Flag to enable support for the new language APIs 0061 isCoreLibraryDesugaringEnabled = true 0062 } 0063 kotlinOptions { 0064 jvmTarget = "1.8" 0065 } 0066 0067 androidResources { 0068 generateLocaleConfig = true 0069 } 0070 sourceSets { 0071 getByName("main") { 0072 manifest.srcFile("AndroidManifest.xml") 0073 java.setSrcDirs(listOf("src")) 0074 resources.setSrcDirs(listOf("resources")) 0075 res.setSrcDirs(listOf(licenseResDir, "res")) 0076 assets.setSrcDirs(listOf("assets")) 0077 } 0078 getByName("test") { 0079 java.setSrcDirs(listOf("tests")) 0080 } 0081 } 0082 0083 packaging { 0084 resources { 0085 merges += listOf("META-INF/DEPENDENCIES", "META-INF/LICENSE", "META-INF/NOTICE") 0086 } 0087 } 0088 signingConfigs { 0089 getByName("debug") { 0090 storeFile = file("debug.keystore") 0091 storePassword = "android" 0092 keyAlias = "androiddebugkey" 0093 keyPassword = "android" 0094 } 0095 } 0096 buildTypes { 0097 getByName("debug") { 0098 isMinifyEnabled = true 0099 isShrinkResources = true 0100 signingConfig = signingConfigs.getByName("debug") 0101 } 0102 // keep minifyEnabled false above for faster builds; set to 'true' 0103 // when testing to make sure ProGuard/R8 is not deleting important stuff 0104 getByName("release") { 0105 isMinifyEnabled = true 0106 isShrinkResources = true 0107 } 0108 } 0109 lint { 0110 abortOnError = false 0111 checkReleaseBuilds = false 0112 } 0113 0114 testOptions { 0115 unitTests.all { 0116 it.jvmArgs = it.jvmArgs.orEmpty() + listOf( 0117 "--add-opens=java.base/java.lang=ALL-UNNAMED", 0118 "--add-opens=java.base/java.security=ALL-UNNAMED", 0119 "--add-opens=java.base/sun.security.rsa=ALL-UNNAMED", 0120 "--add-opens=java.base/sun.security.x509=ALL-UNNAMED", 0121 "--add-opens=java.base/java.util=ALL-UNNAMED", 0122 "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED" 0123 ) 0124 } 0125 } 0126 0127 applicationVariants.all { 0128 val variant = this 0129 logger.quiet("Found a variant called ${variant.name}") 0130 0131 if (variant.buildType.isDebuggable) { 0132 variant.outputs.all { 0133 val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl 0134 if (output.outputFile.name.endsWith(".apk")) { 0135 // Default output filename is "${project.name}-${v.name}.apk". We want 0136 // the Git commit short-hash to be added onto that default filename. 0137 try { 0138 val hash = "git rev-parse --short HEAD".runCommand(workingDir = rootDir) 0139 val newName = "${project.name}-${variant.name}-${hash}.apk" 0140 logger.quiet(" Found an output file ${output.outputFile.name}, renaming to ${newName}") 0141 output.outputFileName = newName 0142 } catch (ignored: Exception) { 0143 logger.warn("Could not make use of the 'git' command-line tool. Output filenames will not be customized.") 0144 } 0145 } 0146 } 0147 } 0148 } 0149 } 0150 0151 dependencies { 0152 coreLibraryDesugaring(libs.android.desugarJdkLibs) 0153 0154 implementation(libs.androidx.compose.material3) 0155 implementation(libs.androidx.compose.ui.tooling.preview) 0156 implementation(libs.androidx.activity.compose) 0157 implementation(libs.accompanist.themeadapter.material3) // TODO: Remove deprecated library https://google.github.io/accompanist/themeadapter-material3/ 0158 implementation(libs.androidx.constraintlayout.compose) 0159 0160 implementation(libs.androidx.compose.ui.tooling.preview) 0161 debugImplementation(libs.androidx.compose.ui.tooling) 0162 0163 implementation(libs.androidx.media) 0164 implementation(libs.androidx.appcompat) 0165 implementation(libs.androidx.core.ktx) 0166 implementation(libs.androidx.preference.ktx) 0167 implementation(libs.androidx.recyclerview) 0168 implementation(libs.androidx.swiperefreshlayout) 0169 implementation(libs.androidx.documentfile) 0170 implementation(libs.androidx.lifecycle.viewmodel.ktx) 0171 implementation(libs.androidx.lifecycle.runtime.ktx) 0172 implementation(libs.androidx.lifecycle.extensions) 0173 implementation(libs.androidx.lifecycle.common.java8) 0174 implementation(libs.androidx.gridlayout) 0175 implementation(libs.material) 0176 implementation(libs.disklrucache) //For caching album art bitmaps 0177 implementation(libs.slf4j.handroid) 0178 0179 implementation(libs.apache.sshd.core) 0180 implementation(libs.apache.mina.core) //For some reason, makes sshd-core:0.14.0 work without NIO, which isn't available until Android 8 (api 26) 0181 0182 //implementation("com.github.bright:slf4android:0.1.6") { transitive = true } // For org.apache.sshd debugging 0183 implementation(libs.bcpkix.jdk15on) //For SSL certificate generation 0184 0185 implementation(libs.classindex) 0186 annotationProcessor(libs.classindex) 0187 0188 // The android-smsmms library is the only way I know to handle MMS in Android 0189 // (Shouldn't a phone OS make phone things easy?) 0190 // This library was originally authored as com.klinkerapps at https://github.com/klinker41/android-smsmms. 0191 // However, that version is under-loved. I have therefore made "some fixes" and published it. 0192 // Please see https://invent.kde.org/sredman/android-smsmms/-/tree/master 0193 implementation(libs.android.smsmms) 0194 implementation(libs.logger) 0195 0196 implementation(libs.commons.io) 0197 implementation(libs.commons.collections4) 0198 implementation(libs.commons.lang3) 0199 0200 implementation(libs.univocity.parsers) 0201 0202 // Kotlin 0203 implementation(libs.kotlin.stdlib.jdk8) 0204 implementation(libs.kotlinx.coroutines.core) 0205 implementation(libs.kotlinx.coroutines.android) 0206 0207 // Testing 0208 testImplementation(libs.junit) 0209 testImplementation(libs.powermock.core) 0210 testImplementation(libs.powermock.module.junit4) 0211 testImplementation(libs.powermock.api.mockito2) 0212 testImplementation(libs.mockito.core) // powermock isn't compatible with mockito 4 0213 testImplementation(libs.jsonassert) 0214 0215 // For device controls 0216 implementation(libs.reactive.streams) 0217 implementation(libs.rxjava) 0218 } 0219 0220 licenseReport { 0221 configurations = LicenseReportExtension.ALL 0222 renderers = arrayOf<ReportRenderer>(TextReportRenderer()) 0223 } 0224 0225 tasks.named("generateLicenseReport") { 0226 doLast { 0227 val target = File(licenseResDir, "raw/license") 0228 target.parentFile.mkdirs() 0229 target.writeText( 0230 files( 0231 layout.projectDirectory.file("COPYING"), 0232 layout.buildDirectory.file("reports/dependency-license/THIRD-PARTY-NOTICES.txt") 0233 ).joinToString(separator = "\n") { 0234 it.readText() 0235 } 0236 ) 0237 } 0238 } 0239 0240 tasks.named("preBuild") { 0241 dependsOn("generateLicenseReport") 0242 }