refactor(build): 重构构建配置以支持多环境产品风味

- 在 config.gradle 中为 dev、fiveg 和 external 环境添加版本代码维度
- 将硬编码的语音服务凭据移至对应的产品风味配置中
- 为不同环境添加 API 授权、令牌、Cookie 等构建配置字段
- 更新 HeaderInterceptor 使用 BuildConfig 中的动态配置值
- 修改 TaskListVM 使用构建配置中的当前用户 ID
- 移除应用级别的硬编码敏感配置信息
这个提交包含在:
徐勤民 2026-04-22 11:46:07 +08:00
父节点 c2d8a0f40e
当前提交 9c96fa601b
共有 4 个文件被更改,包括 49 次插入10 次删除

查看文件

@ -19,10 +19,6 @@ android {
APP_ID : apps.applicationId, APP_ID : apps.applicationId,
] ]
buildConfigField("String", "APP_Name", "\"" + apps.applicationName + "\"") buildConfigField("String", "APP_Name", "\"" + apps.applicationName + "\"")
buildConfigField("String", "SPEECH_DOMAIN", "\"172.16.26.73:16443\"")
buildConfigField("String", "SPEECH_AK", "\"94c535874d7147dd81f7657ddd0cb1b0\"")
buildConfigField("String", "SPEECH_SK", "\"ewKSoNvn8mP2W93kmnzWAT5iVPsmKnMD\"")
buildConfigField("String", "SPEECH_UID", "\"demo-user\"") buildConfigField("String", "SPEECH_UID", "\"demo-user\"")
buildConfigField("String", "SPEECH_DEVICE_ID", "\"demo-device\"") buildConfigField("String", "SPEECH_DEVICE_ID", "\"demo-device\"")
buildConfigField("String", "SPEECH_ASR_PATH", "\"/ar/audio/api/ws/asr/streaming\"") buildConfigField("String", "SPEECH_ASR_PATH", "\"/ar/audio/api/ws/asr/streaming\"")
@ -30,6 +26,38 @@ android {
flavorDimensions "versioncode" flavorDimensions "versioncode"
} }
productFlavors {
dev {
buildConfigField("String", "SPEECH_DOMAIN", "\"172.16.26.73:16443\"")
buildConfigField("String", "SPEECH_AK", "\"94c535874d7147dd81f7657ddd0cb1b0\"")
buildConfigField("String", "SPEECH_SK", "\"ewKSoNvn8mP2W93kmnzWAT5iVPsmKnMD\"")
buildConfigField("String", "API_AUTHORIZATION", "\"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJyb2tpZCIsInJuU3RyIjoiQTU3NlV1VVV3V2s5NEpxSjlQcU9keDE1bE1tdU5JYmMiLCJ1c2VySW5mbyI6eyJzdGFmZk5vIjoicm9raWQifX0.qp1zWjYjqtmFS7Udo7Ga-a_XhVNwRUByXYomu6P6yxg\"")
buildConfigField("String", "API_TOKEN", "\"3760384-DWuKlfwAYwWBsKAprAXF2lEAdKcyz1\"")
buildConfigField("String", "API_COOKIE", "\"__itrace_wid=87125211-8742-4f12-b5ca-32b9b6c860e4; locale=zh-Hans; _webtracing_device_id=t_13501877-b9b303fc-d3f52eb530e026b0\"")
buildConfigField("String", "API_ENVIRONMENT", "\"1\"")
buildConfigField("String", "API_CURRENT_USER_ID", "\"rokid\"")
}
fiveg {
buildConfigField("String", "SPEECH_DOMAIN", "\"172.16.26.73:16443\"")
buildConfigField("String", "SPEECH_AK", "\"94c535874d7147dd81f7657ddd0cb1b0\"")
buildConfigField("String", "SPEECH_SK", "\"ewKSoNvn8mP2W93kmnzWAT5iVPsmKnMD\"")
buildConfigField("String", "API_AUTHORIZATION", "\"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJyb2tpZCIsInJuU3RyIjoiQTU3NlV1VVV3V2s5NEpxSjlQcU9keDE1bE1tdU5JYmMiLCJ1c2VySW5mbyI6eyJzdGFmZk5vIjoicm9raWQifX0.qp1zWjYjqtmFS7Udo7Ga-a_XhVNwRUByXYomu6P6yxg\"")
buildConfigField("String", "API_TOKEN", "\"3760384-DWuKlfwAYwWBsKAprAXF2lEAdKcyz1\"")
buildConfigField("String", "API_COOKIE", "\"__itrace_wid=87125211-8742-4f12-b5ca-32b9b6c860e4; locale=zh-Hans; _webtracing_device_id=t_13501877-b9b303fc-d3f52eb530e026b0\"")
buildConfigField("String", "API_ENVIRONMENT", "\"1\"")
buildConfigField("String", "API_CURRENT_USER_ID", "\"rokid\"")
}
external {
buildConfigField("String", "SPEECH_DOMAIN", "\"172.16.26.73:16443\"")
buildConfigField("String", "SPEECH_AK", "\"94c535874d7147dd81f7657ddd0cb1b0\"")
buildConfigField("String", "SPEECH_SK", "\"ewKSoNvn8mP2W93kmnzWAT5iVPsmKnMD\"")
buildConfigField("String", "API_AUTHORIZATION", "\"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJyb2tpZCIsInJuU3RyIjoiQTU3NlV1VVV3V2s5NEpxSjlQcU9keDE1bE1tdU5JYmMiLCJ1c2VySW5mbyI6eyJzdGFmZk5vIjoicm9raWQifX0.qp1zWjYjqtmFS7Udo7Ga-a_XhVNwRUByXYomu6P6yxg\"")
buildConfigField("String", "API_TOKEN", "\"3760384-DWuKlfwAYwWBsKAprAXF2lEAdKcyz1\"")
buildConfigField("String", "API_COOKIE", "\"__itrace_wid=87125211-8742-4f12-b5ca-32b9b6c860e4; locale=zh-Hans; _webtracing_device_id=t_13501877-b9b303fc-d3f52eb530e026b0\"")
buildConfigField("String", "API_ENVIRONMENT", "\"1\"")
buildConfigField("String", "API_CURRENT_USER_ID", "\"rokid\"")
}
}
buildTypes { buildTypes {
debug { debug {
minifyEnabled false minifyEnabled false

查看文件

@ -1,6 +1,7 @@
package com.nova.brain.glass.repository package com.nova.brain.glass.repository
import android.content.Context import android.content.Context
import com.nova.brain.glass.BuildConfig
import com.xuqm.base.common.SHARE_UESR_TOKEN import com.xuqm.base.common.SHARE_UESR_TOKEN
import com.xuqm.base.extensions.getStringForPreferences import com.xuqm.base.extensions.getStringForPreferences
import com.xuqm.base.extensions.log import com.xuqm.base.extensions.log
@ -24,12 +25,12 @@ class HeaderInterceptor(val context: Context) : Interceptor {
//请求定制:添加请求头 //请求定制:添加请求头
val requestBuilder = original.newBuilder() val requestBuilder = original.newBuilder()
.header("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJyb2tpZCIsInJuU3RyIjoiQTU3NlV1VVV3V2s5NEpxSjlQcU9keDE1bE1tdU5JYmMiLCJ1c2VySW5mbyI6eyJzdGFmZk5vIjoicm9raWQifX0.qp1zWjYjqtmFS7Udo7Ga-a_XhVNwRUByXYomu6P6yxg") .header("Authorization", BuildConfig.API_AUTHORIZATION)
.addHeader("token", "3760384-DWuKlfwAYwWBsKAprAXF2lEAdKcyz1") .addHeader("token", BuildConfig.API_TOKEN)
.addHeader("Content-Type", "application/json;charset=UTF-8") .addHeader("Content-Type", "application/json;charset=UTF-8")
.addHeader("Cookie", "__itrace_wid=87125211-8742-4f12-b5ca-32b9b6c860e4; locale=zh-Hans; _webtracing_device_id=t_13501877-b9b303fc-d3f52eb530e026b0") .addHeader("Cookie", BuildConfig.API_COOKIE)
.addHeader("Environment", "1") .addHeader("Environment", BuildConfig.API_ENVIRONMENT)
.addHeader("currentUserId", "rokid") .addHeader("currentUserId", BuildConfig.API_CURRENT_USER_ID)
.addHeader("terminal", "1") .addHeader("terminal", "1")
.addHeader("modulename", "web") .addHeader("modulename", "web")
.addHeader("currentUserName", "") .addHeader("currentUserName", "")

查看文件

@ -1,6 +1,7 @@
package com.nova.brain.glass.viewmodel package com.nova.brain.glass.viewmodel
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import com.nova.brain.glass.BuildConfig
import com.nova.brain.glass.MyApplication import com.nova.brain.glass.MyApplication
import com.nova.brain.glass.model.TaskItem import com.nova.brain.glass.model.TaskItem
import com.nova.brain.glass.model.data.TaskListData import com.nova.brain.glass.model.data.TaskListData
@ -24,7 +25,7 @@ class TaskListVM : BaseListViewModel<TaskItem>() {
override fun loadData(page: Int, onResponse: Response<TaskItem>) { override fun loadData(page: Int, onResponse: Response<TaskItem>) {
val finalParams = searchParams.copy( val finalParams = searchParams.copy(
userId = searchParams.userId.ifBlank { "rokid" } userId = searchParams.userId.ifBlank { BuildConfig.API_CURRENT_USER_ID }
) )
add( add(
HttpManager.getApi(Service::class.java) HttpManager.getApi(Service::class.java)

查看文件

@ -22,6 +22,15 @@ ext {
] ]
productF = { productF = {
dev {
dimension "versioncode"
}
fiveg {
dimension "versioncode"
}
external {
dimension "versioncode"
}
} }
androidx = [ androidx = [