@@ -7,38 +7,72 @@ apply plugin: 'com.android.library'
77apply plugin : ' kotlin-android'
88apply plugin : ' kotlin-parcelize'
99
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()} "
1929 }
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"
2334
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
2638 }
2739
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+ }
3148
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())
3551
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 = { ->
4276 def relativePathToApp = " app"
4377 def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
4478 def nsConfig
@@ -59,8 +93,7 @@ buildscript {
5993
6094 return project. ext. appPath
6195 }
62-
63- project. ext. getAppResourcesPath = { ->
96+ def getAppResourcesPath = { ->
6497 def relativePathToAppResources
6598 def absolutePathToAppResources
6699 def nsConfigFile = file(" $USER_PROJECT_ROOT /nsconfig.json" )
@@ -87,6 +120,95 @@ buildscript {
87120 return absolutePathToAppResources
88121 }
89122
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+ }
90212 def applyBuildScriptConfigurations = { ->
91213 def absolutePathToAppResources = getAppResourcesPath()
92214 def pathToBuildScriptGradle = " $absolutePathToAppResources /Android/buildscript.gradle"
@@ -112,8 +234,25 @@ buildscript {
112234 apply from : pathToPluginBuildScriptGradle, to : buildscript
113235 }
114236 }
237+
238+ initialize()
115239 applyBuildScriptConfigurations()
116240
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+
117256}
118257
119258def pluginDependencies
@@ -156,6 +295,7 @@ android {
156295 nativescriptDependencies. each { dep ->
157296 def includeGradlePath = " ${ getDepPlatformDir(dep)} /include.gradle"
158297 if (file(includeGradlePath). exists()) {
298+ outLogger. withStyle(Style.SuccessHeader ). println " \t + applying plugin include.gradle from dependency ${ includeGradlePath} "
159299 apply from : includeGradlePath
160300 }
161301 }
@@ -171,6 +311,10 @@ android {
171311 versionCode 1
172312 versionName " 1.0"
173313 }
314+ lintOptions {
315+ checkReleaseBuilds false
316+ abortOnError false
317+ }
174318}
175319
176320
@@ -187,9 +331,13 @@ def applyBeforePluginGradleConfiguration() {
187331task addDependenciesFromNativeScriptPlugins {
188332 nativescriptDependencies. each { dep ->
189333 def aarFiles = fileTree(dir : getDepPlatformDir(dep), include : [" **/*.aar" ])
334+ def currentDirname = file(project. buildscript. sourceFile). getParentFile(). getName()
190335 aarFiles. each { aarFile ->
191336 def length = aarFile. name. length() - 4
192337 def fileName = aarFile. name[0 .. < length]
338+ if (fileName == currentDirname) {
339+ return
340+ }
193341 outLogger. withStyle(Style.SuccessHeader ). println " \t + adding aar plugin dependency: " + aarFile. getAbsolutePath()
194342 project. dependencies. add(" implementation" , [name : fileName, ext : " aar" ])
195343 }
0 commit comments