web-dev-qa-db-ja.com

ClassNotFoundException:androidxの移行後にクラス「Android.support.v4.content.FileProvider」が見つかりませんでした

私はandroidxに移行しようとしています。 Android St​​udioで移行ツールを使用しました。これを行うと、アプリを実行したときに次のスタックトレースが取得されます。

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.peerke.outdoorpuzzlegame.debug, PID: 10901
    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/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
        at Android.app.ActivityThread.installProvider(ActivityThread.Java:6376)
        at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:5932)
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5847)
        at Android.app.ActivityThread.access$1000(ActivityThread.Java:198)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1637)
        at Android.os.Handler.dispatchMessage(Handler.Java:106)
        at Android.os.Looper.loop(Looper.Java:164)
        at Android.app.ActivityThread.main(ActivityThread.Java:6649)
        at Java.lang.reflect.Method.invoke(Native Method)
        at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:826)
     Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.v4.content.FileProvider" on path: DexPathList[[Zip file "/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.peerke.outdoorpuzzlegame.debug-IBtFsngoLqc-cQb_hOO5wQ==/lib/x86, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:125)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
        at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
        at Android.app.AppComponentFactory.instantiateProvider(AppComponentFactory.Java:121)
        at androidx.core.app.CoreComponentFactory.instantiateProvider(CoreComponentFactory.Java:62)
        at Android.app.ActivityThread.installProvider(ActivityThread.Java:6360)
        at Android.app.ActivityThread.installContentProviders(ActivityThread.Java:5932) 
        at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5847) 
        at Android.app.ActivityThread.access$1000(ActivityThread.Java:198) 
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1637) 
        at Android.os.Handler.dispatchMessage(Handler.Java:106) 
        at Android.os.Looper.loop(Looper.Java:164) 
        at Android.app.ActivityThread.main(ActivityThread.Java:6649) 
        at Java.lang.reflect.Method.invoke(Native Method) 
        at com.Android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.Java:493) 
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:826) 

例外は正しいです。 Android.support.v4.content.FileProviderがアプリに存在しません。しかし、androidx.core.content.FileProviderは私のアプリに含まれています。大きな疑問は、なぜ古いバージョンのFileProviderをロードしたいのかということです。

22
Peter Fortuin

古いバージョンのFileProviderをロードするのはなぜですか?

スタックトレースに基づいて、マニフェストの<provider>要素で古いパッケージ名をまだ使用している可能性があります。

24
CommonsWare

@CommonsWareに感謝

詳細説明:

対処方法:Android.support.v4.FileProvider<provider>AndroidManifest.xmlを見つけてください。

androidx.core.content.FileProviderに変更します

53
Yosi Pramajaya

manifiest.xmlファイルでこれを変更するだけです

<provider
        Android:name="Android.support.v4.content.FileProvider"
      .....
</provider>

これに

<provider
    Android:name="androidx.core.content.FileProvider"
    ......
</provider>

または単に

  • リファクタリングに移動します(スタジオ->メニュー->リファクタリング)
  • [AndroidXに移行]をクリックします。それは働いています
  • それは働いています。
12
Attaullah