]> git.lizzy.rs Git - minetest.git/blob - android/app/build.gradle
Fix task ordering and more in Gradle Android build
[minetest.git] / android / app / build.gradle
1 apply plugin: 'com.android.application'
2
3 android {
4         compileSdkVersion 33
5         buildToolsVersion '33.0.2'
6         ndkVersion "$ndk_version"
7         defaultConfig {
8                 applicationId 'net.minetest.minetest'
9                 minSdkVersion 21
10                 targetSdkVersion 33
11                 versionName "${versionMajor}.${versionMinor}.${versionPatch}"
12                 versionCode project.versionCode
13         }
14
15         // load properties
16         Properties props = new Properties()
17         def propfile = file('../local.properties')
18         if (propfile.exists())
19                 props.load(new FileInputStream(propfile))
20
21         if (props.getProperty('keystore') != null) {
22                 signingConfigs {
23                         release {
24                                 storeFile file(props['keystore'])
25                                 storePassword props['keystore.password']
26                                 keyAlias props['key']
27                                 keyPassword props['key.password']
28                         }
29                 }
30
31                 buildTypes {
32                         release {
33                                 minifyEnabled true
34                                 signingConfig signingConfigs.release
35                         }
36                 }
37         }
38
39         // for multiple APKs
40         splits {
41                 abi {
42                         enable true
43                         reset()
44                         include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
45                 }
46         }
47
48         compileOptions {
49                 sourceCompatibility JavaVersion.VERSION_1_8
50                 targetCompatibility JavaVersion.VERSION_1_8
51         }
52 }
53
54 task prepareAssets() {
55         def assetsFolder = "build/assets"
56         def projRoot = rootDir.parent
57         def gameToCopy = "minetest_game"
58
59         doFirst {
60                 logger.lifecycle('Preparing assets at {}', assetsFolder)
61         }
62         doLast {
63                 copy {
64                         from "${projRoot}/minetest.conf.example", "${projRoot}/README.md" into assetsFolder
65                 }
66                 copy {
67                         from "${projRoot}/doc/lgpl-2.1.txt" into assetsFolder
68                 }
69                 copy {
70                         from "${projRoot}/builtin" into "${assetsFolder}/builtin"
71                 }
72                 copy {
73                         from "${projRoot}/client/shaders" into "${assetsFolder}/client/shaders"
74                 }
75                 copy {
76                         from "../native/deps/armeabi-v7a/Irrlicht/Shaders" into "${assetsFolder}/client/shaders/Irrlicht"
77                 }
78                 copy {
79                         from "${projRoot}/fonts" include "*.ttf" into "${assetsFolder}/fonts"
80                 }
81                 copy {
82                         from "${projRoot}/games/${gameToCopy}" into "${assetsFolder}/games/${gameToCopy}"
83                 }
84                 copy {
85                         from "${projRoot}/textures" into "${assetsFolder}/textures"
86                 }
87
88                 // compile translations
89                 fileTree("${projRoot}/po").include("**/*.po").forEach { poFile ->
90                         def moPath = "${assetsFolder}/locale/${poFile.parentFile.name}/LC_MESSAGES/"
91                         file(moPath).mkdirs()
92                         exec {
93                                 commandLine 'msgfmt', '-o', "${moPath}/minetest.mo", poFile
94                         }
95                 }
96
97                 file("${assetsFolder}/.nomedia").text = ""
98         }
99
100         task zipAssets(dependsOn: prepareAssets, type: Zip) {
101                 archiveFileName = "Minetest.zip"
102                 from assetsFolder
103                 destinationDirectory = file("src/main/assets")
104         }
105 }
106
107 preBuild.dependsOn zipAssets
108 prepareAssets.dependsOn ':native:getDeps'
109
110 // Map for the version code that gives each ABI a value.
111 import com.android.build.OutputFile
112
113 def abiCodes = ['armeabi-v7a': 0, 'arm64-v8a': 1]
114 android.applicationVariants.all { variant ->
115         variant.outputs.each {
116                 output ->
117                         def abiName = output.getFilter(OutputFile.ABI)
118                         output.versionCodeOverride = abiCodes.get(abiName, 0) + variant.versionCode
119         }
120 }
121
122 dependencies {
123         implementation project(':native')
124         implementation 'androidx.appcompat:appcompat:1.6.1'
125 }