پوریا رضائی
پوریا رضائی
خواندن ۱ دقیقه·۷ ماه پیش

مشکل ANR به دلیل vectorDrawable ها


داستان از اینجا شروع شد اپلیکیشنی که داشتیم توسعه میدادیم روی اندروید ۶ یا همون API 23 دچار Application Not Responding (ANR) می شد.
بعد از کلی بررسی فهمیدم که بعضی از svg ها که توشون گرادیانت دارند، وقتی توی اندروید اضافه می شن و تبدیل به vectorDrawable می شن، یک تگ به اسم </aapt:attr> توش به وجود میاد که باعث این مشکل میشه.
نمونه این drawable رو میتونید اینجا ببینید:

<aapt:attr name=android:fillColor> <gradient android:startX=8.138 android:startY=21.433 android:endX=38 android:endY=21.433 android:type=linear> <item android:offset=0 android:color=#FFCAB1EF/> <item android:offset=0.92&quotandroid:color=#FF661FFF/> </gradient> </aapt:attr>


برای حل این مشکل راه حلی رو که استفاده کردم میگم شاید به کارتون بیاد:
توی پوشه res اپلیکیشنتون یه پکیج به اسم drawable-v24 درست کنید و drawable ای که از اون svg ساخته می شه رو اونجا بذارید؛ و برای اندروید ها کمتر از ۷ هم میتونید یک svg که گرادیانت نداشته باشه و یا فایل png همون آیکن رو توی پوشه drawable بذارید تا مشکل حل بشه.

اگه میخواید قبل از اینکه آیکن رو ببرید توی اندروید استودیو بفهمید مشکل داره یا نه میتونید svg رو توی سایت https://svg2vector.com بارگذاری کنید و ورژن اندروید رو روی ۵+ قرار بدید؛ اگه مشکل داشته باشه همونجا بتون خطا نشون میده و تبدیلش نمیکنه و اینجاست که متوجه میشید باید برای این آیکون چاره ای بیندیشید!

اگه قبلا به این مشکل خوردید یا بطور کلی راه دیگه ای به ذهنتون می رسه خوشحال میشم باهام در میون بذارید:
https://www.linkedin.com/in/pouria-rezaie76

توسعه اندرویدanrdrawablegradientاندروید استودیو
شاید از این پست‌ها خوشتان بیاید