AniStream هو تطبيق أندرويد مستقل مبني بالكامل بـ Kotlin وJetpack Compose لمشاهدة الأنمي عبر الكشط المحلي المباشر من Anime3rb.com بدون أي خادم وسيط.
يعتمد التطبيق على:
MVVM + Clean ArchitectureJetpack ComposeOkHttp + JsoupRoom + DataStoreMedia3 / ExoPlayerDuktapeعند الحاجة لفك الروابط أو التعامل مع التضمينات
التطبيق لا يقرأ بيانات البث من واجهة برمجية خارجية، ولا يستخدم Backend خاصاً به.
بدلاً من ذلك:
- يجلب الصفحات مباشرة من
Anime3rb.com - يحلل البنية الحقيقية للصفحات عبر
Jsoup - يستخدم ملفات HTML المحلية الموجودة لديك فقط كمرجع للتحقق من المحددات الصحيحة والبنية العامة قبل كتابة منطق الكشط
هذا يعني أن التطبيق يظل أقرب ما يمكن لسلوك الموقع الحقيقي، مع الحفاظ على التنفيذ داخل الجهاز فقط.
- قسم الأنميات المثبتة
- قسم أحدث الحلقات
- قسم آخر الأنميات المضافة
- قسم أكمل المشاهدة اعتماداً على السجل المحلي
- فهرس مباشر من Anime3rb مع تحميل تدريجي للصفحات
- ترتيب مباشر للفهرس والبحث حسب:
- تاريخ الإضافة
- الاسم
- تاريخ الإصدار
- التقييم
- البحث المباشر في Anime3rb.com
- عرض نتائج تفصيلية
- تحميل المزيد من نتائج البحث
- البوستر والعنوان والنوع
- الحالة والإصدار والاستديو والمؤلف والتصنيف العمري
- القصة الكاملة أو الملخص
- الأسماء الأخرى
- قائمة الحلقات
- العروض التشويقية
- الروابط الخارجية للمصادر
- الأنميات المشابهة المقترحة
- إدارة الحالة المحلية للمشاهدة
- التقييم الشخصي المحلي
- تشغيل عبر
Media3 / ExoPlayer - دعم
HLS .m3u8وMP4عند توفرهما - اختيار المصدر المتاح
- عرض عدد المشاهدات
- عرض روابط التحميل المباشر
- رابط تحميل جميع الحلقات عندما يتوفر
- الانتقال للحلقة التالية يدوياً أو تلقائياً حسب الإعدادات
- شاشة قائمة مخصصة
- شاشة سجل مخصصة
- تصنيف الأعمال حسب حالة المشاهدة
- استكمال الحلقات من آخر موضع محفوظ
- تشغيل الحلقة التالية تلقائياً
- تفضيل عرض الملخص
- حفظ الوضع السينمائي
- تفعيل/تعطيل الألوان الديناميكية
- مسح السجل
- مسح القائمة
المشروع منظم إلى طبقات واضحة:
واجهات Compose + ViewModels + Navigation
dashboard/details/player/library/settings/navigation/root/
نماذج الأعمال وحالات الاستخدام والمستودعات المجردة
model/repository/usecase/
مصادر البيانات الفعلية
scraper/محرك الكشطrepository/تنفيذ المستودعاتlocal/قاعدة البياناتpreferences/إعدادات DataStore
البنية المشتركة
network/webview/common/
يتم استخدام محددات موثقة من ملفات HTML المحلية التي زودتني بها، مثل:
-
home.htmla.video-card#videos a.video-carddiv.title-card
-
animelist.htmldiv.titles-list div.title-carda.detailsdiv.genres spanp.synopsis
-
animedetails.htmlh1.text-2xltable.leading-loosediv[x-data*=summary]div#trailers iframe[data-src]div.video-list a[href*=/episode/]- قسم
أنميات مشابهة مقترحة
-
animeepisode.htmliframebutton[data-video-source]a[href*=/download/]- قيم
video_url,video_source,viewsمنwire:snapshot
عند مواجهة تحدي Cloudflare:
- يتم تشغيل
WebViewغير مرئي في الخلفية عبرCloudflareWebViewInterceptor - يتم تحميل الصفحة بنفس ترويسات المتصفح الفعلية
- يتم استخراج الكوكيز مثل
cf_clearanceوUser-Agent الفعلي من الجلسة - يتم تمريرها إلى عميل
OkHttpوطلباتJsoupاللاحقة عبرWebSessionStore
الملفات الأساسية:
app/src/main/java/com/exapps/anistream/core/network/CloudflareChallengeInterceptor.ktapp/src/main/java/com/exapps/anistream/core/webview/CloudflareWebViewInterceptor.ktapp/src/main/java/com/exapps/anistream/core/network/WebSessionStore.kt
يتم حفظ:
- القائمة المحلية مع الحالة والتقييم الشخصي
- السجل وآخر موضع تشغيل
يتم حفظ:
- التشغيل التلقائي للحلقة التالية
- تفضيل الملخص
- الوضع السينمائي
- الألوان الديناميكية
التطبيق الآن مهيأ بواجهة عربية واتجاه RTL، مع اعتماد النصوص العربية في عناصر التنقل والشاشات والإعدادات والرسائل الأساسية.
- Android SDK
- JDK 17
- Gradle Wrapper
./gradlew assembleDebugبعد التفعيل الحالي لتقسيم المعماريات، سيتم إنشاء APKs متعددة لكل ABI بالإضافة إلى نسخة universal.
تم تجهيز سير عمل أوتوماتيكي في:
/.github/workflows/android-apk.yml
وظيفته:
- بناء APKs لكل المعماريات
- رفعها كـ Artifacts
- إنشاء GitHub Release تلقائياً على
main - إرفاق ملفات الـ APK
- استخدام القسم المطابق من
CHANGELOG.md
الإصدار الحالي موجود في:
gradle.properties
المفاتيح:
APP_VERSION_CODEAPP_VERSION_NAME
app/build.gradle.ktsapp/src/main/java/com/exapps/anistream/data/scraper/Anime3rbExtractor.ktapp/src/main/java/com/exapps/anistream/data/scraper/Anime3rbHtmlParser.ktapp/src/main/java/com/exapps/anistream/core/webview/CloudflareWebViewInterceptor.ktapp/src/main/java/com/exapps/anistream/presentation/navigation/AniStreamNavGraph.ktapp/src/main/java/com/exapps/anistream/presentation/library/LibraryScreen.ktapp/src/main/java/com/exapps/anistream/presentation/settings/SettingsScreen.ktCHANGELOG.md
- التطبيق يعتمد على البنية الحالية للموقع، لذلك أي تغيير كبير في HTML الخاص بـ Anime3rb قد يتطلب تحديث المحددات.
- ملفات HTML المحلية ليست مصدر البيانات داخل التطبيق، بل مرجع تحقق للمحددات فقط.
- بعض المزايا المرتبطة بالحسابات أو الدفع داخل الموقع لا تعتمد على Backend داخل التطبيق، لأن المشروع مصمم ليبقى محلياً بالكامل.
هذا المستودع مخصص لأغراض التطوير والتجربة المعمارية والتعليمية ضمن سياق المشروع الحالي.