アプリを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レベルでは正常に動作します。どんな提案も役に立ちます、事前に感謝します。
このエラーは、アプリの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>
ドキュメントは古くなっています。 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
問題はあなたのReact Native Android Project is not inAndroidXwhile react-native-image-picker
はAndroidX環境にあるため、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
すべてチェックアウトされ、私の側で機能しています。これが誰にも役立つことを願っており、それが役立つ場合は共有してください。