Манифест с файловым провайдером, совместимым со старой версией Android

Чтобы поддерживать совместимость с Android 8 для моего приложения, я должен был добавить тег "провайдера" в манифест. Это тег:

   <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), и это сообщение об ошибке:

  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 нет этой библиотеки, но я не хочу, чтобы две версии приложения абсолютно имели два разных файла манифеста.

Какие могут быть решения? Можете ли вы добавить библиотеку (которой нет у andorid4) вручную? Это противоречит чему-то?

Иначе я не понимаю смысла ввода кода

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

когда я решу, использовать ли fileprovider или старый тип намерения.

Если у меня есть манифест, который не совместим с версиями до Build.VERSION_CODES.N.... условное утверждение в коде не имеет смысла.

Как я мог решить?

1 ответ

Более вероятный 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>
Другие вопросы по тегам