4.7 KiB
4.7 KiB
بهروزرسانی خودکار اندروید (Forgejo Releases)
هدف
کاربران APK خارج از مارکت، هنگام انتشار نسخهٔ جدید در
ریلیزهای مخزن اعلان بگیرند،
APK را دانلود کنند و نصب را آغاز کنند. وب تحت تأثیر قرار نمیگیرد
(مسیر version.json / web/index.html دستنخورده میماند).
معیار نسخه (قرارداد الزامی از این پس)
| مورد | مقدار |
|---|---|
| منبع حقیقت | تگ ریلیز Forgejo (tag_name) |
| قالب | MAJOR.MINOR.PATCH — سه عدد صحیح نامنفی، مثلاً 70.9.911 |
versionName در APK |
همان تگ ریلیز |
versionCode پیشنهادی |
MAJOR * 1_000_000 + MINOR * 1_000 + PATCH (مثلاً 70009911) |
| مقایسه | تاپل (MAJOR, MINOR, PATCH)؛ نسخهٔ جدیدتر = بزرگتر بودن تاپل |
| ریلیز معتبر | draft=false و prerelease=false |
| فایل APK | اولین asset با پسوند .apk؛ در صورت چندتایی، اولویت با نام شامل app-release |
در pubspec.yaml باید همان نسخه تنظیم شود، مثلاً:
version: 70.9.911+70009911
یا هنگام بیلد:
flutter build apk --build-name=70.9.911 --build-number=70009911
سناریوی کاربر
- اپ اندروید پس از اتمام splash (با تأخیر کوتاه) آخرین ریلیز را از API Forgejo میخواند.
- اگر نسخهٔ ریموت از نسخهٔ نصبشده بزرگتر باشد و کاربر آن را «بعداً» نزده باشد:
- اعلان درونبرنامهای (دیالوگ) با changelog نمایش داده میشود.
- در صورت فعال بودن دانلود خودکار، دانلود APK شروع میشود.
- پس از اتمام دانلود، نصبکنندهٔ سیستم باز میشود (تأیید کاربر الزامی است؛ محدودیت اندروید).
- در تنظیمات حساب کاربری → بهروزرسانی برنامه:
- نمایش نسخهٔ فعلی / آخرین نسخه
- بررسی دستی
- دانلود و نصب
- تنظیمات: بررسی خودکار هنگام شروع، دانلود خودکار
- در صورت نیاز، هدایت به تنظیمات «نصب از منابع ناشناس»
فازهای اجرایی
| فاز | شرح | وضعیت |
|---|---|---|
| ۱ | هسته: پارس نسخه، کلاینت Forgejo، گیت پلتفرم | پیادهسازیشده |
| ۲ | نیتیو: FileProvider + MethodChannel نصب APK | پیادهسازیشده |
| ۳ | سرویس: چک / دانلود با progress / نصب | پیادهسازیشده |
| ۴ | اعلان استارتآپ + صفحه تنظیمات حساب | پیادهسازیشده |
| ۵ | l10n و ایزولهسازی از وب | پیادهسازیشده |
API مصرفشده
GET https://source.hesabix.ir/api/v1/repos/hesabix/arc/releases/latest- دانلود از
assets[].browser_download_url
نکات امنیتی / عملیاتی
- APK باید با همان keystore قبلی امضا شود.
- مخزن ریلیز عمومی است؛ کلاینت اپ برای خواندن
releases/latestتوکن لازم ندارد. - حجم APK حدود ۱۳۰MB+ است؛ progress در UI و اعلان سیستم نمایش داده میشود و دانلود در پسزمینه ادامه مییابد.
- وب و دسکتاپ این ماژول را اجرا نمیکنند (
supportsAndroidApkUpdate). - ریلیزهای مشترک میتوانند همزمان asset اندروید و ویندوز داشته باشند؛ کلاینت اندروید فقط
.apkرا برمیدارد. جزئیات ویندوز:WINDOWS_AUTO_UPDATE.md.
انتشار خودکار ریلیز اندروید
پس از بیلد APK، از ریشهٔ مخزن:
# ترجیحاً با توکن API
FORGEJO_TOKEN='...' ./release_android_forgejo.sh
# یا با یوزر/پسورد
FORGEJO_USER='...' FORGEJO_PASSWORD='...' ./release_android_forgejo.sh
# پیشنمایش بدون آپلود
./release_android_forgejo.sh --dry-run
# جایگزینی ریلیز همتگ
FORGEJO_TOKEN='...' ./release_android_forgejo.sh --force
اسکریپت نسخه را از pubspec.yaml میخواند، ریلیز با تگ MAJOR.MINOR.PATCH میسازد و
app-release.<version>.apk را آپلود میکند. جزئیات: ./release_android_forgejo.sh --help