Keystore: یہ کیا ہے، کون سے فارمیٹس موجود ہیں اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-04-16 مطالعے کا وقت: 10 منٹ

Keystore ایک محفوظ خفیہ نگاری کا ذخیرہ ہے جو Android ڈیولپمنٹ میں نجی کلیدوں اور ایپ دستخطی سرٹیفکیٹس کو ذخیرہ کرنے کے لیے استعمال ہوتا ہے۔ Android Developers Documentation, 2026 کے مطابق، Google Play پر شائع کرنے سے پہلے ہر APK یا App Bundle پر Keystore سے ڈیجیٹل دستخط ہونا ضروری ہے۔ آئیے Keystore فارمیٹس، تخلیق اور پروجیکٹ میں استعمال کو سمجھتے ہیں۔

اہم نکات

  • Keystore — Android ایپس پر دستخط کرنے کے لیے استعمال ہونے والی نجی کلیدوں اور سرٹیفکیٹس کو ذخیرہ کرنے کا ایک کنٹینر
  • JKS (Java KeyStore) — ایک پرانا فارمیٹ جو Java ایکو سسٹم تک محدود ہے
  • PKCS12 — ایک معیاری فارمیٹ جو Google نئے پروجیکٹس کے لیے تجویز کرتا ہے
  • Keytool — کمانڈ لائن سے Keystore بنانے اور ان کا انتظام کرنے کے لیے JDK یوٹیلیٹی
  • Keystore کا کھو جانا Google Play میں ایپ کو اپ ڈیٹ کرنے سے قاصر ہونے کا مطلب ہے — بیک اپ لازمی ہے

Keystore کیا ہے

Keystore (KeyStore) خفیہ نگاری کی کلیدوں، سرٹیفکیٹس اور قابل اعتماد اندراجات کو ذخیرہ کرنے کے لیے Java Cryptography Architecture (JCA) کا ایک معیاری طریقہ کار ہے۔ Android ڈیولپمنٹ میں، Keystore کا استعمال نجی کلید کو ذخیرہ کرنے کے لیے کیا جاتا ہے جو اشاعت سے پہلے ایپ پر دستخط کرتی ہے۔ دستخط اس بات کی ضمانت دیتا ہے کہ ایپ واقعی مخصوص ڈیولپر نے شائع کی تھی اور اشاعت کے بعد اس کا کوڈ تبدیل نہیں کیا گیا ہے۔ ہر ایپ اپ ڈیٹ پر اسی کلید سے دستخط ہونا ضروری ہے، ورنہ Google Play APK یا App Bundle کو مسترد کر دے گا۔

ایک Keystore میں متعدد اندراجات (علیاس) ہو سکتے ہیں، ہر ایک ایک سرٹیفکیٹ کے ساتھ ایک کلید جوڑی (نجی اور عوامی) کی نمائندگی کرتا ہے۔ علیاس (Alias) ایک منفرد اندراج کا نام ہے جس کے ذریعے ایپ دستخط کے دوران کلید تک رسائی حاصل کرتی ہے۔ ایک عام Android پروجیکٹ میں، Keystore میں ریلیز ورژن پر دستخط کرنے کے لیے ایک اندراج ہوتا ہے اور ڈیبگ بلڈ پر دستخط کرنے کے لیے اضافی اندراجات ہو سکتے ہیں۔ Google Play Console اپ لوڈ کردہ ہر ایپ کے لیے SHA-1 اور SHA-256 سرٹیفکیٹ فنگر پرنٹس دکھاتا ہے۔

Android Studio میں Build → Generate Signed Bundle / APK مینو کے ذریعے بلٹ ان Keystore سپورٹ شامل ہے۔ Android Studio کا دستخطی وزرڈ آپ کو ایک نیا Keystore بنانے یا موجودہ کو منتخب کرنے، علیاس، Keystore اور کلید کے پاس ورڈ، نیز سرٹیفیکیشن ڈیٹا (تنظیم کا نام، شہر، ملک) بتانے کی اجازت دیتا ہے۔ یہ ڈیٹا سرٹیفکیٹ میں شامل ہوتا ہے اور APK دستخط کی تصدیق کرتے وقت صارفین کو دکھائی دیتا ہے۔ Google Play کو ضرورت ہے کہ سرٹیفکیٹ کم از کم 25 سال کے لیے درست ہو — Android ایپ انسٹال کرتے وقت میعاد ختم ہونے کی تاریخ چیک کرتا ہے۔

