@@ -7,38 +7,72 @@ apply plugin: 'com.android.library'
7
7
apply plugin : ' kotlin-android'
8
8
apply plugin : ' kotlin-parcelize'
9
9
10
- buildscript {
11
- def getDepPlatformDir = { dep ->
12
- file(" ${ project.ext.USER_PROJECT_ROOT} /${ project.ext.PLATFORMS_ANDROID} /${ dep.directory} /$PLATFORMS_ANDROID " )
13
- }
14
- def computeKotlinVersion = { -> project. hasProperty(" kotlinVersion" ) ? kotlinVersion : " 1.6.0" }
15
- def kotlinVersion = computeKotlinVersion()
16
- repositories {
17
- google()
18
- jcenter()
10
+ def loadPropertyFile = { path ->
11
+ try {
12
+ if (project. hasProperty(" loadedProperties_${ path} " )) {
13
+ logger. info " \t + gradle properties already loaded. SKIPPING"
14
+ } else {
15
+ logger. info " \t + trying to load gradle properties from \" $path \" "
16
+
17
+ Properties properties = new Properties ()
18
+ properties. load(new FileInputStream (" $path " ))
19
+ properties. each { prop ->
20
+ logger. info " \t + [$path ] setting ${ prop.key} = ${ prop.value} "
21
+ project. ext. set(prop. key, prop. value)
22
+ }
23
+ project. ext. set(" loadedProperties_${ path} " , true )
24
+
25
+ outLogger. withStyle(Style.SuccessHeader ). println " \t + loaded gradle properties from \" $path \" "
26
+ }
27
+ } catch (Exception ex) {
28
+ logger. warn " \t + failed to load gradle properties from \" $path \" . Error is: ${ ex.getMessage()} "
19
29
}
20
- dependencies {
21
- classpath ' com.android.tools.build:gradle:{{runtimeAndroidPluginVersion}}'
22
- classpath " org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion "
30
+ }
31
+
32
+ buildscript {
33
+ def GRADLE_PROPERTIES_FILENAME = " gradle.properties"
23
34
24
- // NOTE: Do not place your application dependencies here; they belong
25
- // in the individual module build.gradle files
35
+ def getFile = { dir , filename ->
36
+ File file = new File (" $dir $File . separator $filename " )
37
+ file?. exists() ? file : null
26
38
}
27
39
28
- // Set up styled logger
29
- project. ext. getDepPlatformDir = getDepPlatformDir
30
- project. ext. outLogger = services. get(StyledTextOutputFactory ). create(" colouredOutputLogger" )
40
+ def getPropertyFile = { dir ->
41
+ return getFile(dir, GRADLE_PROPERTIES_FILENAME )
42
+ }
43
+ def getUserProperties = { dir ->
44
+ def file = getPropertyFile(dir)
45
+ if (! file) {
46
+ return null
47
+ }
31
48
32
- project. ext. USER_PROJECT_ROOT = " $rootDir /../../.."
33
- project. ext. PLATFORMS_ANDROID = " platforms/android"
34
- project. ext. PLUGIN_NAME = " {{pluginName}}"
49
+ Properties properties = new Properties ()
50
+ properties. load(file. newInputStream())
35
51
36
- // the build script will not work with previous versions of the CLI (3.1 or earlier)
37
- def dependenciesJson = file(" ${ project.ext.USER_PROJECT_ROOT} /${ project.ext.PLATFORMS_ANDROID} /dependencies.json" )
38
- def appDependencies = new JsonSlurper (). parseText(dependenciesJson. text)
39
- def pluginData = appDependencies. find { it. name == project. ext. PLUGIN_NAME }
40
- project. ext. nativescriptDependencies = appDependencies. findAll{pluginData. dependencies. contains(it. name)}
41
- project. ext. getAppPath = { ->
52
+ return properties
53
+ }
54
+ def loadPropertyFile = { path ->
55
+ try {
56
+ if (project. hasProperty(" loadedProperties_${ path} " )) {
57
+ logger. info " \t + gradle properties already loaded. SKIPPING"
58
+ } else {
59
+ logger. info " \t + trying to load gradle properties from \" $path \" "
60
+
61
+ Properties properties = new Properties ()
62
+ properties. load(new FileInputStream (" $path " ))
63
+ properties. each { prop ->
64
+ logger. info " \t + [$path ] setting ${ prop.key} = ${ prop.value} "
65
+ project. ext. set(prop. key, prop. value)
66
+ }
67
+ project. ext. set(" loadedProperties_${ path} " , true )
68
+
69
+ outLogger. withStyle(Style.SuccessHeader ). println " \t + loaded gradle properties from \" $path \" "
70
+ }
71
+ } catch (Exception ex) {
72
+ logger. warn " \t + failed to load gradle properties from \" $path \" . Error is: ${ ex.getMessage()} "
73
+ }
74
+ }
75
+ def getAppPath = { ->
42
76
def relativePathToApp = " app"
43
77
def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
44
78
def nsConfig
@@ -59,8 +93,7 @@ buildscript {
59
93
60
94
return project. ext. appPath
61
95
}
62
-
63
- project. ext. getAppResourcesPath = { ->
96
+ def getAppResourcesPath = { ->
64
97
def relativePathToAppResources
65
98
def absolutePathToAppResources
66
99
def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
@@ -87,6 +120,95 @@ buildscript {
87
120
return absolutePathToAppResources
88
121
}
89
122
123
+ def initialize = { ->
124
+ // set up our logger
125
+ project. ext. outLogger = services. get(StyledTextOutputFactory ). create(" colouredOutputLogger" )
126
+ outLogger. withStyle(Style.SuccessHeader ). println " \t ~initialize"
127
+
128
+
129
+ project. ext. USER_PROJECT_ROOT = " $rootDir /../../.."
130
+ project. ext. PLATFORMS_ANDROID = " platforms/android"
131
+ project. ext. PLUGIN_NAME = " {{pluginName}}"
132
+
133
+ def userDir = " $USER_PROJECT_ROOT "
134
+ rootProject. ext. userDefinedGradleProperties = getUserProperties(" ${ getAppResourcesPath()} /Android" )
135
+
136
+ loadPropertyFile(" $USER_PROJECT_ROOT /${ project.ext.PLATFORMS_ANDROID} /gradle.properties" )
137
+ loadPropertyFile(" $USER_PROJECT_ROOT /${ project.ext.PLATFORMS_ANDROID} /additional_gradle.properties" )
138
+
139
+ if (rootProject. hasProperty(" userDefinedGradleProperties" )) {
140
+ rootProject. ext. userDefinedGradleProperties. each { entry ->
141
+ def propertyName = entry. getKey()
142
+ def propertyValue = entry. getValue()
143
+ project. ext. set(propertyName, propertyValue)
144
+ }
145
+ }
146
+
147
+ def getDepPlatformDir = { dep ->
148
+ file(" ${ project.ext.USER_PROJECT_ROOT} /${ project.ext.PLATFORMS_ANDROID} /${ dep.directory} /$PLATFORMS_ANDROID " )
149
+ }
150
+
151
+ // Set up styled logger
152
+ project. ext. getDepPlatformDir = getDepPlatformDir
153
+ project. ext. outLogger = services. get(StyledTextOutputFactory ). create(" colouredOutputLogger" )
154
+
155
+
156
+ // the build script will not work with previous versions of the CLI (3.1 or earlier)
157
+ def dependenciesJson = file(" ${ project.ext.USER_PROJECT_ROOT} /${ project.ext.PLATFORMS_ANDROID} /dependencies.json" )
158
+ def appDependencies = new JsonSlurper (). parseText(dependenciesJson. text)
159
+ def pluginData = appDependencies. find { it. name == project. ext. PLUGIN_NAME }
160
+ project. ext. nativescriptDependencies = appDependencies. findAll{pluginData. dependencies. contains(it. name)}. plus([pluginData])
161
+
162
+ project. ext. getAppResourcesPath = { ->
163
+ def relativePathToAppResources
164
+ def absolutePathToAppResources
165
+ def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
166
+ def nsConfig
167
+
168
+ if (nsConfigFile. exists()) {
169
+ nsConfig = new JsonSlurper (). parseText(nsConfigFile. getText(" UTF-8" ))
170
+ }
171
+
172
+ if (project. hasProperty(" appResourcesPath" )) {
173
+ // when appResourcesPath is passed through -PappResourcesPath=/path/to/App_Resources
174
+ // the path could be relative or absolute - either case will work
175
+ relativePathToAppResources = appResourcesPath
176
+ absolutePathToAppResources = Paths . get(USER_PROJECT_ROOT ). resolve(relativePathToAppResources). toAbsolutePath()
177
+ } else if (nsConfig != null && nsConfig. appResourcesPath != null ) {
178
+ relativePathToAppResources = nsConfig. appResourcesPath
179
+ absolutePathToAppResources = Paths . get(USER_PROJECT_ROOT ). resolve(relativePathToAppResources). toAbsolutePath()
180
+ } else {
181
+ absolutePathToAppResources = " ${ getAppPath()} /App_Resources"
182
+ }
183
+
184
+ project. ext. appResourcesPath = absolutePathToAppResources
185
+
186
+ return absolutePathToAppResources
187
+ }
188
+
189
+
190
+ project. ext. getAppPath = { ->
191
+ def relativePathToApp = " app"
192
+ def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
193
+ def nsConfig
194
+
195
+ if (nsConfigFile. exists()) {
196
+ nsConfig = new JsonSlurper (). parseText(nsConfigFile. getText(" UTF-8" ))
197
+ }
198
+
199
+ if (project. hasProperty(" appPath" )) {
200
+ // when appPath is passed through -PappPath=/path/to/app
201
+ // the path could be relative or absolute - either case will work
202
+ relativePathToApp = appPath
203
+ } else if (nsConfig != null && nsConfig. appPath != null ) {
204
+ relativePathToApp = nsConfig. appPath
205
+ }
206
+
207
+ project. ext. appPath = Paths . get(USER_PROJECT_ROOT ). resolve(relativePathToApp). toAbsolutePath()
208
+
209
+ return project. ext. appPath
210
+ }
211
+ }
90
212
def applyBuildScriptConfigurations = { ->
91
213
def absolutePathToAppResources = getAppResourcesPath()
92
214
def pathToBuildScriptGradle = " $absolutePathToAppResources /Android/buildscript.gradle"
@@ -112,8 +234,25 @@ buildscript {
112
234
apply from : pathToPluginBuildScriptGradle, to : buildscript
113
235
}
114
236
}
237
+
238
+ initialize()
115
239
applyBuildScriptConfigurations()
116
240
241
+ def computeKotlinVersion = { -> project. hasProperty(" kotlinVersion" ) ? kotlinVersion : " ${ ns_default_kotlin_version} " }
242
+ def computeBuildToolsVersion = { -> project. hasProperty(" androidBuildToolsVersion" ) ? androidBuildToolsVersion : " ${ NS_DEFAULT_ANDROID_BUILD_TOOLS_VERSION} " }
243
+ def kotlinVersion = computeKotlinVersion()
244
+ def androidBuildToolsVersion = computeBuildToolsVersion()
245
+
246
+ repositories {
247
+ google()
248
+ mavenCentral()
249
+ }
250
+ dependencies {
251
+ classpath " com.android.tools.build:gradle:$androidBuildToolsVersion "
252
+ classpath " org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion "
253
+ classpath " org.codehaus.groovy:groovy-all:3.0.8"
254
+ }
255
+
117
256
}
118
257
119
258
def pluginDependencies
@@ -156,6 +295,7 @@ android {
156
295
nativescriptDependencies. each { dep ->
157
296
def includeGradlePath = " ${ getDepPlatformDir(dep)} /include.gradle"
158
297
if (file(includeGradlePath). exists()) {
298
+ outLogger. withStyle(Style.SuccessHeader ). println " \t + applying plugin include.gradle from dependency ${ includeGradlePath} "
159
299
apply from : includeGradlePath
160
300
}
161
301
}
@@ -171,6 +311,10 @@ android {
171
311
versionCode 1
172
312
versionName " 1.0"
173
313
}
314
+ lintOptions {
315
+ checkReleaseBuilds false
316
+ abortOnError false
317
+ }
174
318
}
175
319
176
320
@@ -187,9 +331,13 @@ def applyBeforePluginGradleConfiguration() {
187
331
task addDependenciesFromNativeScriptPlugins {
188
332
nativescriptDependencies. each { dep ->
189
333
def aarFiles = fileTree(dir : getDepPlatformDir(dep), include : [" **/*.aar" ])
334
+ def currentDirname = file(project. buildscript. sourceFile). getParentFile(). getName()
190
335
aarFiles. each { aarFile ->
191
336
def length = aarFile. name. length() - 4
192
337
def fileName = aarFile. name[0 .. < length]
338
+ if (fileName == currentDirname) {
339
+ return
340
+ }
193
341
outLogger. withStyle(Style.SuccessHeader ). println " \t + adding aar plugin dependency: " + aarFile. getAbsolutePath()
194
342
project. dependencies. add(" implementation" , [name : fileName, ext : " aar" ])
195
343
}
0 commit comments