带有与旧版Android版本兼容的fileprovider的清单

时间:2019-02-08 19:07:20

标签: android fileprovider

要保持与我的应用程序与 Android 8 的兼容性,我必须在清单中添加“ provider”标签。这是标签:

   <provider
        android:name="android.support.v4.content.FileProvider"
        android:authorities="xxx.xxx.fileprovider"
        android:exported="false"
        android:grantUriPermissions="true">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths" />
    </provider>

我已经实现了所有内容,并且一切都在android 7/8/9上运行

今天尝试在旧设备( ANDROID 4 )上安装APP,这是一条错误消息:

  java.lang.RuntimeException: **Unable to get provider android.support.v4.content.FileProvider**: 
java.lang.ClassNotFoundException: Didn't find class "**android.support.v4.content.FileProvider**" on path: 
DexPathList[[zip file "/data/app/mywork.activity-4.apk"],nativeLibraryDirectories=[/data/app-lib/mywork.activity-4, /vendor/lib, /system/lib]]

我知道问题是由于在Android4上不存在该库,但我不想使两个版本的APP绝对具有两个不同的清单文件。

有什么解决方案?您可以手动添加库(andorid4没有该库)吗?它与某些东西冲突吗?

否则我不理解输入代码

的含义

(Build.VERSION.SDK_INT> = Build.VERSION_CODES.N

当我决定使用 fileprovider 还是旧的 intent 类型时。

如果我发现与Build.VERSION_CODES.N之前的版本不兼容的清单。...代码中的条件语句没有意义。

我该怎么解决?

1 个答案:

答案 0 :(得分:0)

最有可能targetApi应该起作用:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="xxx.xxx.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false"

    tools:targetApi="o">

    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />

</provider>