动态替换file_paths.xml

时间:2016-08-30 09:50:24

标签: android android-studio gradle

我已使用以下res/xml/file_paths.xml设置了一个FileProvider:

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="suggestions" path="Android/data/com.example.app.dev/files/suggestions" />
</paths>

问题是,我有很多产品风格可以改变applicationId。有没有办法用适当的applicationId替换该值而不为每个产品风格创建文件路径?就像更换像Android/data/{appId}/files/suggestions这样的标签一样?甚至使用相对路径......(我已经尝试了所有东西,但只有这条完整的路径才有效)。

2 个答案:

答案 0 :(得分:14)

我设法通过使用Gradle在build.gradle文件中动态创建字符串资源值来表示文件路径来解决此问题:

defaultConfig {
    applicationId "com.example.myapp"
    ...
    resValue 'string', 'images_file_path', "Android/data/" + applicationId + "/files/Pictures"
}

然后,您可以在res/xml/file_paths.xml

中引用此字符串资源值
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="my_images" android:path="@string/images_file_path" />
</paths>

答案 1 :(得分:12)

您根本不需要在file_paths.xml中使用applicationId。只需将external_path子句替换为:

<external-files-path name="my_images" path="Pictures" />

这将需要24.0.0或更高版本的支持库。

https://stackoverflow.com/a/40563179/1033645复制解决方案。