# تجهيز Android ورفع AAB إلى Google Play

تم إعداد مشروع Android أصلي باستخدام Capacitor بمعرّف التطبيق **`com.saraelhaj.studentrecords`**. يجلب التطبيق الواجهة من الموقع المنشور عبر HTTPS، لذلك لا يعتمد على `localhost` داخل الهاتف. تبقى قاعدة البيانات وواجهة الخادم على الاستضافة؛ التطبيق لا يضم بيانات الطلاب داخل ملف AAB.

> لا ترفعي نسخة نهائية قبل تغيير اسم الحزمة إذا كان لديك اسم نهائي مختلف، واستبدال رمز التطبيق الافتراضي، وإكمال سياسة الخصوصية وبيانات السلامة في Play Console. راجعي أيضاً ورقة الإعداد الجاهزة `docs/GOOGLE_PLAY_STORE_LISTING_AR.md` للنصوص والمسؤوليات ومسودة Data safety.

## بناء حزمة AAB

يشترط البناء تثبيت **Android Studio** و**Android SDK Platform 35** و**Android SDK Build-Tools 35** وJDK 21 على جهاز البناء. بعد ذلك من مجلد المشروع:

```bash
pnpm install
pnpm android:sync
cd android
./gradlew bundleRelease
```

في Windows PowerShell:

```powershell
pnpm install
pnpm android:sync
Set-Location android
.\gradlew.bat bundleRelease
```

ينتج الملف في:

```text
android/app/build/outputs/bundle/release/app-release.aab
```

تمت مزامنة الواجهة الحالية وبناء حزمة محدثة بهذا المسار في بيئة المشروع. حجمها التقريبي **3.6 MB**، لكن فحصها أكد أنها **غير موقعة** إلى أن يضاف مفتاح المالك وفق القسم التالي؛ لذلك لا تُرفع هذه النسخة إلى Play Console.

يستخدم مشروع Android الآن الرمز النهائي النظيف في موارد `mipmap` لجميع كثافات الشاشة. أعيد بناء AAB بعد هذا التحديث؛ حجم النسخة غير الموقعة المحدثة التقريبي **3.9 MB**.

## التوقيع

للنشر التجاري يجب توقيع النسخة بمفتاح احتياطي يملكه صاحب التطبيق وحده. أنشئيه مرة واحدة واحفظي كلمة المرور والمفتاح خارج المشروع:

```bash
keytool -genkeypair -v -keystore saraelhaj-release.keystore -alias saraelhaj -keyalg RSA -keysize 4096 -validity 10000
```

انسخي `android/keystore.properties.example` إلى `android/keystore.properties` وأضيفي بيانات المفتاح إليه. تكوين Gradle في هذا المشروع يكتشفه تلقائياً عند تنفيذ `bundleRelease` ويوقّع AAB. لا ترسلي ملف المفتاح أو كلمة مروره عبر الدردشة أو البريد العام؛ فقدانه يمنع تحديثات التطبيق لاحقاً ما لم تستعملي Play App Signing مع الاحتفاظ بمفتاح الرفع.

## متطلبات Play Console قبل الإرسال

| المتطلب | الحالة المطلوبة قبل النشر |
|---|---|
| حساب Google Play Console | يُنشأ بحساب مالك التطبيق ويُسدّد رسم التسجيل مرة واحدة |
| AAB موقّعة | نسخة release، لا APK debug |
| رمز ولقطات شاشة | رمز 512×512 ولقطات هاتف حقيقية من التطبيق |
| سياسة الخصوصية | رابط عام ثابت يشرح بيانات الطلاب، الغرض، الحماية، وطلب الحذف |
| Data safety | إفصاح دقيق عن أرقام الجلوس والاستمارات والحسابات، وعدم ادعاء عدم جمع بيانات عند جمعها |
| اختبار داخلي | رفع النسخة أولاً إلى Internal testing والتحقق من الدخول والإضافة والتقرير |

## من AAB الموقعة إلى Google Play

1. **التوقيع محلياً:** أنشئي مفتاح الرفع، ضعي ملف `keystore.properties` في مجلد `android` محلياً، ثم نفذي `pnpm android:aab`. استخدمي ملف `android/app/build/outputs/bundle/release/app-release.aab` الناتج فقط بعد التوقيع.
2. **إنشاء التطبيق:** افتحي Play Console بحساب الناشر **saraelhaj**، وأنشئي تطبيقاً جديداً بالمعرّف `com.saraelhaj.studentrecords`. لا تغيّري معرّف الحزمة بعد الإنشاء.
3. **إعداد المحتوى:** أضيفي اسم الناشر وبريد الدعم `info@saraelhaj.net`، رابط الخصوصية `https://studentrecor-cabhzy6z.manus.space/privacy`، رابط حذف الحساب `https://studentrecor-cabhzy6z.manus.space/delete-account`، والأيقونة واللقطات من حزمة مواد المتجر بعد اعتمادها.
4. **Data safety وApp content:** املئي كل الأقسام بحسب السلوك الفعلي للتطبيق والخادم. لا تعتمدي على النص المقترح وحده إذا تغيرت البيانات أو الخدمات المتصلة. راجعي كذلك أقسام الجمهور المستهدف وتصنيف المحتوى والوصول إلى التطبيق.
5. **اختبار داخلي:** من **Testing → Internal testing** أنشئي إصداراً جديداً، ارفعي AAB الموقعة، أضيفي بريد مختبِر، وانشري مسار الاختبار. ثبتي النسخة من رابط الاختبار على هاتف فعلي وتحققي من الدخول وإضافة سجل وصلاحية `editor` وعدم ظهور التقارير له وحذف الحساب ورمز المشغل.
6. **ترقية الإنتاج:** بعد اجتياز الاختبار الداخلي، انتقلي إلى **Production** وأنشئي إصداراً جديداً. اختاري AAB المختبرة نفسها، أكملي ملاحظات الإصدار، ثم ارسلي التغييرات للمراجعة. اختاري النشر المُدار إن أردتِ مراجعة حالة الموافقة قبل إتاحتها للجمهور.
7. **بعد الموافقة:** راقبي شاشة الإصدار والتنبيهات في Play Console، ولا تغيّري بيانات السلامة أو الخصوصية إلا مع تحديثها في التطبيق وسياسة الخصوصية معاً.

> لا يمكن رفع AAB غير موقعة. لا ترسلي ملف `keystore` أو كلمات مروره؛ احتفظي بهما خارج المشروع وفي نسخة احتياطية مشفّرة.

## ملاحظة تشغيلية

النسخة الحالية عبارة عن غلاف أصلي آمن للنسخة المنشورة. لا تصلح للاستخدام دون إنترنت ولا لتشغيل خادم MySQL على الهاتف. لتشغيلها داخل مؤسسة دون إنترنت، يجب نشر خادم التطبيق وMySQL في الشبكة الداخلية ثم تغيير عنوان `server.url` في `capacitor.config.ts` إلى نطاق HTTPS داخلي موثوق قبل البناء.
