در gradle میتونیم دو نوع متغیر تعریف کنیم.این دو نوع به صورت buildConfigField و resValue هستند.buildConfigField رو وقتی تعریف میکنیم داخل کلاس BuildConfig یک متغیر استاتیک تعریف میشه که داخل کد جاوا قابل دسترسی هست.در عوض resValue بصورت کد جاوا تولید نمیشه بلکه به صورت resource میباشد.
خب کاربرد این متغیرها چیه؟به عنوان یک تجربه کاری،اپلیکیشن من قرار بود برای نسخه debug که به واحد تست تحویل داده میشد،از وب سرویسهای سرور A استفاده کنه و برای نسخه release که به کارفرما تحویل میدادیم از سرور B دیتا بگیره.
در ابتدا اومدم یک کلاس Constant به صورت زیر ساختم:
بعد از مدتی با متغیرهای gradle آشنا شدم و در فایل build.gradle به صورت زیر اول دو نوع buildType ساختم:یکی برای release و یکی برای debug.
در مرحله بعدی یک متغیر به اسم BASE_URL تعریف کردم به این صورت:
وقتی gradle رو sync کردم،داخل کلاس BuildConfig دیدم متغیر BASE_URL اضافه شده.حالا برای دسترسی به این متغیر کافی بود بصورت زیر ازش استفاده کنم و در کنارش از منو BuildVariants نوع buildType مورد نظر رو انتخاب کنیم:
دیگه دردسر کامنت کردن برطرف شد و مطمئن بودم نسخه ای که به کارفرما میدم،با آدرس درست خروجی گرفته شده است.
از کاربردهای دیگه ، مثلا API_KEY رو میشه داخل فایل gradle ذخیره کرد و مثلا داخل AndroidManifest بهش دسترسی داشت،به این شکل:
ممنون از دوست عزیزم آقای الیاس محمدی