multi_unzip 2.0.4
multi_unzip: ^2.0.4 copied to clipboard
مكتبة لفك ضغط الملفات (ZIP / RAR / TAR / GZ) تعمل على Android و Windows
multi_unzip #
أداة بسيطة لاستخراج الملفات المضغوطة (ZIP, RAR) في Flutter مع دعم متعدد الخيوط للملفات الكبيرة.
- Android: فك RAR عبر FFI وبناء مكتبة أصلية
libunrar.soتلقائيًا (NDK/CMake). - Windows: فك RAR عبر أدوات النظام (مثل
unrar.exe) أو بدائل موجودة، وZIP/TAR/GZ عبر Dart. - ZIP/TAR/GZ: عبر حزمة
archive(Pure Dart) على جميع المنصات.
✨ المميزات #
- [منصات] Android، Windows (ودعم أنظمة إضافية لاحقًا).
- [صيغ] zip، rar، tar، gz.
- [واجهة موحدة] استدعاء واحد
MultiUnzip.extract(...)يحدد النوع تلقائيًا. - [ملفات كبيرة] دعم الملفات الكبيرة مع تعريفات بناء مناسبة على أندرويد.
- [إعدادات بناء محسّنة] تضمين رؤوس UnRAR عبر
${UNRAR_DIR}لضمان ترجمة صحيحة لملفات مثلcoder.cpp.
📦 المتطلبات #
- على Android:
- Android SDK + NDK + CMake مثبتة في بيئة التطوير لديك.
- Gradle سيبني
libunrar.soلواجهات ABI:armeabi-v7a،arm64-v8a(قابلة للتوسعة).
- على Windows:
- لفك RAR قد تحتاج وجود
unrar.exeفي المسار PATH (إن تعذّر المسار الافتراضي).
- لفك RAR قد تحتاج وجود
🔧 التثبيت #
أضف إلى pubspec.yaml في تطبيقك:
dependencies:
multi_unzip: ^2.0.4
ملاحظات هامة على الكود الأصلي (Native Code) #
- توافقية NDK/Clang: تم إجراء تعديلات على الكود الأصلي (UnRAR) لضمان التوافقية الكاملة مع مُجمّع Android NDK/Clang الحديث.
- دمج الدوال المضمنة: تم نقل تعريفات الدوال المضمنة (inline functions) من
unpackinline.cppإلى ملف الرأسunpack.hppواستبعادunpackinline.cppمن عملية البناء. - تعطيل تعدد المهام: تم تعطيل بناء ملف تعدد المهام
unpack50mt.cppضمن إعداداتCMakeLists.txtلـ Android لتجنب الأخطاء المتعلقة بالـ Threading في بيئة NDK.
ثم نفّذ:
flutter pub get
ملاحظة: الحزمة تعتمد على Flutter (Plugin مع FFI لأندرويد) وعلى ffi وarchive داخليًا.
🚀 الاستخدام السريع #
import 'package:multi_unzip/multi_unzip.dart';
Future<void> demo() async {
await MultiUnzip.extract(
sourcePath: '/path/to/archive.rar',
destinationDir: '/path/to/output',
);
}
🚢 النشر على pub.dev (للمطورين) #
-
تأكد من تحديث
versionفيpubspec.yaml. -
يوصى بإضافة أحد الحقلين لإزالة التحذير:
repository: https://github.com/<username>/multi_unzip- أو
homepage: https://github.com/<username>/multi_unzip
-
أوامر سريعة:
flutter pub get flutter pub publish --dry-run flutter pub publish -
يحدد
MultiUnzipالنوع تلقائيًا من الامتداد (.zip/.rar/.tar/.gz). -
على Android، يتم فك
RARعبر FFI لمكتبة أصلية مبنية تلقائيًا. -
على منصات أخرى، يتم استخدام المسارات البديلة المجهزة (Pure Dart لـ ZIP/TAR/GZ، وبدائل RAR حيث أمكن).
🧩 تفاصيل المنصات #
-
Android (RAR):
- يتم تحميل
libunrar.soواستدعاء دالة أصلية عبرdart:ffi. - يتطلب NDK/CMake في بيئة البناء. لا يلزم أي إعداد إضافي في مشروعك، فإعلان
ffiPlugin: trueيعتني بالبناء.
- يتم تحميل
-
Windows (RAR):
- محاولة استخدام أدوات النظام (مثل
unrar.exe). تأكد من توفرها في PATH عند الضرورة.
- محاولة استخدام أدوات النظام (مثل
-
جميع المنصات (ZIP/TAR/GZ):
- باستخدام حزمة
archive(Pure Dart)، لا يلزم تبعيات أصلية.
- باستخدام حزمة
❗ ملاحظات #
- ملفات
RARالمحمية بكلمة مرور غير مدعومة حاليًا في مسار FFI الافتراضي. - الالتزام بالرخصة الخاصة بـ UnRAR مطلوب عند توزيع تطبيقاتك. راجع
native/unrar/unrar/license.txt. - تم ضبط مسار تضمين الرؤوس (headers) إلى جذر UnRAR عبر
target_include_directories(unrar PRIVATE ${UNRAR_DIR})لضمان ترجمة ملفات مثلcoder.cppبشكل صحيح. - تم استثناء ملف
dll.cppمن البناء على أندرويد لتجنب مشاكل الربط الخاصة بـ RARDLL. - تم إضافة تضمين الرؤوس
#include "rar.hpp"فيunpack50.cpp,unpack50frag.cpp,unpack50mt.cppضمن هذا الإصدار. - تم نقل تعريفات
unpackinline.cppإلىunpack.hppكـinline، واستبعاد الملف من البناء. - تم تعطيل
unpack50mt.cpp(وضع التعددية MT) في إعدادات CMake لأندرويد.
🧪 مثال أكثر تفصيلاً #
import 'dart:io';
import 'package:multi_unzip/multi_unzip.dart';
Future<void> extractExample() async {
final src = Platform.isAndroid
? '/sdcard/Download/sample.zip'
: 'C:/Users/you/Downloads/sample.zip';
final out = Platform.isAndroid
? '/sdcard/Download/output'
: 'C:/Users/you/Downloads/output';
await MultiUnzip.extract(sourcePath: src, destinationDir: out);
}
🐞 استكشاف الأخطاء الشائعة #
- تأكد من وجود مساحة كافية للكتابة في
destinationDir. - على Android، إن واجهت خطأ في FFI:
- تحقق من توافر NDK/CMake في بيئة Android SDK لديك.
- حاول
flutter clean && flutter pub getثم أعد البناء.
- على Windows، إن فشل فك RAR:
- تحقق من توفر
unrar.exeفي PATH أو ثبّته من موقعه الرسمي.
- تحقق من توفر
📝 سجل التغييرات (Changelog) #
- 1.1.0:
- إضافة دعم فك RAR على Android عبر FFI وبناء
libunrar.soتلقائيًا. - الحفاظ على فك ZIP/TAR/GZ عبر
archive(Pure Dart). - تحسين واجهة الاستخدام الموحدة
MultiUnzip.extract.
- إضافة دعم فك RAR على Android عبر FFI وبناء
📄 الرخصة #
راجع ملف LICENSE. كود UnRAR يخضع لرخصته الخاصة والمشمولة مع المصادر ضمن native/unrar/unrar/.