Чтобы обеспечить совместимость с 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 или старый тип intent .
Если у меня есть манифест, который не совместим с версиями до Build.VERSION_CODES.N .... условное выражение в коде не имеет смысла.
Какя могу решить?