Android کے لیے Keystore کیوں اہم ہے

Google Play میں ایپ اپ ڈیٹس صرف اسی کلید سے ممکن ہیں جس نے پہلے ورژن پر دستخط کیا تھا۔ اگر Keystore کھو جائے تو اپ ڈیٹ شائع کرنا ناممکن ہے — ایپ کو ایک نئے پیکیج نام کے تحت دوبارہ شائع کرنا ہوگا۔ Google Play Console Help (2026) کے مطابق، ایپ دستخطی کلید صرف Google Play App Signing کے ذریعے بازیافت کی جا سکتی ہے — ایک سروس جو کلید کو Google کی طرف محفوظ کرتی ہے۔ اگر ڈیولپر نے یہ اختیار استعمال کیا، تو مقامی Keystore کھونا سنگین نہیں ہے۔

Keystore کیسے کام کرتا ہے

Android ایپ پر دستخط کرنے کے عمل میں APK مواد کا ایک ڈائجسٹ (ہیش) بنانا اور اسے Keystore سے نجی کلید کے ساتھ خفیہ کرنا شامل ہے۔ Android SDK Build Tools میں apksigner یوٹیلیٹی شامل ہے، جو APK Signature Scheme v2 (یا Android 9+ کے لیے v3) کا استعمال کرتے ہوئے دستخط کرتی ہے۔ ایپ انسٹال کرتے وقت، Android دستخط کی تصدیق کرتا ہے: سرٹیفکیٹ کی عوامی کلید سے دستخط کو ڈیکرپٹ کرتا ہے، APK ہیش کا اصل سے موازنہ کرتا ہے — اگر ہیش مماثل نہیں ہیں تو انسٹالیشن مسترد کر دی جاتی ہے۔

Android متعدد دستخطی اسکیموں کو سپورٹ کرتا ہے: v1 (JAR دستخط)، v2 (APK Signature Scheme)، v3 (کلید گردش سپورٹ کے ساتھ APK Signature Scheme) اور v4 (Android 11+ کے لیے بڑھتی ہوئی انسٹالیشن)۔ Google Play نئی ایپس کے لیے v2 یا v3 کا تقاضا کرتا ہے۔ apksigner دستخط کے دوران خود بخود تمام ضروری اسکیمیں شامل کرتا ہے اگر کلید متعلقہ الگورتھم کو سپورٹ کرتی ہے۔ Android 11+ v4 دستخط کے ساتھ ADB انسٹالیشن کو سپورٹ کرتا ہے، جو ڈیوائس پر بڑے APK کی بڑھتی ہوئی لوڈنگ کو تیز کرتا ہے۔

الگورتھم: Android دستخطی کلید کے لیے RSA-2048 یا ECDSA P-256 استعمال کرنے کی سفارش کرتا ہے۔ سرٹیفکیٹ X.509 v3 ہونا چاہیے۔ Android تصدیق کرتا ہے کہ انسٹالیشن کے وقت سرٹیفکیٹ درست ہے — اگر اس کی میعاد ختم ہو گئی ہے تو انسٹالیشن مسدود ہو جاتی ہے۔ اسی لیے Google سرٹیفکیٹ کی میعاد کی مدت کم از کم 25 سال مقرر کرنے کی سفارش کرتا ہے۔ Google Play App Signing دو کلیدیں استعمال کرتا ہے: ایپ دستخطی کلید (app signing key) اور اپ لوڈ کلید (upload key) — ڈیولپر APK کو Console میں اپ لوڈ کرنے کے لیے اپ لوڈ کلید استعمال کرتا ہے، اور Google صارفین کے لیے مرکزی کلید سے ایپ پر دستخط کرتا ہے۔

Keystore فارمیٹس: JKS اور PKCS12

