Navigation Component 导航图引用Gradle配置的BuildConfig BASE_URL方法
导航图XML无法直接引用BuildConfig变量,需要通过Gradle的资源/Manifest占位符能力实现不同构建类型自动替换BASE_URL,两种常用实现方案如下:
方案1:通过Gradle生成字符串资源引用(最常用,不易出错)
步骤1:修改模块级build.gradle配置
在你现有的buildTypes块中,为每个构建类型新增resValue配置,生成对应环境的BASE_URL字符串资源:
buildTypes { debug { applicationIdSuffix ".debug" minifyEnabled false debuggable true buildConfigField("String", "BASE_URL", "\"https://abc.tech/api/\"") // 新增:生成字符串资源 resValue("string", "base_url", "\"https://abc.tech/api\"") } stag { applicationIdSuffix ".stag" minifyEnabled false debuggable false buildConfigField("String", "BASE_URL", "\"https://xyz.tech/api/\"") // 新增:生成字符串资源 resValue("string", "base_url", "\"https://xyz.tech/api\"") } }
注意:这里去掉了BASE_URL末尾的斜杠,避免和后续路径拼接时出现双斜杠问题,你也可以根据自己的实际路径调整。
步骤2:修改导航图deeplink配置
直接引用生成的@string/base_url拼接完整uri即可:
<deepLink app:uri= "@string/base_url/confirm?userId={userId}&code={code}" />
方案2:通过Manifest占位符实现(无需额外生成字符串资源)
步骤1:修改模块级build.gradle配置
在buildTypes中新增manifest占位符:
buildTypes { debug { applicationIdSuffix ".debug" minifyEnabled false debuggable true buildConfigField("String", "BASE_URL", "\"https://abc.tech/api/\"") // 新增:manifest占位符 manifestPlaceholders = [baseUrl: "https://abc.tech/api"] } stag { applicationIdSuffix ".stag" minifyEnabled false debuggable false buildConfigField("String", "BASE_URL", "\"https://xyz.tech/api/\"") // 新增:manifest占位符 manifestPlaceholders = [baseUrl: "https://xyz.tech/api"] } }
步骤2:修改导航图deeplink配置
使用${变量名}格式引用占位符:
<deepLink app:uri= "${baseUrl}/confirm?userId={userId}&code={code}" />
验证方式
编译项目后,检查生成的app/build/intermediates/merged_manifest/[构建类型]/AndroidManifest.xml文件,找到对应页面的intent-filter配置,确认data的android:host、android:pathPrefix等值已经替换为当前构建类型的正确域名即可。
内容的提问来源于stack exchange,提问作者Daniyal Javaid
相关产品推荐
相关产品推荐

