نسخهی Native اندروید برای انتقال و دریافت دوطرفهی فایل و متن از طریق جریان QR متحرک (کدهای فوارهای LT) بر اساس پروژهی
decimen-optical-transfer.
این اپلیکیشن اکنون به سازگاری کامل با نسخه پیشرفته وب (decimen-optical-transfer) ارتقا یافته است:
- Wire Protocol v3: هدر ۲۲ بایتی با مجیکهای
0xD1,0xC3و پشتیبانی کامل عقبرو از فریمهای v1/v2. - کانتینر DCF2: انتقال نام واقعی فایل (
filename.ext) و شناسه دقیق MIME Type. - تأیید اصالت SHA-256: اعتبارسنجی ۳۲ بایتی SHA-256 علاوه بر چکسام FNV-1a.
- فشردهسازی هوشمند GZip: فشردهسازی خودکار در صورت کاهش محسوس حجم و جلوگیری از اتلاف پردازش روی فایلهای فشرده (JPEG, MP4, ZIP).
- پشتیبانی از حجم تا ۶۴ مگابایت: با سقف امن ۳۲۷۶۸ بلوک فوارهای.
- اسکن دوربین با CameraX (
STRATEGY_KEEP_ONLY_LATEST) - رمزگشایی فریمهای QR با ZXing Core و استخراج دقیق باینری
BYTE_SEGMENTS - بازسازی فایل با کدهای فوارهای Luby Transform (LT Fountain Code)
- امکان پیوستن به استریم از وسط انتقال بدون نیاز به Handshake یا شبکه
- پیشنمایش درونبرنامهای فایلهای دریافتی:
- نمایش مستقیم تصاویر دریافتشده (PNG, JPEG, WebP, GIF)
- کادر نمایش متن با دکمه «کپی در حافظه» برای پیامها و اسنیپتها
- ذخیره مستقیم با Storage Access Framework بدون مجوزهای حساس
- امکان ارسال انواع فایل (از طریق فایلپیکر سیستم) یا متن کوتاه (Text snippet)
- چیدمان چندگانه کدهای QR: امکان انتخاب حالت تککد (۱x)، دوگانه (۲x) یا چهارگانه (۴x در چیدمان ۲×۲) جهت چندبرابر کردن سرعت انتقال
- استخراج انیمیشن لوپ (Looping GIF): امکان خروجی گرفتن از کل جریان انتقال در قالب یک فایل تصویری متحرک GIF برای پخش آفلاین یا ویدیو
- قطعهبندی و انکود بلادرنگ با
LTEncoder - تولید فریمهای متحرک QR با تنظیم FPS (۵ تا ۳۰ فریم/ثانیه) و تراکم بلوک (۵۰۰ تا ۱۴۶۵ بایت)
- پشتیبانی از حالت تمامصفحه (Fullscreen) جهت بالاترین وضوح اسکن
- فعالسازی خودکار روشن ماندن صفحه (Keep Screen On) هنگام استریم
- دیالوگ اشتراک گیرنده وب (Share Web Receiver): تولید QR حاوی آدرس
https://decimen.app/receiveبرای شروع سریع گیرنده در دستگاه مقابل بدون نیاز به نصب اپ - پشتیبانی دوزبانه (فارسی / English): سوییچ لحظهای زبان و تغییر خودکار چیدمان LTR/RTL
نیازمندیها:
- Android Studio با JDK 17
- Android SDK Platform 36
- اتصال اینترنت در اولین Sync
پروژه را در Android Studio باز کنید و Gradle Sync را اجرا کنید. اسکریپتهای
gradlew و gradlew.bat یک bootstrap متنی هستند؛ در اولین اجرا Gradle 8.13 را
دانلود و SHA-256 آن را بررسی میکنند.
ساخت از خط فرمان:
./gradlew testDebugUnitTest assembleDebugخروجی APK:
app/build/outputs/apk/debug/app-debug.apk
- فرستندهی وب اصلی را اجرا کنید.
- یک فایل کوچک انتخاب و جریان QR را شروع کنید.
- اپ اندروید را باز کنید و دسترسی دوربین بدهید.
- QR را در کادر نگه دارید تا پیشرفت به 100٪ برسد.
- پس از تأیید هش، دکمه ذخیره را بزنید.
برای تست اولیه، payload حدود 700 تا 1465 بایت و 12 تا 24 FPS منطقیتر است. اگر نمایشگر یا نور ضعیف است، ابتدا FPS یا تراکم QR را پایین بیاورید؛ افزایش همزمان هر دو معمولاً نرخ خطا را بدتر میکند.
بردارهای مرجع JavaScript در tools/reference-vectors.txt نگهداری میشوند.
تستهای Kotlin همان sequence، session ID و block count را بررسی میکنند.
همچنین یک round-trip با حذف عمدی بخشی از فریمها اجرا میشود.
نتیجهی تست مستقل انجامشده هنگام تولید این نسخه:
PASS: Kotlin fountain/protocol core matches JavaScript vectors and round-trip test
framesNew=86, solved=51/51
app/src/main/java/io/decimen/android/
├── camera/ CameraX و ZXing
├── core/ پروتکل، Fountain Code و تشخیص نوع فایل
├── receiver/ وضعیت و منطق دریافت
+├── sender/ وضعیت و منطق ارسال و استریم QR
└── ui/ رابط Compose (MainScreen, ReceiverScreen, SenderScreen)
قدم بعدی باید فرستندهی Android سازگار با پروتکل v1 باشد. بعد از آن، پروتکل v2 با metadata، SHA-256، segmentation، resume و رمزگذاری اختیاری اضافه میشود. پیادهسازی مستقیم فایلهای بزرگ با همین decoder حافظهای تصمیم اشتباهی است.
MIT. پیادهسازی پروتکل و Fountain Code از پروژه اصلی مشتق شده و اعلان آن در
LICENSE و THIRD_PARTY_NOTICES.md حفظ شده است.