gpt4 book ai didi

android - android库项目中的FileProvider权限

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:12 25 4
gpt4 key购买 nike

library project 中我正在使用 FileProvider以我的库 applicationId 作为权限。现在当有人使用这个库时,例如在他的应用程序的两种风格中,由于 FileProviders 冲突,第二种不会安装。

目标

能够为应用程序的每个变体定义我的库 FileProvider 的唯一授权。

第一种方法

我向权限附加了一个随机整数,效果很好。

build.gradle

static def generateContentProviderAuthority() {
Random random = new Random()
return new StringBuilder()
.append("application.id.of.my.library")
.append(".fileprovider")
.append(String.valueOf(random.nextInt(100000)))
.toString()
}


defaultConfig {
...
manifestPlaceholders= [contentProviderAuthority: generateContentProviderAuthority()]
}

list

<provider
android:name=".helper.FileProvider"
android:authorities="${contentProviderAuthority}"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>

但现在 list 会更改每个构建,这会混淆即时运行和其他东西......

解决方案

是否可以在我的库 build.gradle 中获取使用该库的应用程序的确切 applicationId?

最佳答案

正如 CommonsWare 在评论中提到的,在 authorities 部分使用动态 ${applicationId} 就足够了。

<provider
android:name=".ScreenshotFileProvider"
android:authorities="${applicationId}.library.name.screenshots"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths"/>
</provider>

在 CommonsWare 的博客上有更详尽的解释: https://commonsware.com/blog/2017/06/27/fileprovider-libraries.html

关于android - android库项目中的FileProvider权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44073845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com