We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
utilcode版本:1.29.0 工具库aar包中的Manifest文件有一个UtilsFileProvider声明:
<provider android:name="com.blankj.utilcode.util.UtilsFileProvider" android:authorities="${applicationId}.utilcode.provider" android:exported="false" android:grantUriPermissions="true" > <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/util_code_provider_paths" /> </provider>
其关联的xml paths声明文件util_code_provider_paths.xml中有一个块:
util_code_provider_paths.xml
... <external-path name="external_path" path="." /> ...
这个路径对应的是外部存储器的根目录。UtilsFileProvider是一个ContentProvider,我们知道ContentProvider的初始化是在Application的onCreate之前的,上面这个external-path的声明会触发系统调用android.os.Environment.getExternalStorageDirectory。这个调用是早于任何用户可见的交互确认操作的。
external-path
android.os.Environment.getExternalStorageDirectory
这里问题就来了,getExternalStorageDirectory通常是被列为隐私敏感API的,在用户授权之前就调用,在安全检测中会被检测为违规调用。以下是以我司应用为例,通过Frida在root设备上抓到的启动调用堆栈:
getExternalStorageDirectory
基于以上的排查思路,我尝试了将utilcode-1.29.0.aar改为zip后缀解压后,注释掉util_code_provider_paths.xml中的external-path声明块,再重新压缩改后缀为aar。经过验证,这样就不会在UtilsFileProvider的初始化阶段触发getExternalStorageDirectory调用了。
我查看了UtilsFileProvider的源码,看起来作者的意图只是想利用Provider的执行时机来获取ApplicationContext,实现Utils类的无感初始化。 如果确实只是出于这样的目的,建议作者大大可以考虑去掉util_code_provider_paths.xml中的external-path声明块,以规避国内使用可能遇到的隐私合规问题。
UtilsFileProvider
The text was updated successfully, but these errors were encountered:
Blankj
No branches or pull requests
utilcode版本:1.29.0
工具库aar包中的Manifest文件有一个UtilsFileProvider声明:
其关联的xml paths声明文件
util_code_provider_paths.xml
中有一个块:这个路径对应的是外部存储器的根目录。UtilsFileProvider是一个ContentProvider,我们知道ContentProvider的初始化是在Application的onCreate之前的,上面这个
external-path
的声明会触发系统调用android.os.Environment.getExternalStorageDirectory
。这个调用是早于任何用户可见的交互确认操作的。这里问题就来了,
getExternalStorageDirectory
通常是被列为隐私敏感API的,在用户授权之前就调用,在安全检测中会被检测为违规调用。以下是以我司应用为例,通过Frida在root设备上抓到的启动调用堆栈:基于以上的排查思路,我尝试了将utilcode-1.29.0.aar改为zip后缀解压后,注释掉
util_code_provider_paths.xml
中的external-path声明块,再重新压缩改后缀为aar。经过验证,这样就不会在UtilsFileProvider的初始化阶段触发getExternalStorageDirectory
调用了。我查看了
UtilsFileProvider
的源码,看起来作者的意图只是想利用Provider的执行时机来获取ApplicationContext,实现Utils类的无感初始化。如果确实只是出于这样的目的,建议作者大大可以考虑去掉
util_code_provider_paths.xml
中的external-path声明块,以规避国内使用可能遇到的隐私合规问题。The text was updated successfully, but these errors were encountered: