web-dev-qa-db-ja.com

AndroidXの依存関係とXMLが原因でクラッシュ

私は最近Android 3.3に更新しました。依存関係の多くがAndroidXに変更されました。これにより、アプリがクラッシュします。依存関係の変更は、 [〜#〜] xml [〜#〜]同様に、CoordinatorLayoutでも同様の問題に直面しました。AndroidXは比較的新しいため、このトピックに関する質問はあまり多くないため、stackoverflowを検索しました。だから私はこの点について質問をする必要があると感じました。

すべてのXMLについて同様に、floatingactionbuttonのxmlを取得できる場所は、androidX依存関係のXMLを取得できるWebサイトです。

[〜#〜] xml [〜#〜]

<Android.support.design.widget.FloatingActionButton

クラッシュログキャット

Android.view.InflateException: Binary XML file line #15: Binary XML file line #15: Error inflating class Android.support.design.widget.FloatingActionButton
Caused by: Android.view.InflateException: Binary XML file line #15: Error inflating class Android.support.design.widget.FloatingActionButton
Caused by: Java.lang.ClassNotFoundException: Didn't find class "Android.support.design.widget.FloatingActionButton" on path: DexPathList[[Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/base.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_dependencies_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_resources_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_0_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_1_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_2_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_3_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_4_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_5_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_6_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_7_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_8_apk.apk", Zip file "/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.kc.unsplashdemo-kTZQS-p2845Xly7PcTuAmg==/lib/arm, /system/lib, /vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:93)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
    at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
    at Android.view.LayoutInflater.createView(LayoutInflater.Java:606)
    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:790)
    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:730)
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:863)
    at Android.view.LayoutInflater.rInflateChildren(LayoutInflater.Java:824)
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:515)
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:423)
    at com.kc.unsplashdemo.OneFragment.onCreateView(OneFragment.Java:42)
    at androidx.fragment.app.Fragment.performCreateView(Fragment.Java:2439)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1460)
    at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.Java:1784)
    at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1852)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.Java:802)
    at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManager.Java:2625)
    at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.Java:2411)
    at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.Java:2366)
    at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManager.Java:2243)
    at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.Java:654)
    at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.Java:146)

依存関係

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':androidunsplash')
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation("com.squareup.okhttp3:okhttp:3.12.0")
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'com.google.code.gson:gson:2.8.5'

    implementation 'com.google.Android.material:material:1.0.0'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.1'
}
3
Amir Dora

AndroidXの依存関係を追加するだけでは不十分です。コンポーネントをandroidXに移行するには、コンポーネントを手動で変更する必要があります。すべての新しいパッケージの検索には時間がかかる場合がありますが、xml内の古い名前を削除してから、新しい名前を入力することをお勧めします。 AndroidXの依存関係が実際にプロジェクトに追加されている場合、Androidと入力すると、Studioから新しいパッケージ名が提案されます。 enter image description hereenter image description hereenter image description here

さらに、追加情報を探すことができます ここ

3

古いAndroiddependenciesnewのもののマッピングを見つけることができます使用者androidxここ

あなたが探している依存関係に対してこれが見つかります:

com.google.Android.material.floatingactionbutton.FloatingActionButton

レイアウト上で何かを置き換えるときは、ctrl + rを使用してプロジェクト全体で更新し、時間を節約することをお勧めします。実際、androidxに移行するときにかなりの手作業が必要になるためです。

4

Android Studioを3.3にアップグレードしたときに問題が発生しているようです。これを修正するには、次のことを実行できます:
a)コードをAndroidxに移行した場合は、アプリ内のgradle.propertiesで次の2行が存在しないかどうかを確認してください。

Android.useAndroidX=true
Android.enableJetifier=true

次に、Android xmlファイルを含むAndroidxに移行するスタジオのRefactor -> Migrate to Androidxに移動します。このオプションは、以下のターミナルでの変更を示し、それらの変更を受け入れてAndroidxに移行します。

b)これを実行しても機能せず、それでもエラーが発生する場合は、これを交換してください

Android.support.design.widget.FloatingActionButton

com.google.Android.material.floatingactionbutton.FloatingActionButton

これは、以前のサポートライブラリクラスをandroidxパッケージクラスにマップするgoogleによって提供されるマッピングファイルから取得されます。 Androidxへの移行

1
Samyak Upadhyay