2015-02-26 2 views
2

Im довольно новый для Gradle и использовал Eclipse и Ant для выполнения всех сборок. В нашем приложении мы имеем config.properties файл, расположенный в папке активов на том же уровне, как и СРК Рез и т.д. В этом файле мы имеем следующее:Android Studio - Gradle: как заменить переменные в файле

developmentsettings=true 
defaultLogLevel=4 
prodEnvironment=false 

Как я могу заменить значения этих переменных 3 в файле build.gradle? Создать для него новую задачу, и если да, то это в теге android или нет?

Любые и вся помощь будет оценена должны

+0

Вы хотите заменить эти значения в своем приложении для Android? – Machado

+0

Привет @Machado так зависит, если его выпуск отладочной сборки я хочу, чтобы иметь возможность изменить их на true/false и т. Д., Перед сборкой, так как приложение использует эти переменные для настройки себя. Надеюсь, что имеет смысл Итак, прежде чем использовать ant и свойства, чтобы изменить эти значения –

ответ

1

В build.gradle установлено следующее


android { 
    buildTypes { 
     debug{ 
      resValue "string", "app_name", "My App Name Debug" 
     } 
     release { 
      resValue "string", "app_name", "My App Name" 
     } 
    } 
} 

Вы можете получить доступ к их обычным способом с @string/app_name или R.string.app_name

+0

, но это не изменит значения в активах/config.properties. есть ли в любом случае я могу открыть файл, изменить значения и затем записать его обратно? –

0

You может позволить системе сборки включать в себя разные версии assets/config.properties файл в зависимости от того, выполняете ли вы отладочную или выпускную сборку. Для этого не введите файл в src/main/res/assets/config.properties; вместо этого поставьте отладочную версию в src/debug/res/assets/config.properties и версию выпуска в src/release/res/assets/config.properties. Система сборки выберет правильную версию, когда будет выполнена соответствующая сборка.

+0

Это имеет смысл. Однако @Scott Barta, в настоящее время папка с ресурсами находится на том же уровне, что и src. и в src у меня нет отладки и выпуска, у меня просто есть все пакеты. так я могу создать структуру отладки и выпуска папок или нет? –

+0

О, чтобы сделать эту работу, вы должны изменить структуру своей каталогов на более типичную структуру, основанную на проекте. Полагаю, вы только что перенесли это из Eclipse без переупорядочения источника? –

2

Я не уверен, что вам это нужно в отдельном файле ... но если нет, то BuildConfig выглядит как способ. Вы делаете что-то вроде этого в вашем Gradle файле:

buildTypes { 
    debug { 
     buildConfigField "boolean" "DEVELOPMENT_SETTINGS" "true" 
     buildConfigField "int" "DEFAULT_LOG_LEVEL" "4" 
     buildConfigField "boolean" "PROD_ENVIRONMENT" "false" 
    } 
    release { 
     buildConfigField "boolean" "DEVELOPMENT_SETTINGS" "false" 
     buildConfigField "int" "DEFAULT_LOG_LEVEL" "4" 
     buildConfigField "boolean" "PROD_ENVIRONMENT" "true" 
    } 
} 

И затем из исходного кода андроида, вы ссылки на эти поля, как так:

BuildConfig.DEVELOPMENT_SETTINGS 
BuildConfig.DEFAULT_LOG_LEVEL 
BuildConfig.PROD_ENVIRONMENT 

Вы существенно объявляющие константы, из Gradle, что может использоваться в вашем Java-коде.

+0

И для значения 'String' делаем что-то вроде' buildConfigField "String", "URL", "\" http: //yoururl.com \ "". Значение необходимо экранировать. Вы увидите, что они сгенерированы в файле 'BuildConfig.java'. – theblang

+0

Есть ли способ объявить эти «константы» на более высоком уровне, чем типы сборки? Мне не особенно нравится повторять мои константы для каждой сборки, которую я делаю (что, если я пропущу одну?). –