APK xətaları

ClassNotFound / NoSuchMethod çökməsi

Xəta mətni

java.lang.ClassNotFoundException: Didn't find class "com.example.Foo" on path: DexPathList
java.lang.NoSuchMethodError: No virtual method bar()V in class Lcom/example/Foo;

Səbəb

İş vaxtı sinif və ya metod tapılmır. Səbəb adətən R8-in kodu silməsi, iki versiyalı kitabxana və ya multidex problemidir.

Addım-addım həll

  1. adb logcat -b crash ilə tam stack trace-i götür.
  2. Yalnız release-də baş verirsə, R8 səbəbkardır: -keep qaydası əlavə et.
  3. Reflection və JSON modellərinin siniflərini -keep ilə qoru.
  4. dependencies ilə eyni kitabxananın iki versiyasının olub-olmadığına bax.
  5. Stack trace qarışıqdırsa, mapping.txt ilə retrace işlət.

Nümunə əmrlər

adb logcat -b crash
./gradlew :app:dependencies --configuration releaseRuntimeClasspath
# proguard-rules.pro
-keep class com.example.Foo { *; }
retrace mapping.txt trace.txt

Təkrarlanmasın deyə

Reflection istifadə edirsənsə, release APK-nı hər dəfə sına.

Müəllif və lisenziya: Nibras Code