2

我一直在开发 Android 应用程序一段时间,但意识到我仍然不知道该gradle.properties文件的用途。

我已经阅读了一些Gradle 文档,其中解释了您可以添加配置以指定 Java 主页或内存设置。它还有什么可以用的吗?

我这种时候的主要参考通常是 Google I/O 开源应用程序,查看它的gradle.properties文件,我可以看到它的一种用途是存储依赖版本变量,因此 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"

    ...
}

所以我想我有几个问题:

  1. 该文件还有什么gradle.properties用途?

  2. 将外部变量用于依赖版本gradle.properties(如在 iosched 中)与根中的外部变量build.gradle(如我一直在做的)有什么区别?

    • 如果有的话,哪种方法是首选?
    • 以一种特定的方式做这件事有优点/缺点吗?
4

1 回答 1

5

我将它用于(内部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_LONGITUDEGOOGLE_MAPS_API_KEY所有都在里面gradle.properties,并且那个文件没有被推送到 git

例子:

gradle.properties:BASE_URL_PROD = "http://something.com/api/"

构建.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 -版本化文件/

于 2016-12-07T20:53:50.283 回答