You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:如何将动态applicationId对应的权限传入String.xml?

实现将动态applicationId传入string.xml指定字段

要把${applicationId}.provider这个动态值注入到string.xml的freshchat_file_provider_authority字段中,不能直接在string.xml里写占位符(资源文件不支持解析这种Gradle变量),得通过Gradle动态生成资源来实现,步骤如下:

  1. 打开模块级的build.gradle文件(通常是app/build.gradle)
  2. 在android闭包内的defaultConfig节点下添加resValue配置,代码如下:
android {
    defaultConfig {
        // 保留你原有的其他配置(比如minSdkVersion、targetSdkVersion等)
        resValue "string", "freshchat_file_provider_authority", "${applicationId}.provider"
    }
}

原理说明

Gradle会在构建过程中自动生成对应的字符串资源,替换你string.xml里的空字段。构建完成后,你可以在build/generated/res/resValues/[buildType]/values/generated.xml文件中看到生成的内容,格式类似:

<string name="freshchat_file_provider_authority" translatable="false">com.your.package.provider</string>

注意事项

  • 如果你有多个产品风味(productFlavors),可以在每个flavor节点下单独配置,或者在defaultConfig中统一配置(applicationId会自动适配不同flavor的变体)
  • 无需手动修改string.xml里的freshchat_file_provider_authority内容,Gradle生成的资源会覆盖原有定义

你的原有代码参考

AndroidManifest.xml中的provider配置:

<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true"
 >
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/freshchat_file_provider_paths"
        tools:replace="android:resource" />
</provider>

string.xml中的原有字段:

<string name="freshchat_file_provider_authority"></string>

内容的提问来源于stack exchange,提问作者Nikhil Masurkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 22:57:26