Java دو اہم Keystore فارمیٹس کو سپورٹ کرتا ہے: JKS (Java KeyStore) — Oracle کا ملکیتی فارمیٹ جو JDK 1.2 سے موجود ہے، اور PKCS12 — RSA Laboratories کا معیاری Public-Key Cryptography Standards #12 فارمیٹ۔ JKS اپنا ڈیٹا ذخیرہ کرنے کا فارمیٹ استعمال کرتا ہے اور صرف Java ایکو سسٹم کے اندر سپورٹ کیا جاتا ہے۔ PKCS12 ایک کھلا معیار ہے جو Java، .NET، OpenSSL، Python (cryptography) اور زیادہ تر دیگر خفیہ نگاری کی لائبریریوں کے ذریعے سپورٹ کیا جاتا ہے۔

Google Play 2021 کے بعد بنائے گئے نئے Keystore کے لیے PKCS12 کو ترجیحی فارمیٹ کے طور پر تجویز کرتا ہے۔ JDK 9 اور بعد کے ورژن ڈیفالٹ طور پر PKCS12 فارمیٹ میں Keystore بناتے ہیں (پہلے JKS ڈیفالٹ تھا)۔ PKCS12 کا بنیادی فائدہ مطابقت ہے: .p12 فائل کو Java سے منسلک نہ ہونے والے کسی بھی ماحول میں کھولا جا سکتا ہے۔ OpenSSL PKCS12 سے سرٹیفکیٹ نکال سکتا ہے اور انہیں PEM فارمیٹ میں تبدیل کر سکتا ہے۔ JKS فائلوں کو پڑھنے کے لیے JDK یوٹیلیٹیز کی ضرورت ہوتی ہے اور OpenSSL کے ذریعے ان پر کارروائی نہیں کی جا سکتی۔

فارمیٹس کے درمیان تبدیلی JDK کی keytool یوٹیلیٹی کا استعمال کرتے ہوئے کی جاتی ہے۔ JKS سے PKCS12 میں منتقلی کرتے وقت، یقینی بنائیں کہ تمام علیاس اور پاس ورڈ صحیح طریقے سے منتقل ہوئے ہیں۔ keytool -importkeystore کمانڈ فارمیٹ سے قطع نظر ایک Keystore کے مواد کو دوسرے میں درآمد کرنے کی اجازت دیتا ہے۔ تبدیلی کے بعد، کلید کے ورژن میں الجھن سے بچنے کے لیے پرانی JKS فائل کو حذف کرنا بہتر ہے۔ Android Studio دستخط شدہ بلڈ بناتے وقت دونوں فارمیٹس کو سپورٹ کرتا ہے۔

خصوصیتJKSPKCS12
معیارملکیتی (Oracle)کھلا (RSA Labs)
ایکسٹینشن.jks / .keystore.p12 / .pfx
سپورٹصرف JavaJava, OpenSSL, .NET, Python
ڈیفالٹJDK 8 تکJDK 9+
Google کی سفارشپراناترجیحی

keytool کے ساتھ Keystore بنانا

keytool یوٹیلیٹی JDK (Java Development Kit) کا حصہ ہے اور Keystore بنانے، دیکھنے اور ان کا انتظام کرنے کے لیے کمانڈز کا ایک مکمل سیٹ فراہم کرتی ہے۔ ایک کلید جوڑی کے ساتھ نیا Keystore بنانے کے لیے، PKCS12 فارمیٹ، RSA الگورتھم، کلید کا سائز اور سرٹیفکیٹ کی میعاد کی مدت بتاتے ہوئے keytool -genkeypair کمانڈ استعمال کی جاتی ہے۔ Google Play کو کم از کم 25 سال (9125 دن) کی سرٹیفکیٹ میعاد درکار ہے — -validity پیرامیٹر میں اس قدر کو بتانے کی سفارش کی جاتی ہے۔

نیا Keystore بنانا

Android پروجیکٹ کے لیے PKCS12 فارمیٹ میں Keystore بنانے کی مثال۔ -dname پیرامیٹر میں سرٹیفکیٹ کا X.500 Distinguished Name ہوتا ہے۔ -ext پیرامیٹر اگر ضروری ہو تو Subject Alternative Name شامل کرتا ہے — Android کے لیے، Basic Constraints کافی ہے:

