2016-12-07 2 views
2

Я уже давно разрабатывал приложения для Android, но пришел к пониманию, что до сих пор не знаю, для чего используется файл gradle.properties.Что такое gradle.properties? (и используя внешние переменные)

Я читал немного через the Gradle documentation, в котором объясняется, что вы можете добавлять конфигурации для указания дома Java или параметров памяти, например. Есть ли что-то еще для этого?

Моей главной ссылкой на такие времена, как правило, является приложение с открытым исходным кодом для ввода-вывода Google, и, глядя на 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.

Однако, в одном из моих собственных проектов 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 (как я это делал)?

    • Какой предпочтительный метод, если он есть?
    • Есть ли преимущества/недостатки в том, чтобы сделать это одним конкретным способом?
+1

-- все, что вы хотите. Я использую их для локальных настроек, таких как пути к локальным репозиториям Maven, URL-адресам для тестовых серверов и т. Д., Тогда я не фиксирую 'gradle.properties' контроль версий. – CommonsWare

+0

Спасибо за ваш комментарий, @CommonsWare. Не могли бы вы показать мне пример? Кроме того, сможете ли вы указать мне предпочтительный способ настройки внешних переменных (или, если хотите, нет)? Еще раз спасибо. –

+2

Пример Матиаса - это в значительной степени то, что я делаю. Я не могу сказать, что такое «предпочтительный путь» по всем направлениям. Для некоторых вещей переменные среды интересны, просто потому, что Android Studio * не поддерживает их, и поэтому вы можете использовать их для вещей, которые не должны быть построены из среды IDE (например, выпусков). Лично я склонен использовать 'gradle.properties', потому что это простой способ отделить локальную конфигурацию от материала, подходящего для всех. – CommonsWare

ответ

3

Я использую его для (внутри 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/"

сборки.Gradle: buildConfigField "String", "BASE_URL", BASE_URL_PROD

Java файл: BuildConfig.BASE_URL

EDIT: Кроме того, здесь вы можете найти примеры для серверного приложения (Spring): "? Есть ли что-нибудь еще, что может быть использовано для" https://melorriaga.wordpress.com/2016/08/06/gradle-dont-store-api-keys-and-db-information-in-versioned-files/

+0

Спасибо за разъяснение использования Matias. Я думаю, что я буду использовать 'gradle.properties' для локальной конфигурации, как вы это сделали (вместе с другими в комментариях), и продолжайте использовать' build.gradle' для версий зависимостей. –

Смежные вопросы