ProGuard چیست؟

ProGuard ابزاری است که به عنوان بخشی از Android SDK ارائه شده است و برای بهینه سازی کد بایت، کاهش اندازه APK و مبهم کردن کد برنامه شما استفاده می شود. این اقدامات را روی برنامه های جاوا انجام می دهد و به ویژه برای برنامه های Android قابل استفاده است.


چرا در اندروید به ProGuard نیاز داریم؟

  • بهینه سازی (Optimisation) : بایت کد شما را ساده می کند و عملکرد زمان اجرا برنامه را افزایش می دهد.
  • کاهش اندازه (Size Reduction) : با افزایش پیچیدگی برنامه‌ها و رواج دستگاه‌های تلفن همراه با قابلیت‌های ذخیره‌سازی متفاوت، کاهش اندازه برنامه بسیار مهم است. یک APK کوچکتر منجر به زمان دانلود سریعتر و صرفه جویی در پهنای باند می شود.
  • محافظت (Protection) : برنامه های اندروید را می توان با سهولت نسبی مهندسی معکوس کرد. با مبهم کردن کد خود درک و دستکاری برنامه شما را برای عوامل مخرب به طور قابل توجهی چالش برانگیز می کنید.


Shrinking در ProGuard:

Shrinking به توانایی ProGuard برای شناسایی و حذف کلاس‌ها، فیلدها، متدها و attributes های بلااستفاده از بایت کد برنامه شما و همچنین از هر کتابخانه‌ای که ممکن است استفاده می‌کنید، اشاره دارد.


چرا Shrinking در اندروید مورد نیاز است؟

  • استفاده کارآمد از منابع: کدهای غیر ضروری را حذف می کند و منجر به یک برنامه کارآمدتر می شود.
  • کاهش اندازه APK: همانطور که قبل تر ذکر شد، APK کوچکتر مزایای متعددی مانند زمان دانلود سریعتر، کاهش مصرف داده و مصرف کمتر فضای ذخیره سازی در دستگاه های کاربر را ارائه می دهد.


مبهم سازی در ProGuard:

مبهم سازی فرآیندی است که در آن ProGuard کلاس ها، فیلدها و متدها را با نام های غیر توصیفی تغییر نام می دهد و آنها را به نام های کوتاه و بی معنی تبدیل می کند و درک پایگاه کد را سخت می کند.


چرا مبهم سازی در اندروید مورد نیاز است؟

  • امنیت پیشرفته: مبهم سازی، مهندسی معکوس برنامه را برای هکرها و رقبا چالش برانگیزتر می کند. در حالی که مهندسی معکوس را غیرممکن نمی کند، اما فرآیند را زمان بر می کند.
  • کاهش سایز بیشتر: با تغییر نام کلاس‌ها، فیلدها و متدها به نام‌های کوتاه‌تر، اندازه APK بیشتر کاهش می‌یابد.


مثال ادغام ProGuard:

برای ادغام ProGuard در پروژه اندروید خود:

ProGuard را در فایل build.gradle برنامه خود فعال کنید:

در اینجا، minifyEnabled true به Gradle می‌گوید هنگام ساختن برنامه ProGuard را اجرا کند.

قوانین سفارشی ProGuard:

در اکثر پروژه های دنیای واقعی، قوانین پیش فرض کافی نیستند. شما باید قوانین سفارشی را در فایل «proguard-rules.pro» (یا هر چیزی که فایل پیکربندی ProGuard خود را نامگذاری کرده‌اید) مشخص کنید.

برنامه خود را تست کنید:

پس از ادغام ProGuard، باید برنامه خود را به طور کامل تست کنید. تغییراتی که ProGuard ایجاد می کند گاهی اوقات می تواند رفتار غیرمنتظره ای را ایجاد کند.(به عنوان مثال هنگامی که ProGuard را در پروژه های که api دارید فعال کردید حتما دستورات خاصی را باید به این فایل اضافه کنید در غیر این صورت api شما به درستی در نسخه release کار نمی کند )


فایل Mapping:

هنگامی که پروژه خود را با فعال بودن ProGuard ساختید، یک فایل mapping.txt ایجاد می کند. این فایل کلاس، متد و نام فیلد اصلی را به همتایان مبهم آنها نگاشت می کند. ایمن نگه داشتن این فایل بسیار مهم است، زیرا به آن نیاز دارید تا هر گونه رد stack را از خرابی در برنامه مبهم حذف کنید.


قوانین ProGuard:

قطعا! قوانین ProGuard تعیین می کند که چگونه کد برنامه شما در طول فرآیندهای بهینه سازی و مبهم سازی رفتار می شود. این قوانین می‌توانند حیاتی باشند، به‌خصوص زمانی که از کتابخانه‌های شخص ثالث، reflection یا ویژگی‌های خاص Android استفاده می‌کنید که ProGuard ممکن است به‌طور پیش‌فرض آن‌ها را تشخیص ندهد.

در اینجا چند نمونه از قوانین رایج ProGuard آورده شده است:

1. حفظ همه اعضای کلاس:

2. نگهداری تمام کلاس ها در یک package:

3. نگه داشتن کلاس هایی که یک interface را implement می کنند:

4. حفظ نام کلاس هایی که در layout های XML استفاده می شوند:

5. قوانین برای GSON (برای جلوگیری از مبهم شدن فیلدهایی که GSON برای تجزیه JSON استفاده می کند):

6. قوانین Retrofit:

7. قوانین Dagger 2:

8. در صورت استفاده از Enumerations:

9. برای حفظ پیاده سازی Parcelable خود:

10. برای جلوگیری از مبهم کردن نام متدهای native:

11. قوانین Realm DB:

ذکر این نکته ضروری است که اینها نمونه های کلی هستند. بسته به نسخه های خاص کتابخانه هایی که استفاده می کنید یا تفاوت های برنامه شما، ممکن است به قوانین اضافی یا اصلاح شده نیاز داشته باشید. همیشه برای پیکربندی پیشنهادی ProGuard به مستندات کتابخانه مراجعه کنید و پس از تنظیم ProGuard، برنامه خود را به طور کامل تست کنید تا مطمئن شوید که خطای زمان اجرا وجود ندارد.


نتیجه گیری :

ProGuard یک ابزار مفید برای امنیت و بهینه‌سازی کد در برنامه‌های اندروید است. با استفاده از ProGuard، می‌توانید اندازه برنامه‌های خود را کاهش داده و امنیت آن‌ها را افزایش دهید. این ابزار قادر است کدهای شما را به صورت ایجادی تغییر داده و اطلاعات حساس را مخفی کند، در نتیجه، برنامه‌ی شما مقاوم‌تر در برابر حملات مخرب خواهد بود. در کل، استفاده از ProGuardبهبود امنیت، کارایی و اندازه برنامه شما را بهبود می‌بخشد.



ممنون که تا آخر این پست همراه من بودید ، امیدوارم براتون مفید بوده باشه 🙌🙏✌ (:

بقیه آموزش های mister developer را می توانید در تلگرام و اینستاگرام دنبال کنید!!

کانال تلگرام: mister_developerr

اینستاگرام: mister_developerr

موفق و پیروز باشید