bash
# Android کے لیے PKCS12 Keystore بنانا
keytool -genkeypair -alias "upload_key" \
  -keyalg RSA -keysize 2048 -validity 9125 \
  -keystore "release-keystore.p12" \
  -storetype PKCS12 \
  -dname "CN=Developer,O=Company,C=RU"

Keytool Keystore پاس ورڈ اور کلید پاس ورڈ (وہ مماثل ہو سکتے ہیں) طلب کرے گا۔ -storetype PKCS12 پیرامیٹر جدید فارمیٹ میں فائل بناتا ہے۔ -keysize 2048 کم از کم RSA کلید سائز کے لیے Google کی ضروریات کو پورا کرتا ہے۔ -validity 9125 (25 سال) ایپلیکیشن کے متوقع پورے لائف سائیکل کے لیے مطابقت کو یقینی بناتا ہے۔ Keystore بنانے کے بعد، keytool -list -v -keystore release-keystore.p12 کمانڈ سے اس کے مواد کی تصدیق کرنے کی سفارش کی جاتی ہے۔

Keystore کا مواد دیکھنا

Keystore اندراجات چیک کرنے کے لیے، -list پرچم والی کمانڈ استعمال کی جاتی ہے۔ آؤٹ پٹ میں علیاس، تخلیق اور میعاد ختم ہونے کی تاریخیں، اندراج کی قسم اور SHA-256 فنگر پرنٹس شامل ہوتے ہیں۔ Android Studio موجودہ Keystore منتخب کرتے وقت Generate Signed Bundle / APK ڈائیلاگ میں وہی معلومات دکھاتا ہے:

bash
# Keystore اندراجات دیکھنا
keytool -list -v -keystore "release-keystore.p12" \
  -storetype PKCS12

CI/CD میں Keystore کا استعمال

CI/CD پائپ لائن میں، Keystore کو محفوظ طریقے سے ذخیرہ کیا جانا چاہیے اور سمجھوتہ کے خطرے کے بغیر بلڈ ایجنٹ کو پہنچایا جانا چاہیے۔ GitHub Actions بائنری فائلوں کو base64 فارمیٹ میں ذخیرہ کرنے کے لیے Secrets فراہم کرتا ہے۔ Keystore کو base64 کمانڈ سے انکوڈ کیا جاتا ہے، نتیجے میں آنے والی سٹرنگ کو ریپوزٹری سیکرٹس میں محفوظ کیا جاتا ہے، اور بلڈ مرحلے کے دوران اسے واپس فائل میں ڈی کوڈ کیا جاتا ہے۔ GitLab CI File قسم کے Variables کے ذریعے اسی طرح کا طریقہ کار استعمال کرتا ہے۔

GitHub Actions میں Keystore کے ساتھ CI بلڈ ترتیب دینے کی مثال میں سیکرٹ سے Keystore کو ڈی کوڈ کرنا، Gradle خصوصیات کو ترتیب دینا اور دستخط شدہ بلڈ پر عمل درآمد کرنا شامل ہے۔ Gradle کا Android پلگ ان keystore.properties فائل (مقامی ڈیولپمنٹ کے لیے .gitignore سے خارج) یا CI سسٹم کے ماحولی متغیرات سے Keystore کا راستہ اور پاس ورڈ پڑھتا ہے:

