build.gradle.kts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import com.google.protobuf.gradle.*
  2. plugins {
  3. alias(libs.plugins.agp.app)
  4. alias(libs.plugins.kotlin)
  5. alias(libs.plugins.protobuf)
  6. alias(libs.plugins.lsplugin.resopt)
  7. alias(libs.plugins.lsplugin.jgit)
  8. alias(libs.plugins.lsplugin.apksign)
  9. alias(libs.plugins.lsplugin.apktransform)
  10. alias(libs.plugins.lsplugin.cmaker)
  11. }
  12. val appVerCode = jgit.repo()?.commitCount("refs/remotes/origin/master") ?: 0
  13. val appVerName: String by rootProject
  14. apksign {
  15. storeFileProperty = "releaseStoreFile"
  16. storePasswordProperty = "releaseStorePassword"
  17. keyAliasProperty = "releaseKeyAlias"
  18. keyPasswordProperty = "releaseKeyPassword"
  19. }
  20. apktransform {
  21. copy {
  22. when (it.buildType) {
  23. "release" -> file("${it.name}/BiliRoaming_${appVerName}.apk")
  24. else -> null
  25. }
  26. }
  27. }
  28. cmaker {
  29. default {
  30. targets("biliroaming")
  31. abiFilters("armeabi-v7a", "arm64-v8a", "x86")
  32. arguments += "-DANDROID_STL=none"
  33. cppFlags += "-Wno-c++2b-extensions"
  34. }
  35. buildTypes {
  36. arguments += "-DDEBUG_SYMBOLS_PATH=${layout.buildDirectory.file("symbols/${it.name}").get().asFile.absolutePath}"
  37. }
  38. }
  39. android {
  40. namespace = "me.iacn.biliroaming"
  41. compileSdk = 34
  42. buildToolsVersion = "34.0.0"
  43. ndkVersion = "26.0.10792818"
  44. buildFeatures {
  45. prefab = true
  46. buildConfig = true
  47. }
  48. defaultConfig {
  49. applicationId = "me.iacn.biliroaming"
  50. minSdk = 24
  51. targetSdk = 34 // Target Android U
  52. versionCode = appVerCode
  53. versionName = appVerName
  54. }
  55. buildTypes {
  56. release {
  57. isMinifyEnabled = true
  58. isShrinkResources = true
  59. proguardFiles("proguard-rules.pro")
  60. }
  61. }
  62. compileOptions {
  63. sourceCompatibility(JavaVersion.VERSION_11)
  64. targetCompatibility(JavaVersion.VERSION_11)
  65. }
  66. kotlinOptions {
  67. jvmTarget = "11"
  68. freeCompilerArgs = listOf(
  69. "-Xno-param-assertions",
  70. "-Xno-call-assertions",
  71. "-Xno-receiver-assertions",
  72. "-language-version=2.0",
  73. )
  74. }
  75. sourceSets {
  76. named("main") {
  77. proto {
  78. srcDir("src/main/proto")
  79. include("**/*.proto")
  80. }
  81. }
  82. }
  83. packaging {
  84. resources {
  85. excludes += "**"
  86. }
  87. }
  88. lint {
  89. checkReleaseBuilds = false
  90. }
  91. dependenciesInfo {
  92. includeInApk = false
  93. }
  94. androidResources {
  95. additionalParameters += arrayOf("--allow-reserved-package-id", "--package-id", "0x23")
  96. }
  97. externalNativeBuild {
  98. cmake {
  99. path("src/main/jni/CMakeLists.txt")
  100. version = "3.22.1+"
  101. }
  102. }
  103. }
  104. protobuf {
  105. protoc {
  106. artifact = libs.protobuf.protoc.get().toString()
  107. }
  108. generateProtoTasks {
  109. all().forEach { task ->
  110. task.builtins {
  111. id("java") {
  112. option("lite")
  113. }
  114. id("kotlin") {
  115. option("lite")
  116. }
  117. }
  118. }
  119. }
  120. }
  121. configurations.all {
  122. exclude("org.jetbrains.kotlin", "kotlin-stdlib-jdk7")
  123. exclude("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
  124. }
  125. dependencies {
  126. compileOnly(libs.xposed)
  127. implementation(libs.protobuf.kotlin)
  128. implementation(libs.protobuf.java)
  129. compileOnly(libs.protobuf.protoc)
  130. implementation(libs.kotlin.stdlib)
  131. implementation(libs.kotlin.coroutines.android)
  132. implementation(libs.kotlin.coroutines.jdk)
  133. implementation(libs.androidx.documentfile)
  134. implementation(libs.cxx)
  135. }
  136. val adbExecutable: String = androidComponents.sdkComponents.adb.get().asFile.absolutePath
  137. val restartBiliBili = task("restartBiliBili").apply {
  138. doLast {
  139. exec {
  140. commandLine(adbExecutable, "shell", "am", "force-stop", "tv.danmaku.bili")
  141. }
  142. exec {
  143. commandLine(
  144. adbExecutable,
  145. "shell",
  146. "am",
  147. "start",
  148. "$(pm resolve-activity --components tv.danmaku.bili)"
  149. )
  150. }
  151. }
  152. }
  153. afterEvaluate {
  154. tasks.getByPath("installDebug").finalizedBy(restartBiliBili)
  155. }