APK hataları

ClassNotFound / NoSuchMethod çökmesi

Hata metni

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;

Neden

Çalışma anında sınıf ya da metot bulunamıyor. Neden genelde R8'in kodu silmesi, iki sürümlü kütüphane ya da multidex sorunudur.

Adım adım çözüm

  1. adb logcat -b crash ile tam stack trace'i al.
  2. Yalnız release'te oluyorsa R8 suçludur: -keep kuralı ekle.
  3. Reflection ve JSON model sınıflarını -keep ile koru.
  4. dependencies ile aynı kütüphanenin iki sürümü var mı bak.
  5. İz karışıksa mapping.txt ile retrace çalıştır.

Örnek komutlar

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

Tekrarlanmasın diye

Reflection kullanıyorsan release APK'yı her seferinde dene.

Yazar ve lisans: Nibras Code