groovy
// build.gradle (app) — دستخطی ترتیب
@Override
android {
    signingConfigs {
        release {
            storeFile file("release-keystore.p12")
            storePassword System.getenv("STORE_PASSWORD")
            keyAlias System.getenv("KEY_ALIAS")
            keyPassword System.getenv("KEY_PASSWORD")
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

Gradle CI سسٹم کے طے کردہ ماحولی متغیرات کو پڑھتا ہے۔ Keystore فائل کو storeFile میں بتائے گئے مطابق ایپلیکیشن ماڈیول کی جڑ میں واقع ہونا چاہیے۔ حفاظت کے لیے، ریپوزٹری میں کبھی پاس ورڈ ذخیرہ نہ کریں — CI سسٹم کے Secrets استعمال کریں۔ Android کے لیے Fastlane supply پلگ ان فراہم کرتا ہے، جو Google Play Console کے ساتھ کام کرتا ہے، لیکن APK دستخط کے لیے اب بھی ایجنٹ پر مقامی Keystore کی ضرورت ہوتی ہے۔

ایک متبادل Google Play App Signing ہے۔ اس اختیار کا استعمال کرتے ہوئے، ڈیولپر صرف اپ لوڈ کلید (upload key) Google Play پر اپ لوڈ کرتا ہے، اور Google اپنی کلید سے حتمی APK پر دستخط کرتا ہے۔ اس صورت میں، Keystore صرف اپ لوڈ کلید بنانے کے لیے استعمال ہوتا ہے، اور اس کا کھو جانا اپ ڈیٹس کو مسدود نہیں کرتا — ایک نئی اپ لوڈ کلید بنائی جا سکتی ہے اور Console میں رجسٹر کی جا سکتی ہے۔ Google Play App Signing اگست 2021 سے نئی ایپلیکیشنز کے لیے لازمی ہے۔

Keystore کی حفاظت اور بیک اپ

Keystore کھونا Android ڈیولپمنٹ میں سب سے اہم مسائل میں سے ایک ہے۔ بیک اپ کے بغیر، موجودہ ایپلیکیشن کا اپ ڈیٹ جاری کرنا ناممکن ہے — Google Play مختلف کلید سے دستخط شدہ APK کو مسترد کرتا ہے۔ Keystore کی کم از کم دو بیک اپ کاپیاں مختلف فزیکل یا کلاؤڈ اسٹوریج میں رکھنے کی سفارش کی جاتی ہے: مثال کے طور پر، ٹیم کے کلاؤڈ اسٹوریج میں ایک خفیہ کردہ فائل اور تنظیم کی سیف میں ایک فزیکل میڈیا۔ Keystore اور کلید کے پاس ورڈ فائل سے الگ ذخیرہ کیے جاتے ہیں، مثال کے طور پر، رسائی کنٹرول والے پاس ورڈ مینیجر میں۔

Android Studio، Generate Signed Bundle / APK ڈائیلاگ میں نیا Keystore بناتے وقت، مستقبل کے بلڈز کے لیے راستے یاد رکھنے کی پیشکش کرتا ہے۔ تاہم، ڈیولپمنٹ ماحول خود بیک اپ نہیں بناتا — یہ ڈیولپر کی ذمہ داری ہے۔ ٹیم ڈیولپمنٹ کے لیے، تمام ٹیم ممبران کو ایک محفوظ چینل کے ذریعے اپ لوڈ کلید پہنچانے کے ساتھ Google Play App Signing استعمال کرنے کی سفارش کی جاتی ہے۔ Gradle خود بخود پیدا شدہ debug.keystore کے ساتھ ڈیبگ بلڈ پر دستخط کر سکتا ہے، جس کے لیے بیک اپ کی ضرورت نہیں ہے — یہ تمام Android Studio انسٹالیشنز کے لیے یکساں ہے۔

منتقلی کے دوران Keystore کی حفاظت: .p12 یا .jks فائلیں صرف خفیہ کردہ چینلز (SFTP، HTTPS، خفیہ کردہ ای میل اٹیچمنٹ) کے ذریعے منتقل کی جانی چاہئیں۔ Keystore کو کبھی بھی سورس کوڈ ریپوزٹری میں شامل نہ کریں — پرائیویٹ میں بھی نہیں۔ GitGuardian یا GitHub secret scanning خود بخود اسناد کی اشاعت کا پتہ لگاتے ہیں، لیکن ریپوزٹری میں Keystore ذخیرہ کرنا اب بھی حفاظتی خلاف ورزی ہے۔ CI/CD کے لیے، بنیادی ڈھانچہ سطح کی خفیہ کاری کے ساتھ پلیٹ فارم کے سیکرٹ میکانزم (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) کا استعمال کریں۔

اکثر پوچھے گئے سوالات

اگر میں ایپلیکیشن شائع کرنے کے بعد اپنا Keystore کھو دوں تو کیا ہوگا؟

اگر آپ Google Play App Signing استعمال کر رہے ہیں، تو صرف اپ لوڈ کلید کھوتی ہے — آپ نئی کلید بنا سکتے ہیں اور اسے Google Play Console میں رجسٹر کر سکتے ہیں۔ اگر App Signing فعال نہیں ہے، تو Keystore کھونے کا مطلب ہے کہ آپ ایپلیکیشن کو اپ ڈیٹ نہیں کر سکتے — آپ کو مختلف پیکیج نام کے ساتھ نئی ایپلیکیشن شائع کرنی ہوگی۔

کیا میں ایک Keystore کو متعدد ایپلیکیشنز کے لیے استعمال کر سکتا ہوں؟

ہاں، ایک Keystore میں مختلف ایپلیکیشنز کے لیے مختلف کلیدوں کے ساتھ متعدد علیاس (اندراجات) ہو سکتے ہیں۔ ایک Keystore کے اندر ہر ایپلیکیشن کے لیے علیحدہ علیاس استعمال کرنے کی سفارش کی جاتی ہے۔ Google Play مختلف ایپلیکیشنز کے لیے مختلف کلیدوں کو سپورٹ کرتا ہے — ایک Keystore کو متعدد پروجیکٹس کے لیے استعمال کرنے پر کوئی پابندی نہیں ہے۔

کون سا دستخطی الگورتھم بہتر ہے — RSA یا ECDSA؟

Android دونوں الگورتھم کو سپورٹ کرتا ہے، لیکن ECDSA P-256 بہتر ہے: یہ چھوٹے دستخطی سائز اور تیز تر تصدیق کے ساتھ RSA-2048 کے برابر حفاظت فراہم کرتا ہے۔ تاہم، اگر Android 4.4 اور اس سے نیچے کے ساتھ مطابقت درکار ہے تو RSA کا انتخاب کریں — ECDSA صرف Android 4.3+ پر سپورٹ کیا جاتا ہے۔

Google Play کو 25 سال یا اس سے زیادہ کی میعاد والے سرٹیفکیٹ کی ضرورت کیوں ہے؟

Android ایپلیکیشن انسٹال کرتے وقت سرٹیفکیٹ کی میعاد کی مدت چیک کرتا ہے۔ اگر سرٹیفکیٹ کی میعاد ختم ہو گئی ہے، تو انسٹالیشن مسدود ہو جاتی ہے — چاہے یہ موجودہ ایپلیکیشن کا اپ ڈیٹ ہی کیوں نہ ہو۔ 25 سال وہ کم از کم مدت ہے جسے Google نیا سرٹیفکیٹ جاری کیے بغیر موبائل ایپلیکیشن کے متوقع پورے لائف سائیکل کو کور کرنے کے لیے تجویز کرتا ہے۔

debug.keystore ریلیز Keystore سے کیسے مختلف ہے؟

Debug.keystore Android SDK کے ذریعے خود بخود بنایا جاتا ہے اور ڈیبگ بلڈ پر دستخط کرنے کے لیے استعمال ہوتا ہے۔ یہ تمام Android Studio انسٹالیشنز کے لیے یکساں ہے (معیاری پاس ورڈ: android)۔ ریلیز Keystore ڈیولپر کے ذریعے Google Play پر شائع کردہ ورژن پر دستخط کرنے کے لیے بنایا جاتا ہے اور اسے محفوظ رکھا جانا چاہیے — اس کا کھو جانا سنگین ہے۔

خلاصہ

  • Keystore Android ایپلیکیشن دستخطی نجی کلید کے لیے ایک خفیہ نگاری کا ذخیرہ ہے
  • JKS ایک پرانا فارمیٹ ہے، PKCS12 Google کے ذریعے تجویز کردہ جدید معیار ہے
  • Keytool کمانڈ لائن سے Keystore بنانے اور ان کا انتظام کرنے کے لیے JDK یوٹیلیٹی ہے
  • سرٹیفکیٹ کی میعاد Google Play کے لیے کم از کم 25 سال (9125 دن) ہونی چاہیے
  • CI/CD کو base64 انکوڈنگ کے ساتھ پلیٹ فارم Secrets میں Keystore ذخیرہ کرنے کی ضرورت ہے
  • Google Play App Signing کلید کو Google کی طرف محفوظ کرکے کلید کھونے کا خطرہ کم کرتا ہے
  • Keystore کا بیک اپ لازمی ہے — کلید کھونے سے ایپلیکیشن اپ ڈیٹس مسدود ہو جاتے ہیں

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں