في بيئة تطوير المشاريع الخاصة بي، أواجه تحديات تتعلق بالتبديل بين بيئتين هامتين للمشروع، إحداهما تعتبر بيئة الإنتاج “Prod” والأخرى تعتبر بيئة التجريب “Staging”. ينبغي عليّ تعديل العديد من المفاتيح في ملف التكوين الخاص بالتطبيق، مثل مفتاح الخرائط “google_map_key” واسم العلامة وغيرها، مما يسبب بعض الإزعاج أثناء عمليات البناء.
بحثًا عن حلاً لهذه المشكلة، اكتشفت خاصية “manifestPlaceholders” في ملف التكوين الخاص بـ Gradle، وهي تظهر كخيار ممتاز لتعيين قيم متعددة لمفاتيح محددة في الملف التكويني للتطبيق.
الكود الذي قدمته يوضح كيف يمكن استخدام “manifestPlaceholders” لتعيين قيم مختلفة لمفتاح “google_map_key” بحسب كل بيئة. ولكن السؤال هو: هل يمكن تعيين قيم متعددة لنفس المفتاح؟ الجواب هو نعم، يمكنك فعل ذلك باستخدام تقنية مخصصة في Gradle.
لتحقيق ذلك، يمكنك تعريف متغير إضافي يحمل قائمة من القيم، ومن ثم استخدامه في “manifestPlaceholders” كما يلي:
ext {
google_map_keys = [
dev: "your_dev_key",
prod: "prod_key"
]
}
buildTypes {
debug {
manifestPlaceholders = [google_map_key: google_map_keys.dev]
}
release {
manifestPlaceholders = [google_map_key: google_map_keys.prod]
}
}
بهذا الشكل، يمكنك تعريف المزيد من القيم لنفس المفتاح، واستخدام متغير “google_map_keys” لتحديد القيمة المرادة بناءً على بيئة التشغيل. هذا يجعل عملية التبديل بين البيئتين أسهل وأكثر فعالية.
المزيد من المعلومات
بالتأكيد، سأقدم لك المزيد من المعلومات حول كيفية تحسين وتكامل استخدام “manifestPlaceholders” لتحقيق أقصى استفادة من هذه الخاصية.
لتحسين إدارة القيم وزيادة القابلية للتوسع، يمكنك استخدام ملف خارجي يحتوي على جميع المفاتيح والقيم المرتبطة بها. هذا يسمح لك بتحديث القيم بسهولة دون الحاجة إلى التعديل المباشر في ملف Gradle.
في هذا السياق، يمكنك إنشاء ملف properties خاص بك، مثل “app.properties”، وتعبئته بالقيم المناسبة لكل بيئة، على سبيل المثال:
propertiesdev.google_map_key=your_dev_key prod.google_map_key=prod_key
ثم يمكنك تكوين Gradle لقراءة هذا الملف واستخدام القيم في “manifestPlaceholders”. في الحالة الأساسية، يمكنك استخدام Plugin “com.adarshr.plugin” لتحقيق ذلك.
gradleplugins { id 'com.adarshr.readproperties' version '1.5.0' } def appPropertiesFile = file('app.properties') ext.appProperties = readPropertiesFile(appPropertiesFile) buildTypes { debug { manifestPlaceholders = [google_map_key: appProperties['dev.google_map_key']] } release { manifestPlaceholders = [google_map_key: appProperties['prod.google_map_key']] } }
بهذه الطريقة، يمكنك تحديث قيم الخصائص داخل ملف “app.properties” دون التأثير على ملفات Gradle الرئيسية.
هذا النهج يجمع بين سهولة الصيانة والتكامل، مما يجعل عملية تحديث القيم وتغيير البيئات أمرًا مرنًا وسهلاً.