پرش به محتوا
مارکت محصولات دیجیتال و خدمات توسعه
خانهپروژه‌هاdecimen-android
</>
Open Source Project

decimen-android

MilMit/decimen-android

Native Android receiver for animated QR file transfer (decimen-optical-transfer)

★ 0Stars
⑂ 0Forks
0Open Issues
0Watchers
Kotlinزبان اصلی
MITLicense
README

مستندات مخزن

Decimen Android (گیرنده و فرستنده)

نسخه‌ی Native اندروید برای انتقال و دریافت دوطرفه‌ی فایل و متن از طریق جریان QR متحرک (کدهای فواره‌ای LT) بر اساس پروژه‌ی decimen-optical-transfer.

قابلیت‌های نسخه 0.3.0

این اپلیکیشن اکنون به سازگاری کامل با نسخه پیشرفته وب (decimen-optical-transfer) ارتقا یافته است:

📦 پروتکل پیشرفته و کانتینر DCF2:

  • Wire Protocol v3: هدر ۲۲ بایتی با مجیک‌های 0xD1, 0xC3 و پشتیبانی کامل عقب‌رو از فریم‌های v1/v2.
  • کانتینر DCF2: انتقال نام واقعی فایل (filename.ext) و شناسه دقیق MIME Type.
  • تأیید اصالت SHA-256: اعتبارسنجی ۳۲ بایتی SHA-256 علاوه بر چکسام FNV-1a.
  • فشرده‌سازی هوشمند GZip: فشرده‌سازی خودکار در صورت کاهش محسوس حجم و جلوگیری از اتلاف پردازش روی فایل‌های فشرده (JPEG, MP4, ZIP).
  • پشتیبانی از حجم تا ۶۴ مگابایت: با سقف امن ۳۲۷۶۸ بلوک فواره‌ای.

📥 گیرنده (Receiver):

  • اسکن دوربین با CameraX (STRATEGY_KEEP_ONLY_LATEST)
  • رمزگشایی فریم‌های QR با ZXing Core و استخراج دقیق باینری BYTE_SEGMENTS
  • بازسازی فایل با کدهای فواره‌ای Luby Transform (LT Fountain Code)
  • امکان پیوستن به استریم از وسط انتقال بدون نیاز به Handshake یا شبکه
  • پیش‌نمایش درون‌برنامه‌ای فایل‌های دریافتی:
    • نمایش مستقیم تصاویر دریافت‌شده (PNG, JPEG, WebP, GIF)
    • کادر نمایش متن با دکمه «کپی در حافظه» برای پیام‌ها و اسنیپت‌ها
  • ذخیره مستقیم با Storage Access Framework بدون مجوزهای حساس

📤 فرستنده (Sender):

  • امکان ارسال انواع فایل (از طریق فایل‌پیکر سیستم) یا متن کوتاه (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

آزمون انتقال

  1. فرستنده‌ی وب اصلی را اجرا کنید.
  2. یک فایل کوچک انتخاب و جریان QR را شروع کنید.
  3. اپ اندروید را باز کنید و دسترسی دوربین بدهید.
  4. QR را در کادر نگه دارید تا پیشرفت به 100٪ برسد.
  5. پس از تأیید هش، دکمه ذخیره را بزنید.

برای تست اولیه، 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 حفظ شده است.

RELEASE

آخرین نسخه

v0.3.1شهریور 12, 1405
مشاهده Release ↗