build.gradle.kts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. plugins {
  2. id("com.android.application")
  3. id("org.jetbrains.kotlin.android")
  4. id("rustPlugin")
  5. {{~#each android-app-plugins}}
  6. id("{{this}}"){{/each}}
  7. }
  8. android {
  9. compileSdk = 33
  10. defaultConfig {
  11. manifestPlaceholders["usesCleartextTraffic"] = "false"
  12. applicationId = "{{reverse-domain app.domain}}.{{snake-case app.name}}"
  13. minSdk = {{android.min-sdk-version}}
  14. targetSdk = 33
  15. versionCode = 1
  16. versionName = "1.0"
  17. }
  18. sourceSets.getByName("main") {
  19. {{#if android.vulkan-validation}}// Vulkan validation layers
  20. val ndkHome = System.getenv("NDK_HOME")
  21. jniLibs.srcDir("${ndkHome}/sources/third_party/vulkan/src/build-android/jniLibs")
  22. {{/if}}
  23. }
  24. buildTypes {
  25. getByName("debug") {
  26. manifestPlaceholders["usesCleartextTraffic"] = "true"
  27. isDebuggable = true
  28. isJniDebuggable = true
  29. isMinifyEnabled = false
  30. packagingOptions {
  31. {{~#each targets}}
  32. jniLibs.keepDebugSymbols.add("*/{{this.abi}}/*.so")
  33. {{/each}}
  34. }
  35. }
  36. getByName("release") {
  37. isMinifyEnabled = true
  38. val proguards = fileTree(".") {
  39. include("**/*.pro")
  40. }
  41. proguardFiles(*proguards.toList().toTypedArray())
  42. }
  43. }
  44. flavorDimensions.add("abi")
  45. productFlavors {
  46. create("universal") {
  47. dimension = "abi"
  48. ndk {
  49. abiFilters += (findProperty("abiList") as? String)?.split(",") ?: listOf(
  50. {{~#each targets}}
  51. "{{this.abi}}",{{/each}}
  52. )
  53. }
  54. }
  55. {{~#each targets}}
  56. create("{{this.arch}}") {
  57. dimension = "abi"
  58. ndk {
  59. abiFilters += listOf("{{this.abi}}")
  60. }
  61. }
  62. {{/each}}
  63. }
  64. assetPacks += mutableSetOf({{quote-and-join-colon-prefix asset-packs}})
  65. namespace = "{{reverse-domain app.domain}}.{{snake-case app.name}}"
  66. }
  67. rust {
  68. rootDirRel = "{{root-dir-rel}}"
  69. targets = (findProperty("targetList") as? String)?.split(",") ?: listOf({{quote-and-join target-names}})
  70. arches = (findProperty("archList") as? String)?.split(",") ?: listOf({{quote-and-join arches}})
  71. }
  72. dependencies {
  73. {{~#each android-app-dependencies-platform}}
  74. implementation(platform("{{this}}")){{/each}}
  75. {{~#each android-app-dependencies}}
  76. implementation("{{this}}"){{/each}}
  77. implementation("androidx.webkit:webkit:1.5.0")
  78. implementation("androidx.appcompat:appcompat:1.5.1")
  79. implementation("com.google.android.material:material:1.7.0")
  80. testImplementation("junit:junit:4.13.2")
  81. androidTestImplementation("androidx.test.ext:junit:1.1.4")
  82. androidTestImplementation("androidx.test.espresso:espresso-core:3.5.0")
  83. }
  84. apply(from = "tauri.build.gradle.kts")
  85. afterEvaluate {
  86. android.applicationVariants.all {
  87. tasks["mergeUniversalReleaseJniLibFolders"].dependsOn(tasks["rustBuildRelease"])
  88. tasks["mergeUniversalDebugJniLibFolders"].dependsOn(tasks["rustBuildDebug"])
  89. if (findProperty("targetList") == null) {
  90. productFlavors.filter{ it.name != "universal" }.forEach { _ ->
  91. val archAndBuildType = name.capitalize()
  92. tasks["merge${archAndBuildType}JniLibFolders"].dependsOn(tasks["rustBuild${archAndBuildType}"])
  93. }
  94. }
  95. }
  96. }