web-dev-qa-db-ja.com

クラス「androidx.core.content.FileProvider」が見つかりませんでした

アプリをAndroidXに移行しましたが、APIレベル21での起動時にクラッシュします。アプリケーションが次の例外をスローします。

10-08 09:42:50.930 11346-11346/com.example.test E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test, PID: 11346
Java.lang.RuntimeException: Unable to get provider androidx.core.content.FileProvider: Java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[Zip file "/data/app/com.example.test-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-1, /vendor/lib, /system/lib]]
    at Android.app.ActivityThread.installProvider(ActivityThread.Java:5121)
    at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4713)
    at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4596)
    at Android.app.ActivityThread.access$1600(ActivityThread.Java:169)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1340)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:146)
    at Android.app.ActivityThread.main(ActivityThread.Java:5487)
    at Java.lang.reflect.Method.invokeNative(Native Method)
    at Java.lang.reflect.Method.invoke(Method.Java:515)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1283)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1099)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: Java.lang.ClassNotFoundException: Didn't find class "androidx.core.content.FileProvider" on path: DexPathList[[Zip file "/data/app/com.example.test.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-1, /vendor/lib, /system/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:67)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:497)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:457)
    at Android.app.ActivityThread.installProvider(ActivityThread.Java:5106)
    at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4713) 
    at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4596) 
    at Android.app.ActivityThread.access$1600(ActivityThread.Java:169) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1340) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:146) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5487) 
    at Java.lang.reflect.Method.invokeNative(Native Method) 
    at Java.lang.reflect.Method.invoke(Method.Java:515) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1283) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1099) 
    at dalvik.system.NativeStart.main(Native Method)

そして、これが私のAndroidManifest.xmlファイルのprovider定義です。

<provider
    Android:name="androidx.core.content.FileProvider"
    Android:authorities="${applicationId}.fileProvider"
    Android:exported="false"
    Android:grantUriPermissions="true">
    <meta-data
        Android:name="Android.support.FILE_PROVIDER_PATHS"
        Android:resource="@xml/provider_paths" />
</provider>

最新のAPIレベルでは正常に動作します。どんな提案も役に立ちます、事前に感謝します。

11
Armin

このエラーは、アプリのMultiDexの設定が不完全なために発生したようです。 ここ あなたは同様の問題を見つけるかもしれません ここ はそれに答える記事です。

以下を確認することをお勧めします(拡張Appクラスが役に立ちました)。

アプリケーションクラス(たとえば、使用する場合はApp.class)はMultiDexApplicationクラスから拡張する必要があります。

public class BaseApplication extends MultiDexApplication {}

または、Applicationクラスを使用しない場合は、マニフェストを確認してください。

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
        package="com.example.Android.multidex.myapplication">
        <application
            ...
            Android:name="Android.support.multidex.MultiDexApplication">
            ...
        </application>
    </manifest>
7
akhris

ドキュメントは古くなっています。 androidxにはandroidx.multidexを使用:

implementation "androidx.multidex:multidex:2.0.1"

AndroidManifest.xml

<application
    Android:name="androidx.multidex.MultiDexApplication">
</application>

Jetifierがcom.Android.supportライブラリをまだ使用しているときに使用します。

Android.enableJetifier=true
1
Martin Zeitler

問題はあなたのReact Native Android Project is not inAndroidXwhile react-native-image-pickerAndroidX環境にあるため、androidxパッケージライブラリにパッケージがありません。

簡単な修正は、次の行を./Android/gradle.propertiesファイルに追加することです。

Android.useAndroidX=true
Android.enableJetifier=true

古いAndroid=パッケージを使用する既存のRNライブラリがある場合、プロジェクトを更新するとライブラリが失われるため、プロジェクトはビルドされません。

ここにある賢いツールは、古いAndroidパッケージを使用して最新のものにするRNライブラリを扱います。

npm i --save-dev jetifier
npx jetify
react-native run-Android

すべてチェックアウトされ、私の側で機能しています。これが誰にも役立つことを願っており、それが役立つ場合は共有してください。

ソース https://github.com/react-native-community/react-native-image-picker/issues/1088#issuecomment-509755692

0
Kishan Vaghela