أخطاء APK

انهيار ClassNotFound / NoSuchMethod

نص الخطأ

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;

السبب

صنف أو دالة مفقودة وقت التشغيل. السبب غالبًا حذف R8 للشيفرة أو مكتبة بإصدارين أو خلل multidex.

الحل خطوة بخطوة

  1. احصل على stack trace كاملًا بـ adb logcat -b crash.
  2. إن حدث في release فقط فالسبب R8: أضف قاعدة -keep.
  3. احمِ أصناف reflection ونماذج JSON بـ -keep.
  4. استخدم dependencies لترى هل للمكتبة نفسها إصداران.
  5. إن كان الأثر مشوشًا فشغّل retrace مع mapping.txt.

أوامر للمثال

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

كيف لا يتكرر

إن استخدمت reflection فاختبر APK من نوع release في كل مرة.

المؤلف والترخيص: Nibras Code