[ANDROID] 안드로이드 android.support.v4.content.FileProvider 에러가 발생하는 경우(클래스 찾을 수 없을 때) 해결하는 방법
AndroidManifest.xml 파일에 파일처리가 필요할 때 혹은 파일 공유 기능을 구현할 때 provider 태그를 추가를 하게 됩니다. FileProvider를 사용해서 처리할 수 있기 때문입니다. SDK 24 누가 버전부터는 android.os.FileUriExposedException오류를 해결하기위해 사용됩니다. 최근에 새롭게 프로젝트를 생성했거나 이전 프로젝트를 androidX로 마이그레이션 했다면 또는 AppCompat를 사용중인 경우 android:support.v4.content.FileProvider 클래스는 사용될 수 없습니다. 해당 클래스를 androidX에서 사용하는 클래스가 아니기 때문입니다. androidX를 사용하지 않고 compile “com.android.support:support-v4:SDK버전” 과 같이 support-v4를 사용하여 import android.support.v4.content.FileProvider 해서 해결할 수도 있습니다. 그러나 안드로이드X 라이브러리를 사용해야한다면 다음과 같이 처리하세요.
AndroidManifest.xml 파일에 추가한 provider
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="{applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/fileprovider"/>
</provider>
android.support.v4.content.FileProvider 클래스를 대신 androidX용 라이브러리를 사용하여 해결할 수 있습니다.
androidx.core.content.FileProvider 클래스를 사용하세요.
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="{applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/fileprovider"/>
</provider>
android:resource 태그의 값으로 지정된 @xml/fileprovider는 res폴더안에 xml폴더 생성 후 추가된 fileprovider.xml 파일을 의미합니다.
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path path="Android/data/${applicationId}/" name="files_root" />
<root-path name="root" path="/" />
</paths>
[REFERENCE]
stackoverflow.com/questions/48534293/android-support-v4-content-fileprovider-not-found
[연관 정보]
developer.android.com/jetpack/androidx?hl=ko
developer.android.com/reference/androidx/core/content/FileProvider
developer.android.com/training/secure-file-sharing/share-file?hl=ko