ProGuard یک ابزار رایگان و اوپن سورس است، که برای فشرده (Shrink)، بهینه (Optimize) و ناخوانا (Obfuscate) کردن کلاسهای جاوا مورد استفاده قرار میگیرد. اما همونطور که به عنوان یک توسعه دهنده اندروید، اطلاع دارید، به طور معمول تنظیمات مربوط به Ruleهای ProGuard، کار چندان سادهای نیست و احتمالا تا به حال برای شما نیر اتفاق افتاده که بعد از Build نسخه ریلیز به مشکلاتی در رابطه با تغییرات اعمال شده توسط آن برخورده باشید.
در ادامه قصد دارم کتابخانهای را به شما معرفی کنم که امکان استفاده از ProGuard را برای شما بسیار سادهتر خواهد کرد، این کتابخوانه با استفاده از دو انوتیشن @Keep و @KeepName این امکان را برای شما فراهم میکند که به سادگی از اعمال تغییرات توسط ProGuard مصون نگه دارید.
کتابخانهای که در بالا به آن اشاره شد Squad Leader نام دارد و در مخزن Maven Central در دسترس هست و به سادگی با اضافه کردن آن مطابق کد زیر به پیش نیازهای پروژه خود میتوانید آن را در دسترس داشته باشید.
dependencies { compile 'nl.littlerobots.squadleader:squadleader:1.2' }
بعد از اضافه کردن کد بالا در تنظیمات Gradle و دوباره سازی و Rebuild پروژه به سادگی و با استفاده از Annotation های فوق الذکر به شکلی که در ادامه مشاهده میکنید، قادر به جلوگیری از اعمال تغییرات توسط ProGuard خواهید بود.
import nl.littlerobots.squadleader.Keep; import nl.littlerobots.squadleader.KeepName; public class Example { @KeepName // this field will be stripped if it's unused in your code public String stringTheory; @Keep // this field will be kept, even if it's unused public boolean myBool; }
همانطور که در کد بالا مشاهده میکنید تفاوت @Keep و @KeepName در این است که در هنگام استفاده از @Keep حتی اگر کلاس، پروپرتی یا متود مورد نظر در جایی استفاده نشده باشد، توسط ProGuard حذف نخواهد شد، در حالی که با ستفاده از @KeepName شما این اجازه را به ProGuard میدهید تا در صورت عدم استفاده، کلاس، پروپرتی یا متود مربوطه را خذف یا ناخوانا کند. همانطور که در مثال زیر میبینید شما قادر به استفاده از این انوتیشنها بر روی کل یک کلاس نیز خواهید بود.
@Keep // this class is not stripped or obfuscated public class Example { public String stringTheory; public boolean myBool; }
سلام
من برنامه رو دانلود کردم حالا چنتا پوشه هست پوشه bin رو که باز میکنم و روی فایل proguardgui.bat کلیک میکنم برنامه میاد بالا یعنی از این طریق هم میشه برنامه رو کد کنیم توضیح میدین الان کدوم فایل ها رو اد کنم منظورم فایل apk اکسترکت شده کدوم classes ,dex
ممنون میشم راهنماییم کنید
من متوجه منظور شما نمیشم.
عالیه
اگر بخوایم از این انوتیشن برای متدی که از کلاس والد ارث بری کرده باید چی کنیم. منظورم @override هست. میشه ۲ تا انوتیشن رو به یه متد نسبت داد؟
[…] منبع : hive.ir […]
خوب من فکر میکنم این روش فقط سورس رو بهینه میکنه
در رابطه با فشرده کردن و ناخوانا کردن چه طور عمل میکنه؟