因此,在尝试安装apk时,我遇到了uri曝光问题。我编写了一个自动更新android应用程序的库,然后使用以下代码安装新的apk。
Uri uri = VersionManagerUtil.getFileDestinationUri(apkDir, mParameters.getPackageName());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
startActivityForResult(intent, RC_REQUEST_INSTALL);
由于FileUriExposedException,这对api 24+不起作用所以我切换到FileProvider来获取Uri
Uri uri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
这很好用......但是,FileProvider需要以下依赖项
compile 'com.android.support:support-v4:26.0.0-alpha1'
这是有问题的,因为我想要使用这个库的所有项目都需要具有相同版本的支持库。那么有没有非hacky方法来解决FileUriExposedException的问题?或者有没有一种不同的方法来安装一个可以一起避免这个问题的apk?
答案 0 :(得分:1)
但是,FileProvider需要以下依赖项编译'com.android.support:support-v4:26.0.0-alpha1'
首先,版本取决于您,当前版本(截至发布此答案时)是26.1.0
。
其次,FileProvider
的实际工件是support-core-utils
。要求support-v4
将通过传递依赖项引入support-core-utils
。
这是有问题的,因为我想要使用此库的所有项目都需要具有相同版本的支持库
或兼容的。 FileProvider
已经存在了几年。
那么有什么非黑客方法可以解决FileUriExposedException的问题吗?
您可以使用FileProvider
。或者,您可以编写自己的ContentProvider
来提供文件。
或者有没有一种不同的方法来安装一个可以避免这个问题的apk?
不是我知道的。