اذهب إلى المحتوى

محمد أيت لعرايك

الأعضاء
  • المساهمات

    212
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو محمد أيت لعرايك

  1. يمكنك تأمين قاعدة البيانات قاعدتك بإضافة المزيد من القواعد كالتالي: rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } } ولكن ، لن يكون تطبيقك قادرًا على القراءة من Firebase ، لأنك تخبر أنه حتى القراءة يجب أن يكون المستخدم قد قام بتسجيل الدخول, للسماح للمستخدمين بقراءة البيانات من firebase دون تسجيل الدخول (anonymously) إذهب إلى الرابط https://console.firebase.google.com/project/[YOUR-PROJECT]/authentication/providers ثم قم بتفعيل خاصية قراءة البيانات بصفة مجهول . (تذكر تغيير [مشروعك] في عنوان URL.) بعد ذلك ، ستكون قاعدة البيانات ممؤمنة عن طريق إجبار المستخدم من تسجيل الدخول قبل الوصول إلى البيانات
  2. في headers قم بإضافة ال header التالي content-type : application/json (أنظر الصورة) بعد ذلك يمكنك إرسال data على شكل json . يجب أن تتأكد أنك تقوم بإرسال json وليس شكل اخر من data {"name": "question 1", "answers": [ { "num": "1", "ansName": "answer 1", "correct": false }, { "num": "2", "ansName": "answer 2", "correct": true }, { "num": "3", "ansName": "answer 3", "correct": false } ] }
  3. قم برفع مجلد Laravel إلى المجلد الرئيسي في الإستضافة public_html بعد ذلك قم بتغيير محتوى ملف index.php من <?php require __DIR__.'/../vendor/autoload.php'; require_once __DIR__.'/../bootstrap/app.php' إلى <?php require __DIR__.'/../../../laravelpackagename/vendor/autoload.php' ; $app = require_once __DIR__.'/../../../laravelpackagename/bootstrap/app.php'; جرب الدخول إلى إسم النطاق الخاص بك , ستلاحظ إختفاء الخطأ و الموقع يعمل بشكل جدا.
  4. يمكنك البدء بقراءة موسوعة حسوب حول laravel فهي توفر لك مجموعة من الشروحات والأمثلة التطبيقية و التي يمكنك الإستفادة منها بشكل كبير, فهي لا تقتصر فقط على شرح المفاهيم الأساسية بل تتعدى ذلك إلى شرح المفاهيم المتقدمة في laravel والتي تستعمل فقط في المشاريع الكبيرة, لكن نصيحتي لك هي أن تتعلم اللغة الأنجليزية وتبحث عن مصادر أخرى لتعلم laravel. لأن نسخ laravel تتطور بشكل سريع و المحتوى العربي للأسف لا يواكب هذا التطور , فاللغة الإنجليزية لا غنى عنها في هذا العصر في جميع مجالات التكنولوجيا,
  5. يمكن تشغيل المحاكي Android من سطر الأوامر بإتباع الأوامر التالية: 1- قم بالذهاب إلى مجلد SDK في حاسوبك ${ANDROID_SDK}/tools/emulator 2- إستظهر قائمة المحاكيات المتصلة بتنفيد الأمر: emulator -list-avds 3- قم بتشغيل AVD المرغوب فيه من القائمة بنتفيذ الأمر: emulator -avd {avd_name} يجب تتغيير {avd_name} بإسم المحاكي المراد تشغيله.
  6. يوجد العديد من الأدوات في الأنترنت توفر لك خدمة تشفير javascript. من بينها Encrypter الذي يقوم بتشفير javascript بحيث لا يظهر في المتصفح واضع للمستخدم, مثلا لدينا السكربت التالي. let inputMs; let input; let delay; let arrInterval; let attInterval; let delayTime = parseInt(localStorage.delayTime); if (isNaN(delayTime)) { delayTime = 0; localStorage.delayTime = JSON.stringify(delayTime); } عند لصقه ثم نسخ النتيجة في موقع Encrypter ستكون النتيجة كالتالي: <Script Language='Javascript'> <!-- HTML Encryption provided by iWEBTOOL.com --> <!-- document.write(unescape('%3C%6C%69%6E%6B%20%72%65%6C%3D%22%73%74%79%6C%65%73%68%65%65%74%22%20%68%72%65%66%3D%22%73%74%79%6C%65%73%2F%63%73%73%2E%63%73%73%22%20%74%79%70%65%3D%22%74%65%78%74%2F%63%73%73%22%20%6D%65%64%69%61%3D%22%73%63%72%65%65%6E%22%20%2F%3E%0A%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%73%63%72%69%70%74%2F%6A%73%2E%6A%73%22%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%3C%2F%73%63%72%69%70%74%3E%0A')); //--> وهكذا لن يتمكن المستخدم من قراءة الأكواد الموجودة في ملفات ال javascript
  7. توجد APIs مجانية تفر لك أسماء الأدوية بأسمائها التجارية أشهرها rxnav rxnav توفر واجهات برامج التطبيقات (APIs) للمستخدمين لاسترداد البيانات من العديد من مصادر معلومات الأدوية ، بما في ذلك RxNorm و MED-RT و RxTerms. ويوفر لك البيانات على شكل json أو xml على حسب إختيارك يمكنك الإطلاع على الapi بالتفصيل من هذا الرابط ويمكنك أيضا الإطلاع على التوثيق الخاص ب API وجميع الدوال الخاصة به من هنا
  8. طالما لم تقم بتهيئة محرك الأقراص C: في برنامج الإعداد عند تثبيت windows ، فلن تفقد بياناتك ، ولكن يتم نقلها إلى موقع آخر في القرص. بعد التثبيت ، يمكنك العثور على مجلد Windows.old في القرص C: و يتم حفظ جميع ملفاتك هناك. بعد نسخ جميع الملفات المطلوبة من مجلد Windows.old ، يمكنك استخدام برنامج مثل Disk Cleanup لحذف مجلد Windows.old لتحرير مساحة على القرص.
  9. نظام التشغيل (OS) هو أساسًا الدماغ والجهاز العصبي المركزي لأي نظام كمبيوتر ، بما في ذلك أجهزة الكمبيوتر المحمولة والخوادم والهواتف الذكية وأجهزة الاستشعار ، وهو متاح في كل من الأنواع التجارية ومفتوحة المصدر. يدير نظام التشغيل جميع أجهزة وبرامج النظام ويخصص جميع الموارد ، بما في ذلك المعالجة والذاكرة والتخزين. ويوجد العديد من أنواع أنظمة التشغيل : 1- نظام تشغيل إنترنت الأشياء هو نظام تشغيل مصمم للمتطلبات والمواصفات الخاصة لأجهزة وتطبيقات إنترنت الأشياء. إنه ضروري للاتصال والأمان والشبكات والتخزين وإدارة الجهاز عن بُعد واحتياجات أنظمة إنترنت الأشياء الأخرى. تتمتع بعض أنظمة تشغيل إنترنت الأشياء أيضًا بإمكانيات معالجة في الوقت الفعلي ويشار إليها على أنها نظام تشغيل في الوقت الفعلي 2- نظام تشغيل الأجهزة المحمولة (OS) هو البرنامج الذي يسمح للأجهزة المحمولة مثل الهواتف والأجهزة اللوحية والأجهزة الذكية الأخرى بتشغيل التطبيقات والبرامج الأخرى. تعمل معظم أنظمة تشغيل الأجهزة المحمولة فقط على أجهزة معينة. على سبيل المثال ، يعمل iPhone على iOS ويعمل Google Pixel على Android. 3-نظام التشغيل (OS) هو برنامج نظام يدير أجهزة الكمبيوتر وموارد البرامج ويوفر خدمات مشتركة لبرامج الكمبيوتر. يتطلب كل برنامج كمبيوتر تقريبًا نظام تشغيل ليعمل. أكثر أنظمة التشغيل شيوعًا هما Microsoft Windows و macOS من Apple. هناك العديد المن المصادر في الأنترنت لمساعدتك في تعلم هذه الأنظمة يكفي فقط كتابة نوع النظام في جوجل وسوف تظهر لك مواقع لدروس مجانية ومدفوعة مثلا إبحث عن : IoT Operating System
  10. يمكن كتابة المصفوفة بإستعمال العديد من الطرق وهناك مجموعة من المكتبات الجاهزة والتي يمكنك إستعمالها مباشرة, لكن بإختصار يمكن كتابة class على الشكل التالي: final public class Matrix { private final int M; // عدد الصفوف private final int N; // عدد الأعمدة private final double[][] data; // مجموعة M-by-N // إنشاء مصفوفة M by-N من 0 public Matrix(int M, int N) { this.M = M; this.N = N; data = new double[M][N]; } //إنشاء مصفوفة على أساس مجموعة 2d public Matrix(double[][] data) { M = data.length; N = data[0].length; this.data = new double[M][N]; for (int i = 0; i < M; i++) for (int j = 0; j < N; j++) this.data[i][j] = data[i][j]; } // طباعة المصفوفة public void show() { for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) StdOut.printf("%9.4f ", data[i][j]); StdOut.println(); } } يمكنك إستعمال class جاهزة من هذا الرابط فهي تتوفر على مجموعة من الدوال الأكثر تقدما للتعامل مع المصفوفات.
  11. حاول تغيير إعدادات الإميل في ملف env : MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=ahmodreda219@gmail.com MAIL_PASSWORD=correct_password MAIL_ENCRYPTION=tls MAIL_FROM_NAME="${APP_NAME}" MAIL_FROM_ADDRESS=mahmodredas219@gmail.com بعد ذلك قم بإزالة cache php artisan config:cache أعد تشغيل الخادم المحلي الخاص بك حاول زيارة مسارك باستخدام وحدة التحكم التي تحتوي على وظيفة البريد. وأيضا تحتاج إلى تسجيل الدخول عبر حساب Gmail الخاص بك للسماح بالاتصال غير الموثوق به. قم بزيارة هذا الرابط للسماح بالإتصال من طرف Gmail
  12. يمكنك أيضا إسترجاع array في الإستعلام وذلك ب إضافة ()toArray بعد ()get. على الشكل التالي: <?php $emails = $user->emails()->where(['verified' => true])->get()->toArray(); بعد ذلك يمكنك إظهار النتائج التالي: <?php @foreach($emails as $email) <h1> {{ $email['content'] }} </h1> <p> {{ $email['flag'] }} </p> @endforeach
  13. بطبيعة الحالة يمكنك ذلك لكن يجب عليك عمل بعض التغيرات على الإستضافة الجديدة : عند نقل موقع ويب إلى مضيف ويب مختلف ، فأنت بحاجة إلى: 1- شراء وتفعيل حسابات استضافة جديدة ، 2- نقل جميع ملفات مواقع الويب - بما في ذلك قواعد البيانات وحسابات البريد الإلكتروني ، 3- قم بتثبيت وتهيئة تطبيقك (إصدار PHP ، WordPress ، إلخ) على المضيف الجديد ، 4- تحقق من الموقع الجديد على عنوان URL التدريجي / المؤقت ، 5- استكشاف الأخطاء وإصلاحها في حالة وجود أي أخطاء ، 6- قم بتوجيه سجلات DNS الخاصة بنطاقك إلى مضيف الويب الجديد تعد استضافة الويب صناعة تنافسية - تبذل شركات الاستضافة كل ما في وسعها لكسب عملاء جدد. وهناك شركات تقدم خدمة ترحيل مواقع الويب المجانية للعملاء الجدد، . كل ما عليك القيام به هو طلب الترحيل بعد الاشتراك مع المزود الجديد وسيتولى فريق الدعم الخاص بهم مهمة نقل الموقع إلى مضيف ويب مختلف.
  14. الكوبونات هي خصومات ورموز ترويجية تمنح المشتري من المتجر تخفيظ على السعر الحقيقي للمنتج عند الشراء من متجر إلكتلروني, مثلا في Laravel : يمكنك جعل جدول المنتجات في قاعدة البيانات يستخدم خصومات ، بإنشاء جدول كوبونات خاص product_promotions ثم نربطه مع جدول المنتجات, في جدول product_promotions نضع الحقلين ( promo_id , product_id ) لكي يتم الربط بين كل منتج والكوبون الخاص به في جدول الكوبونات promotions بعد ذلك نقوم بتعريف علاقة many to many في نمودج المنتج <?php public function promocodes(){ return $this->belongsToMany(Promo::class)->withPivot(['promo_id']); } ستعيد هذه الدالة جميع العروض الترويجية التي تستخدمها هذه المنتجات حتى نتمكن من إظارها وإجراء جميع العمليات عليها, <?php $promocodes = Product::find(1)->promocodes; print_r($promocodes); // سيتم إظهار جميع الكوبنات الخاصة بالمنتج رقم 1
  15. لكي نفهم جيد الفرق بين استخدام app أو route لنعاين المثالين التاليين // app.js var express = require('express'), dogs = require('./routes/dogs'), var app = express(); app.use('/dogs', dogs); app.use('/cats', cats); app.use('/birds', birds); app.listen(3000); //dogs.js var express = require('express'); var router = express.Router(); router.get('/', function(req, res) { res.send('GET handler for /dogs route.'); }); router.post('/', function(req, res) { res.send('POST handler for /dogs route.'); }); module.exports = router; عندما يتم استدعاء ()var app = express ، يتم إرجاع كائن app. . التطبيق الرئيسي عندما يتم استدعاء var router = express.Router، يتم إرجاع تطبيق صغير مختلف قليلاً. الفكرة وراء التطبيق المصغر هي أن كل مسار في تطبيقك يمكن أن يصبح معقدًا للغاية ، وستستفيد من نقل كل هذه التعليمات البرمجية إلى ملف منفصل. يصبح جهاز توجيه كل ملف تطبيقًا مصغرًا. له هيكل مشابه جدًا للتطبيق الرئيسي. في المثال أعلاه ، تم نقل رمز المسار / dogs إلى ملفه الخاص حتى لا يتسبب في تشويش التطبيق الرئيسي. سيتم تنظيم الكود الخاص بـ / dogs بالمثل في ملفاتهم الخاصة. من خلال فصل هذا الرمز إلى ثلاثة تطبيقات صغيرة ، يمكنك العمل على منطق كل واحد على حدة ، ولا تقلق بشأن كيفية تأثيره على التطبيقين الآخرين. cats و birds إذا كان لديك كود middleware يتعلق بجميع المسارات الثلاثة ، فيمكنك وضعه في التطبيق الرئيسي ، قبل app.use إذا كان لديك كود middleware يتعلق بواحد فقط من هذه المسارات ، يمكنك وضعه في الملف لهذا المسار فقط.
  16. هذه تسمى مشكلة صلاحيات و لاتحل عن طريق تشفير id بل نقوم بعمل Middleware تقوم بالتحقق من صلاحيات المستخدم يمكنعمل ذلك على النحو التالي: في المتحكم الخاص بك قم بوضع دالة التحقق على دالة التعديل class Foo extends Conroller { public function __construct() { $this->middleware('post-edit', ['only' => ['edit']]); // يتم التحقق من الصلاحيات قبل تنفيد الأمر بالتعديل } public function edit(Request $request, $id) { //تعديل المقال } } بعد ذلك نتأكد من الصلاحيات بواسطة post-edit middleware <?php namespace App\Http\Middleware; use Closure; class PostEditMiddleware { public function handle($request, Closure $next) { if(Auth::user()->id == $request->input('user_id')) // نتحقق أن العنصر خاص بالمستخدم ولديه صلاحية التعديل عليه return $next($request); return Response::make("Unauthenticated", 401); // في حالة ليس لديه الصلاحية نقوم بإسترجاع رسالة عدم الصلاحية } }
  17. يمكنك كذالك تخزين الصور ببساطة بإستعمال دالة في المتحكم الخاص بك على الشكل التالي. public function uploadImage(Request $request) { $request->validate([ 'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048', // تحديد صيغة الصورة وحجمها ]); $imageName = time().'.'.$request->image->extension(); // أعطاء إسم مناسب للصورة $request->image->move(public_path('images'), $imageName); // public/images رفع الصورة إلى الخادم في مجلد return back() ->with('success','You have successfully upload image.') ->with('image',$imageName); } و إجابتا على سؤالك الثاني فالصور تحفظ داخل مجلدات المشروع في الخادم. فمثلا في هذا المثال ستجد الصورة في مجلد public/images ويمكن أيضا تخزينها في مجلدات أخرى حسب الحاجة.
  18. عندما تريد دمج Firebase في تطبيقك ، يجب عليك اختيار إحدى طريقتين الموجودة في التوثيق الرسمي يمكنك إما اختيار استخدام إصدارات محددة من كل تبعية ، مثل هذا: implementation 'com.google.firebase:firebase-analytics:18.0.0' implementation 'com.google.firebase:firebase-firestore:22.0.0' أو يمكنك استخدام Firebase BoM لاختيارها لك ، بناءً على إصدار BoM واحد يطبق إصدارات متوافقة معينة من أجلك: // bom إستيراد إصدار implementation platform('com.google.firebase:firebase-bom:26.1.0') // يتم اختيار إصدارات Firebase SDK تلقائيًا بواسطة BoM implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-firestore' يمكنك العثور على مزيد من المعلومات حول إصدارات Firebase من هنا
  19. يمكن إضافة اساليب عمليات جديدة إلى الكائن Calculator ببساطة بواسطة الخاصية this.methods. وذلك لتتمكن من إضافة دوال جديدة للعمليات الأكثر الأكثر تعقيدًا. ويمكن كتابة الدالة Calculator على الشكل التالي: function Calculator() { // إضافة العمليات this.methods = { "-": (a, b) => a - b, "+": (a, b) => a + b }; this.calculate = function(str) { let split = str.split(' '), // تحديد الأعداد والنوع العملية a = +split[0], op = split[1], b = +split[2]; if (!this.methods[op] || isNaN(a) || isNaN(b)) { return NaN; } return this.methods[op](a, b); // إسترجاع العملية }; this.addMethod = function(name, func) { this.methods[name] = func; // إضافة العملية إلى الكائن معرفة بإسمها }; }
  20. ويمكنك أيضا إستخدام الطريقة التالية: أضف تبعيات babel-cli و babel-preset-es2015 (المعروفة أيضًا باسم ES6) إلى ملف package.json لتطبيقك بالشكل التالي: { "dependencies": { "babel-cli": "^6.0.0", "babel-preset-es2015": "^6.0.0" }, "scripts": { "start": "babel-node --presets es2015 app.js" } } بعد ذلك يمكنك ببساطة تنفيذ الأمر التالي لتشغيل التطبيق الخاص بك npm start إذا قررت التوقف عن استخدام Babel (على سبيل المثال ، بمجرد أن يدعم Node.js جميع ميزات ES6) ، يمكنك إزالته من package.json: { "dependencies": {}, "scripts": { "start": "node app.js" } } تتمثل إحدى فوائد هذه الطريقة أن تشغيل التطبيق الخاص بك يظل كما هو ، مما يساعدك إذا كنت تعمل مع مطورين آخرين.
  21. Mongoose هي مكتبة نمذجة بيانات الكائن (ODM) لـ MongoDB و Node.js. يدير العلاقات بين البيانات ، ويوفر التحقق من صحة المخطط ، ويستخدم للترجمة بين الكائنات في التعليمات البرمجية وتمثيل تلك الكائنات في MongoDB. MongoDB هي قاعدة بيانات مستندات NoSQL بدون مخطط. هذا يعني أنه يمكنك تخزين مستندات JSON فيه ، ويمكن أن تختلف بنية هذه المستندات حيث لا يتم فرضها مثل قواعد بيانات SQL. هذه إحدى مزايا استخدام NoSQL لأنها تسرع تطوير التطبيقات وتقلل من تعقيد عمليات النشر deployments. والفرق بينهما أنه باستخدام Mongoose ، يمكن للمستخدم تحديد مخطط المستندات في مجموعة معينة. يوفر الكثير من الراحة في إنشاء وإدارة البيانات في MongoDB. على الجانب السلبي ، قد يستغرق تعلم mongoose بعض الوقت ، ولديه بعض القيود في التعامل مع المخططات المعقدة للغاية. ومع ذلك ، إذا كان مخطط المجموعة الخاص بك غير متوقع ، فابدأ باستخدم برنامج MongoDB driver. إنه أبسط بكثير في هذه الحالات. أما الجانب السلبي هنا هو أنه سيتعين عليك كتابة كميات أكبر من التعليمات البرمجية للتحقق من صحة البيانات و تصحيح الأخطاء.
  22. أولا يمكنك حساب جميع المجاميع الفرعية الممكنة. و أبسط طريقة هي أخذ كل عنصر وحساب مجموع كل المصفوفات الفرعية بدءًا منه. على سبيل المثال ، بالنسبة إلى [-1 ، 2 ، 3 ، -9 ، 11]: // تبدأ من -1: -1 -1 + 2 -1 + 2 + 3 -1 + 2 + 3 + (-9) -1 + 2 + 3 + (-9) + 11 // تبدأ من 2: 2 2 + 3 2 + 3 + (-9) 2 + 3 + (-9) + 11 // تبدأ من 3: 3 + (-9) 3 + (-9) + 11 // بدءًا من -9 -9 -9 + 11 // ابتداء من 11 11 بعد أن فهمنا الخازارزمية يمكننا كتابة الدالة على الشكل التالي: function getMaxSubSum(arr) { let maxSum = 0; // إذا لم نأخذ أي عناصر ، فسيتم إرجاع الصفر for (let i = 0; i < arr.length; i++) { let sumFixedStart = 0; for (let j = i; j < arr.length; j++) { sumFixedStart += arr[j]; maxSum = Math.max(maxSum, sumFixedStart); } } return maxSum; } console.log( getMaxSubSum([-1, 2, 3, -9]) ); // 5 console.log( getMaxSubSum([-1, 2, 3, -9, 11]) ); // 11 console.log( getMaxSubSum([-2, -1, 1, 2]) ); // 3 console.log( getMaxSubSum([1, 2, 3]) ); // 6 console.log( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100 الكود هو في الواقع حلقة متداخلة: الحلقة الخارجية فوق عناصر المصفوفة ، والداخلي يحسب المجاميع الفرعية التي تبدأ بالعنصر الحالي.
  23. هناك الكثير من الخيارات المتاحة اليوم عندما يتعلق الأمر بقواعد البيانات في تطبيق flutter. عادة ما تتناسب مع هذه الفئات الثلاث: قاعدة البيانات العلائقية Relational databases - هذه هي قواعد البيانات بالمعنى التقليدي الأكثر شيوعا. فهي لا تقوم فقط بتخزين البيانات ولكن أيضًا العلاقات بين البيانات. SQLite هو مثال على قاعدة البيانات العلائقية. NoSQL - تخزن قواعد البيانات هذه البيانات كمستندات. لا يتم فرض المخطط كما هو الحال مع قاعدة البيانات العلائقية. فهي سريعة كالبرق وتتعامل مع أجزاء ضخمة غير منظمة من البيانات بشكل جيد للغاية. MongoDB هو مثال على قاعدة بيانات NoSQL. تخزين البيانات المصممة بشكل فردي - في حين أن هذا الخيار ليس قاعدة بيانات من الناحية الفنية ،إذ لا يتعين عليك استخدام الحلول المذكورة أعلاه. يمكنك تخزين بياناتك في ملف JSON والتعامل مع البيانات بنفسك. سيكون هذا سريعًا بشكل لا يصدق ولكن ربما ستواجهك بعض الصعوبات إذا لم تكن عبقريًا في البرمجة
  24. لحل هذه المشكلة يجب عليك تغيير إعدادات BIOS , إذهب إللى إعدادات BIOS ضمن Advanced / Boot / Boot Configuration (تكوين التمهيد / التمهيد / التكوين المتقدم) قم بتغييره من "Fast Boot" إلى "Disabled". السبب في تمهيده (مرة واحدة) بعد ضبط جهاز التمهيد الأساسي هو أن BIOS لا يقوم بعملية "التمهيد السريع" في المرة الأولى التي يتم فيها التمهيد لأول مرة.
  25. لحل هذه المشكلة يجب إتباع المراحل التالية: 1- قم بإلغاء تثبيت virtualbox و إمسح جميع الفولدز الخاصة به 2- أطفىء الجهاز الخاص بك ثم أعد تشعيله 4- قم بتمزيل genymotion مع نسخة virtualbox الخاصة به من هنا 5- بعد تثبيت البرنامج إفتح virtualbox أولا قبل genymotion
×
×
  • أضف...