- Kotlin 100%
| auth | ||
| .DS_Store | ||
| README.md | ||
mobile-app
README.md
Este documento descreve a configuração de variáveis de ambiente, flavors e build types no projeto Android (Kotlin + Gradle Kotlin DSL), além do uso dessas variáveis no código.
1. Visão Geral
O projeto utiliza:
- Variáveis de ambiente declaradas em
gradle.properties(versionadas) elocal.properties(não versionado). - Product Flavors para alternar
environment(dev, qa, prod) eversion(free, paid). - Build Types
debugerelease. - Exposição das URLs e chaves em campos de
BuildConfigpara uso em runtime.
2. Variáveis de Ambiente
2.1 gradle.properties
Arquivo versionado que define URLs para cada ambiente e configurações gerais.
```properties
URLs para cada ambiente
DEV_API_BASE_URL=https://dev.example.com/ QA_API_BASE_URL=https://qa.example.com/ PROD_API_BASE_URL=https://prdo.example.com/
Outras configurações (ex: memória do daemon)
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 android.useAndroidX=true kotlin.code.style=official android.nonTransitiveRClass=true ```
2.2 local.properties
Arquivo não versionado, gerado localmente pelo Android Studio, utilizado para armazenar segredos.
```properties sdk.dir=/Users/gilberto/Library/Android/sdk
Nunca comite este valor
API_KEY=minha_chave_secreta ```
3. Configuração no `build.gradle.kts`
-
Leitura de variáveis versionadas via delegação Gradle: ```kotlin val DEV_API_BASE_URL: String by project val QA_API_BASE_URL: String by project val PROD_API_BASE_URL:String by project ```
-
Leitura manual de `local.properties`: ```kotlin val localProperties = Properties().apply { val localPropsFile = rootProject.file("local.properties") if (localPropsFile.exists()) load(localPropsFile.inputStream()) } val apiKey: String = localProperties.getProperty("API_KEY", "") ```
-
BuildConfig Fields no `defaultConfig` e nos flavors: ```kotlin defaultConfig { buildConfigField("String", "API_BASE_URL", ""$PROD_API_BASE_URL"") buildConfigField("String", "API_KEY", ""$apiKey"") }
productFlavors { create("dev") { dimension = "environment" buildConfigField("String", "API_BASE_URL", ""$DEV_API_BASE_URL"") } create("qa") { dimension = "environment" buildConfigField("String", "API_BASE_URL", ""$QA_API_BASE_URL"") } create("prod") { dimension = "environment" buildConfigField("String", "API_BASE_URL", ""$PROD_API_BASE_URL"") } create("free") { dimension = "version" } create("paid") { dimension = "version" } } ```
4. Flavor Dimensions e Build Types
- Flavor Dimensions:
environmenteversion. - Ambientes:
dev,qa,prod. - Versões:
free,paid. - Build Types:
debug:applicationIdSuffix = ".debug",isMinifyEnabled = false,isDebuggable = true.release:isMinifyEnabled = true, R8/ProGuard aplicado.
4.1 Comandos de Build
| Flavor | Build Type | Comando |
|---|---|---|
| dev + free | debug | ./gradlew assembleDevFreeDebug |
| dev + paid | debug | ./gradlew assembleDevPaidDebug |
| qa + free | debug | ./gradlew assembleQaFreeDebug |
| prod + paid | release | ./gradlew assembleProdPaidRelease |
| Release padrão | release | ./gradlew assembleRelease (prod + paid) |
5. Exemplo de Uso em Código Kotlin
No objeto RetrofitClient, utilize as constantes geradas:
```kotlin object RetrofitClient { private const val BASE_URL = BuildConfig.API_BASE_URL
val apiService: ApiService by lazy {
Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
}
} ```
BuildConfig.API_BASE_URLapontará para a URL correta de acordo com o flavor selecionado.BuildConfig.API_KEYconterá a chave definida emlocal.properties.
6. Considerações Finais
- Não versionar o arquivo
local.propertiespara proteger segredos. - Para adicionar novos ambientes ou versões, basta criar novos flavors e definir os
buildConfigFieldcorrespondentes. - Certifique-se de limpar e reconstruir o projeto após alterações em
gradle.propertiesou flavors.