# ساخت و نصب اپ اندروید CalcGard

## ساخت APK

1. پوشه `android` را با Android Studio باز کنید.
2. اجازه دهید Gradle وابستگی‌های رسمی Android و Kotlin را همگام کند.
3. JDK پروژه را روی 17 قرار دهید.
4. برای تست از منوی Build، خروجی Debug APK بسازید.
5. برای انتشار، `Generate Signed App Bundle or APK` را انتخاب کنید و یک keystore اختصاصی بسازید.

اطلاعات keystore را خارج از سورس و با نسخه پشتیبان امن نگه دارید. همه نسخه‌های آینده باید با همان کلید امضا شوند تا به‌عنوان به‌روزرسانی نصب شوند.

اگر پروژه را در GitHub خصوصی قرار دهید، workflow آمادهٔ `.github/workflows/android-debug.yml` با اجرای دستی یک Debug APK آزمایشی می‌سازد. برای فروش یا انتشار عمومی، خروجی Release را خودتان با keystore خصوصی امضا کنید و keystore را در مخزن قرار ندهید.

## حداقل سیستم

- Android 8.0 یا جدیدتر
- سیم‌کارتی که پیامک تراکنش حساب مقصد را دریافت می‌کند
- دسترسی اینترنت به دامنه HTTPS پنل

## اتصال اولیه

1. در پنل وارد فضای کسب‌وکار شوید.
2. بخش «اتصال‌ها و API» را باز و کد ۸ رقمی بسازید؛ کد ۱۰ دقیقه معتبر و یک‌بارمصرف است.
3. آدرس کامل پنل و کد را در اپ وارد کنید.
4. در نسخه رایگان فیلد لایسنس را خالی بگذارید.
5. «اتصال امن دستگاه» را بزنید.
6. «دادن اجازه دریافت پیامک» را بزنید و پنجره رسمی اندروید را تأیید کنید.
7. پس از ساخت الگو در پنل، «همگام‌سازی الگوها» را بزنید.

## رفتار حریم خصوصی

اپ مجوز `READ_SMS` ندارد و پیامک‌های قدیمی را مرور نمی‌کند. فقط هنگام رسیدن پیامک جدید، فرستنده و متن در حافظه همان دستگاه با regex تأییدشده مقایسه می‌شوند. متن خام در صف قرار نمی‌گیرد. صف فقط شامل این موارد است:

- شناسه الگو
- مبلغ ریالی
- زمان دریافت
- نام فرستنده بانکی
- SHA-256 متن/فرستنده/زمان برای جلوگیری از تکرار

توکن و راز دستگاه با Android Keystore و AES-GCM نگه‌داری می‌شوند. ترافیک HTTP غیرفعال است.

## نکته انتشار در فروشگاه

فروشگاه‌های اپ ممکن است برای مجوز SMS مستندات و توجیه کاربرد اصلی بخواهند یا انتشار را محدود کنند. برای نصب مستقیم APK همچنان رضایت کاربر در خود اندروید اجباری است. نام یا توضیح گمراه‌کننده برای پنهان‌کردن دسترسی پیامک استفاده نکنید.

## خروجی Release

قبل از تحویل به مشتری:

- `applicationId` را در صورت نیاز به دامنه برند خود تغییر دهید.
- نسخه و `versionCode` را افزایش دهید.
- APK را Release و با keystore ثابت امضا کنید.
- روی یک گوشی واقعی، دریافت SMS، قطع اینترنت، ارسال مجدد و ابطال دستگاه را آزمایش کنید.
