Gradle Hooks
NativeScript uses gradle to build android applications. The gradle build files are part of the application template that comes from the android runtime package. Sometimes, if you want to use any external plugins or libraries you need to add some code to the gradle files. There are several locations for gradle files that can be used for adding your code or gradle properties. They are applied in the build process in the following order:
App_Resources/Android/gradle.properties
App_Resources/Android/buildscript.gradle
- plugins'
buildscript.gradle
App_Resources/Android/before-plugins.gradle
- plugins'
include.gradle
App_Resources/Android/app.gradle
gradle.properties
In this file you can set various properties which could be used at a later point in the gradle script files. For example, if you want to define the variable myCustomVariable
with a value myCustomValue
, you would need to add the following in your gradle.properties
file:
myCustomVariable=myCustomValue
Then, in your gradle script file, you can access the property by accessing it on the project
object as project.myCustomVariable
.
app.gradle
In this file you can set the default Android configurations like minSdkVersion
and targetSdkVersion
. You can also add your native dependencies here. In most of the cases, this is the file which you should use when you need to add some gradle code in your application. The reason for applying app.gradle
last is that it should be able to override any properties or settings that any plugin might have set.
android {
defaultConfig {
minSdkVersion 21
generatedDensities = []
targetSdkVersion 28
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
dependencies {
implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha06'
}
Plugins' include.gradle
Every NativeScript plugin, which contains native Android dependencies, should also provide a valid include.gradle
file located in the root of its platforms/android
directory. This include.gradle
file must meet the following requirements:
- It must contain its own configuration.
- It may contain native dependencies required to build the plugin properly.
- Any native dependencies should be available in jcenter or in the Android SDK installed on your machine, if you want it to work out of the box. You can see an example of an implementation dependency here.
This file can be used for many kinds of native project configuration, depending on the purpose of the plugin. You can find more information here
// optional elements
dependencies {
implementation "groupName:pluginName:ver"
}
before-plugins.gradle
Sometimes you need to change something right before the execution of all the include.gradle
files of your project's plugins. An example is setting googlePlayServicesVersion
when you use nativescript-google-maps-sdk plugin. If you set the value with the following code in the app.gradle
file:
ext {
googlePlayServicesVersion = "10.0.1"
}
it will be too late for the plugin to receive it, as all plugins' include.gradle
s will have been applied beforehand. So, the correct place to set this property will be in before-plugins.gradle
instead.
buildscript.gradle
When using a plugin like this one there are some buildscript configurations which need to be added in the application's build.gradle file. Unfortunately this cannot be achieved through the app.gradle
file nor through plugin's include.gradle
files. They are being applied too late in the build process and the changes in the buildscript do not have any effect.
In this case a buildscript.gradle
file needs to be used. These files can be placed either in App_Resources/Android
folder in the NativeScript application, or in the platforms/android
folder of a plugin. All such files will be applied to the buildscript of the application's build.gradle
.
repositories {
google()
jcenter()
}
dependencies {
classpath 'embrace-io:embrace-swazzler:3.1.6'
}