gradle.properties有什么用? (并使用外部变量)
What is gradle.properties used for? (and using external variables)
我开发 Android 应用程序已有一段时间了,但后来意识到我仍然不知道 gradle.properties
文件的用途。
我读了一些 the Gradle documentation,它解释了您可以添加用于指定 Java 主页或内存设置的配置,例如。它还有什么用处吗?
我在这种时候的主要参考通常是 Google I/O 开源应用程序,查看 its gradle.properties
file,我发现它的一个用途是存储依赖版本变量,所以 Android 支持库依赖的版本代码,例如,不需要每个都用新版本的库更新,只需要更新一个变量即可:
...
// Android support libraries.
compile "com.android.support:appcompat-v7:${android_support_lib_version}"
compile "com.android.support:cardview-v7:${android_support_lib_version}"
compile "com.android.support:design:${android_support_lib_version}"
compile "com.android.support:support-v13:${android_support_lib_version}"
compile "com.android.support:recyclerview-v7:${android_support_lib_version}"
compile "com.android.support:preference-v7:${android_support_lib_version}"
...
同样的想法已用于 Google Play 服务。
然而,在我自己的一个 Android 项目中,我一直在做类似的事情 - 我将我的版本变量放在根 build.gradle
文件中,如下所示:
// Top-level build file where you can add configuration options
// common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.0.5-2'
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
...
然后我一直在我的模块中使用它 build.gradle
像这样:
dependencies {
...
// Kotlin standard library
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
...
}
所以我想我有几个问题:
gradle.properties
文件还有什么用?
在 gradle.properties
中使用外部变量作为依赖版本(如在 iosched 中)与在根 build.gradle
中使用外部变量(如我有在做)?
- 如果有的话,首选哪种方法?
- 是否有 advantages/disadvantages 以一种特定的方式做到这一点?
我将其用于(在 app/build.gradle
内):
signingConfigs {
release {
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
}
}
productFlavors {
....
prod {
applicationIdSuffix ".prod"
buildConfigField "String", "BASE_URL", BASE_URL_PROD
}
....
}
buildTypes.each {
it.buildConfigField "Double", "CONTACT_MAP_LATITUDE", CONTACT_MAP_LATITUDE
it.buildConfigField "Double", "CONTACT_MAP_LONGITUDE", CONTACT_MAP_LONGITUDE
it.resValue "string", "google_maps_api_key", GOOGLE_MAPS_API_KEY
}
RELEASE_KEY_ALIAS
、RELEASE_KEY_PASSWORD
、RELEASE_STORE_FILE
、RELEASE_STORE_PASSWORD
、BASE_URL_PROD
、CONTACT_MAP_LATITUDE
、CONTACT_MAP_LONGITUDE
和 GOOGLE_MAPS_API_KEY
都在 gradle.properties
里面,那个文件没有推送到 git
示例:
gradle.properties: BASE_URL_PROD = "http://something.com/api/"
build.gradle: buildConfigField "String", "BASE_URL", BASE_URL_PROD
java 文件:BuildConfig.BASE_URL
编辑:此外,您可以在此处找到服务器应用程序的示例 (Spring):https://melorriaga.wordpress.com/2016/08/06/gradle-dont-store-api-keys-and-db-information-in-versioned-files/
我开发 Android 应用程序已有一段时间了,但后来意识到我仍然不知道 gradle.properties
文件的用途。
我读了一些 the Gradle documentation,它解释了您可以添加用于指定 Java 主页或内存设置的配置,例如。它还有什么用处吗?
我在这种时候的主要参考通常是 Google I/O 开源应用程序,查看 its gradle.properties
file,我发现它的一个用途是存储依赖版本变量,所以 Android 支持库依赖的版本代码,例如,不需要每个都用新版本的库更新,只需要更新一个变量即可:
...
// Android support libraries.
compile "com.android.support:appcompat-v7:${android_support_lib_version}"
compile "com.android.support:cardview-v7:${android_support_lib_version}"
compile "com.android.support:design:${android_support_lib_version}"
compile "com.android.support:support-v13:${android_support_lib_version}"
compile "com.android.support:recyclerview-v7:${android_support_lib_version}"
compile "com.android.support:preference-v7:${android_support_lib_version}"
...
同样的想法已用于 Google Play 服务。
然而,在我自己的一个 Android 项目中,我一直在做类似的事情 - 我将我的版本变量放在根 build.gradle
文件中,如下所示:
// Top-level build file where you can add configuration options
// common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.0.5-2'
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
...
然后我一直在我的模块中使用它 build.gradle
像这样:
dependencies {
...
// Kotlin standard library
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
...
}
所以我想我有几个问题:
gradle.properties
文件还有什么用?在
gradle.properties
中使用外部变量作为依赖版本(如在 iosched 中)与在根build.gradle
中使用外部变量(如我有在做)?- 如果有的话,首选哪种方法?
- 是否有 advantages/disadvantages 以一种特定的方式做到这一点?
我将其用于(在 app/build.gradle
内):
signingConfigs {
release {
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
storeFile file(RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
}
}
productFlavors {
....
prod {
applicationIdSuffix ".prod"
buildConfigField "String", "BASE_URL", BASE_URL_PROD
}
....
}
buildTypes.each {
it.buildConfigField "Double", "CONTACT_MAP_LATITUDE", CONTACT_MAP_LATITUDE
it.buildConfigField "Double", "CONTACT_MAP_LONGITUDE", CONTACT_MAP_LONGITUDE
it.resValue "string", "google_maps_api_key", GOOGLE_MAPS_API_KEY
}
RELEASE_KEY_ALIAS
、RELEASE_KEY_PASSWORD
、RELEASE_STORE_FILE
、RELEASE_STORE_PASSWORD
、BASE_URL_PROD
、CONTACT_MAP_LATITUDE
、CONTACT_MAP_LONGITUDE
和 GOOGLE_MAPS_API_KEY
都在 gradle.properties
里面,那个文件没有推送到 git
示例:
gradle.properties: BASE_URL_PROD = "http://something.com/api/"
build.gradle: buildConfigField "String", "BASE_URL", BASE_URL_PROD
java 文件:BuildConfig.BASE_URL
编辑:此外,您可以在此处找到服务器应用程序的示例 (Spring):https://melorriaga.wordpress.com/2016/08/06/gradle-dont-store-api-keys-and-db-information-in-versioned-files/