build.gradle 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. // Gradle build config for Godot Engine's Android port.
  2. buildscript {
  3. apply from: 'config.gradle'
  4. repositories {
  5. google()
  6. mavenCentral()
  7. }
  8. dependencies {
  9. classpath libraries.androidGradlePlugin
  10. classpath libraries.kotlinGradlePlugin
  11. }
  12. }
  13. plugins {
  14. id 'com.android.application'
  15. id 'org.jetbrains.kotlin.android'
  16. }
  17. apply from: 'config.gradle'
  18. allprojects {
  19. repositories {
  20. google()
  21. mavenCentral()
  22. // Godot user plugins custom maven repos
  23. String[] mavenRepos = getGodotPluginsMavenRepos()
  24. if (mavenRepos != null && mavenRepos.size() > 0) {
  25. for (String repoUrl : mavenRepos) {
  26. maven {
  27. url repoUrl
  28. }
  29. }
  30. }
  31. }
  32. }
  33. configurations {
  34. // Initializes a placeholder for the devImplementation dependency configuration.
  35. devImplementation {}
  36. }
  37. dependencies {
  38. implementation libraries.kotlinStdLib
  39. implementation libraries.androidxFragment
  40. if (rootProject.findProject(":lib")) {
  41. implementation project(":lib")
  42. } else if (rootProject.findProject(":godot:lib")) {
  43. implementation project(":godot:lib")
  44. } else {
  45. // Godot gradle build mode. In this scenario this project is the only one around and the Godot
  46. // library is available through the pre-generated godot-lib.*.aar android archive files.
  47. debugImplementation fileTree(dir: 'libs/debug', include: ['*.jar', '*.aar'])
  48. devImplementation fileTree(dir: 'libs/dev', include: ['*.jar', '*.aar'])
  49. releaseImplementation fileTree(dir: 'libs/release', include: ['*.jar', '*.aar'])
  50. }
  51. // Godot user plugins remote dependencies
  52. String[] remoteDeps = getGodotPluginsRemoteBinaries()
  53. if (remoteDeps != null && remoteDeps.size() > 0) {
  54. for (String dep : remoteDeps) {
  55. implementation dep
  56. }
  57. }
  58. // Godot user plugins local dependencies
  59. String[] pluginsBinaries = getGodotPluginsLocalBinaries()
  60. if (pluginsBinaries != null && pluginsBinaries.size() > 0) {
  61. implementation files(pluginsBinaries)
  62. }
  63. }
  64. android {
  65. compileSdkVersion versions.compileSdk
  66. buildToolsVersion versions.buildTools
  67. ndkVersion versions.ndkVersion
  68. compileOptions {
  69. sourceCompatibility versions.javaVersion
  70. targetCompatibility versions.javaVersion
  71. }
  72. kotlinOptions {
  73. jvmTarget = versions.javaVersion
  74. }
  75. assetPacks = [":assetPacks:installTime"]
  76. defaultConfig {
  77. // The default ignore pattern for the 'assets' directory includes hidden files and directories which are used by Godot projects.
  78. aaptOptions {
  79. ignoreAssetsPattern "!.svn:!.git:!.gitignore:!.ds_store:!*.scc:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
  80. }
  81. ndk {
  82. String[] export_abi_list = getExportEnabledABIs()
  83. abiFilters export_abi_list
  84. }
  85. manifestPlaceholders = [godotEditorVersion: getGodotEditorVersion()]
  86. // Feel free to modify the application id to your own.
  87. applicationId getExportPackageName()
  88. versionCode getExportVersionCode()
  89. versionName getExportVersionName()
  90. minSdkVersion getExportMinSdkVersion()
  91. targetSdkVersion getExportTargetSdkVersion()
  92. missingDimensionStrategy 'products', 'template'
  93. }
  94. lintOptions {
  95. abortOnError false
  96. disable 'MissingTranslation', 'UnusedResources'
  97. }
  98. ndkVersion versions.ndkVersion
  99. packagingOptions {
  100. exclude 'META-INF/LICENSE'
  101. exclude 'META-INF/NOTICE'
  102. // 'doNotStrip' is enabled for development within Android Studio
  103. if (shouldNotStrip()) {
  104. doNotStrip '**/*.so'
  105. }
  106. }
  107. signingConfigs {
  108. debug {
  109. if (hasCustomDebugKeystore()) {
  110. storeFile new File(getDebugKeystoreFile())
  111. storePassword getDebugKeystorePassword()
  112. keyAlias getDebugKeyAlias()
  113. keyPassword getDebugKeystorePassword()
  114. }
  115. }
  116. release {
  117. File keystoreFile = new File(getReleaseKeystoreFile())
  118. if (keystoreFile.isFile()) {
  119. storeFile keystoreFile
  120. storePassword getReleaseKeystorePassword()
  121. keyAlias getReleaseKeyAlias()
  122. keyPassword getReleaseKeystorePassword()
  123. }
  124. }
  125. }
  126. buildTypes {
  127. debug {
  128. // Signing and zip-aligning are skipped for prebuilt builds, but
  129. // performed for Godot gradle builds.
  130. zipAlignEnabled shouldZipAlign()
  131. if (shouldSign()) {
  132. signingConfig signingConfigs.debug
  133. } else {
  134. signingConfig null
  135. }
  136. }
  137. dev {
  138. initWith debug
  139. // Signing and zip-aligning are skipped for prebuilt builds, but
  140. // performed for Godot gradle builds.
  141. zipAlignEnabled shouldZipAlign()
  142. if (shouldSign()) {
  143. signingConfig signingConfigs.debug
  144. } else {
  145. signingConfig null
  146. }
  147. }
  148. release {
  149. // Signing and zip-aligning are skipped for prebuilt builds, but
  150. // performed for Godot gradle builds.
  151. zipAlignEnabled shouldZipAlign()
  152. if (shouldSign()) {
  153. signingConfig signingConfigs.release
  154. } else {
  155. signingConfig null
  156. }
  157. }
  158. }
  159. sourceSets {
  160. main {
  161. manifest.srcFile 'AndroidManifest.xml'
  162. java.srcDirs = ['src']
  163. res.srcDirs = ['res']
  164. aidl.srcDirs = ['aidl']
  165. assets.srcDirs = ['assets']
  166. }
  167. debug.jniLibs.srcDirs = ['libs/debug', 'libs/debug/vulkan_validation_layers']
  168. dev.jniLibs.srcDirs = ['libs/dev']
  169. release.jniLibs.srcDirs = ['libs/release']
  170. }
  171. applicationVariants.all { variant ->
  172. variant.outputs.all { output ->
  173. output.outputFileName = "android_${variant.name}.apk"
  174. }
  175. }
  176. }
  177. task copyAndRenameDebugApk(type: Copy) {
  178. from "$buildDir/outputs/apk/debug/android_debug.apk"
  179. into getExportPath()
  180. rename "android_debug.apk", getExportFilename()
  181. }
  182. task copyAndRenameDevApk(type: Copy) {
  183. from "$buildDir/outputs/apk/dev/android_dev.apk"
  184. into getExportPath()
  185. rename "android_dev.apk", getExportFilename()
  186. }
  187. task copyAndRenameReleaseApk(type: Copy) {
  188. from "$buildDir/outputs/apk/release/android_release.apk"
  189. into getExportPath()
  190. rename "android_release.apk", getExportFilename()
  191. }
  192. task copyAndRenameDebugAab(type: Copy) {
  193. from "$buildDir/outputs/bundle/debug/build-debug.aab"
  194. into getExportPath()
  195. rename "build-debug.aab", getExportFilename()
  196. }
  197. task copyAndRenameDevAab(type: Copy) {
  198. from "$buildDir/outputs/bundle/dev/build-dev.aab"
  199. into getExportPath()
  200. rename "build-dev.aab", getExportFilename()
  201. }
  202. task copyAndRenameReleaseAab(type: Copy) {
  203. from "$buildDir/outputs/bundle/release/build-release.aab"
  204. into getExportPath()
  205. rename "build-release.aab", getExportFilename()
  206. }