جادوی گریدل برای برنامه نویسان اندروید:متغیرها

Image From Unsplash
Image From Unsplash

در gradle می‌تونیم دو نوع متغیر تعریف کنیم.این دو نوع به صورت buildConfigField و resValue هستند.buildConfigField رو وقتی تعریف می‌کنیم داخل کلاس BuildConfig یک متغیر استاتیک تعریف میشه که داخل کد جاوا قابل دسترسی هست.در عوض resValue بصورت کد جاوا تولید نمیشه بلکه به صورت resource می‌باشد.

خب کاربرد این متغیرها چیه؟به عنوان یک تجربه کاری،اپلیکیشن من قرار بود برای نسخه debug که به واحد تست تحویل داده می‌شد،از وب سرویس‌های سرور A استفاده کنه و برای نسخه release که به کارفرما تحویل می‌دادیم از سرور B دیتا بگیره.

در ابتدا اومدم یک کلاس Constant به صورت زیر ساختم:

وقتی می‌خواستم به کارفرما اپلیکیشن رو بدم،آدرس release رو از حالت کامنت در می‌آوردم و خروجی می‌گرفتم.خب کار اشتباهی بود ولی کار راه انداز بود.البته احتمال خطا بالا بود.

بعد از مدتی با متغیر‌های gradle آشنا شدم و در فایل build.gradle به صورت زیر اول دو نوع buildType ساختم:یکی برای release و یکی برای debug.

در مرحله بعدی یک متغیر به اسم BASE_URL تعریف کردم به این صورت:


وقتی gradle رو sync کردم،داخل کلاس BuildConfig دیدم متغیر BASE_URL اضافه شده.حالا برای دسترسی به این متغیر کافی بود بصورت زیر ازش استفاده کنم و در کنارش از منو BuildVariants نوع buildType مورد نظر رو انتخاب کنیم:

دیگه دردسر کامنت کردن برطرف شد و مطمئن بودم نسخه ای که به کارفرما میدم،با آدرس درست خروجی گرفته شده است.

از کاربردهای دیگه ، مثلا API_KEY رو میشه داخل فایل gradle ذخیره کرد و مثلا داخل AndroidManifest بهش دسترسی داشت،به این شکل:

تعریف در فایل گریدل
تعریف در فایل گریدل
استفاده در فایل manifest
استفاده در فایل manifest


در پایان ممنون میشم دوستان تجربیاتتون را با من به اشتراک بذارید و اگر تجربه مشابه و کاربرد مفیدی برای متغیرهای گریدل دارید بیان کنید.ممنون از توجه شما.