كيفية تصحيح تطبيقات (مع بروغ) على تطبيقات Android؟
-
29-09-2019 - |
سؤال
عندما حصلت على شيء مثل هذا
ERROR/AndroidRuntime(18677): Caused by: java.lang.NullPointerException
ERROR/AndroidRuntime(18677): at com.companyname.a.a.a(Unknown Source)
كيف يمكنني معرفة أين هي المشكلة وتصحيح هذه القضية؟ حصلت فقط على إخراج التعيين من Proguard ولا أعرف رقم الخط. شكرًا.
المحلول
أضف الأسطر التالية إلى تكوين بروغارد الخاص بك.
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
الآن ستتضمن آثار المكدس أرقام الخطوط ، وباستخدام أداة Retrace التي تشحن مع Proguard (المدرجة في Android SDK) ، يمكنك تصحيح الأخطاء مثل Normal.
لاحظ أنه حتى إذا لم تستخدم خيارين التكوين هذين ، فلا يزال بإمكان Retrace إخراج معلومات مفيدة بشرط أن يكون لديك ملف التعيينات ، وإن لم يكن الأمر لا لبس فيه تمامًا.
ملاحظة: يتم إنتاج الملف مع التعيينات بواسطة خيار تكوين Proguard:
-printmapping outputfile.txt
في ملف ANT الذي يتم شحنه باستخدام Android SDK ، يتم تعيينه على mapping.txt.
حظا طيبا وفقك الله.
نصائح أخرى
للاستفادة من أي آثار مكدس من حساب سوق Android الخاص بك ، يمكنك استخدام ملف الخريطة الخاص بك ، المنتج مع-printmapping
الخيار في تكوين Proguard ، مع Retrace (أداة Proguard Companion) لفك تشفير تتبع المكدس. يمكنك أيضًا فك التشفير باليد باستخدام محتويات ملف الخريطة ، ولكن هذا مملة.
في دليل Proguard تحت أمثلة ، يوجد قسم حول إنتاج آثار مكدس مفيدة بما في ذلك كيفية الاحتفاظ بأرقام الخط.
لسوء الحظ ، إذا لم تقم بتعيين Proguard للحفاظ على أرقام الأسطر ، فستتمكن فقط من تحديد الطريقة التي ترمي الاستثناء.
الصق تتبع المكدس الخاص بك في stack_trace.txt
قم بتشغيل الأمر التالي: Java -jar Retrace.jar classes- procound.map stack_trace.txt
Retrace.jar في SDK Tools proguard lib retrace.jar classes.
فيما يلي رابط إلى الوثائق الرسمية على أداة الاسترداد من Android SDK: https://developer.android.com/studio/build/shrink-code#decode-stack-trace
هذه المقالة جيدة أيضًا: https://medium.com/@maheshwar.ligade/de-obfuscate-stack-traces-6e19a52a3379
لكل ما تبذلونه من بروس النسخ:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]