No description
Find a file
2025-05-08 20:59:40 -04:00
auth Inciando projeto 2025-05-08 20:59:40 -04:00
.DS_Store Inciando projeto 2025-05-08 20:59:40 -04:00
README.md Inciando projeto 2025-05-08 20:59:40 -04:00

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) e local.properties (não versionado).
  • Product Flavors para alternar environment (dev, qa, prod) e version (free, paid).
  • Build Types debug e release.
  • Exposição das URLs e chaves em campos de BuildConfig para 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`

  1. 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 ```

  2. 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", "") ```

  3. 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: environment e version.
  • 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_URL apontará para a URL correta de acordo com o flavor selecionado.
  • BuildConfig.API_KEY conterá a chave definida em local.properties.

6. Considerações Finais

  • Não versionar o arquivo local.properties para proteger segredos.
  • Para adicionar novos ambientes ou versões, basta criar novos flavors e definir os buildConfigField correspondentes.
  • Certifique-se de limpar e reconstruir o projeto após alterações em gradle.properties ou flavors.