رفتن به مطلب

قابلیت MultiDex در B4A


مجید آرتا

ارسال‌های توصیه شده

سلام به کاربرای خوبِ انسرسنتر

امیدوارم دلتون توی این روزای سرد زمستانی گرم باشه.

با قابلیت MultiDex  در بیسیک4اندروید در خدمتتون هستیم.

اگر فایل apk  رو با نرم افزار های فشرده ساز مثل وینرار یا 7z اکسترکت کنید یکسری فایل رو میتونید مشاهده کنید.یکی از فایل ها که به اسم calsses.dex  هستش توی این فایل های اسکترکت شده موجوده.

این فایل تمامی کدهای نوشته شده به زبان جاوا رو در خودش قرار میده.یعنی به وسیله این فایل می تونیم تمامی کدهای یک اپ اندروید رو در بیاریم.

خب بگذریم، شاید شما بعضی از اپ هار و اکسترکت کرده باشید و دیده باشین که دو تا فایل classes.dex وجود داره، خب جای تعجبی نداره و قطعا برنامه نویس/برنامه نویسان این اپ از مرز محدوده ی کد و توابع گذر کردن و مجبور شدن قابلیت multidex  رو فعال کنن.

چ زمانی پس از این قابلیت استفاده میشه ؟ بله درسته زمانیکه ما کدها و توابعی رو که نوشتیم بیش از حد مجاز یک فایل dex  باشه زمان کامپایل با این خطاها مواجه میشیم :

- Too many field references
- Too many method references

یعنی شما نیاز دارید تا قابلیت MultiDex رو فعال کنید.

برای فعال کردن این قابلیت، توی اکتیویتی Main  این کد رو قرار بدید »


#MultiDex: True

خب طبق عرایض ارل نکته ای رو هم باید به عرضتون برسونم.این نکته مربوط میشه به دوستانی که از بیسیک نسخه ی 6.80 استفاده می کنن.

میرید به محل نصب بیسیکتون، فایل Dexer.jar  رو پیدا که کردید، میایید این رو دانلود می کنید و جایگزینش می کنید »

http://www.b4x.com/android/files/Dexer.jar

حواستون باشه، قبل اینکه فایل جدید رو کپی کنید ابتدا مطمئن باشید که بیسیکتون اجرا نباشه و اگه اجرا بود حتما برنامه رو ببندین.

خب کل کاری که باید انجام میداید همینی بود که بهتون عرض کردم.

به امید پروژه های مالتی دکسی همه بچه های انسرسنتری :crazy::give_rose::DD:

:DD:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

خسته نباشید جناب آرتا

یه ذره گنگ هدف رو گفتین فکر کنم. چون ابتدا بحثت یجور روی امنیت بود بعد یهو توی چن حرف میگین " بیش از حد مجاز یک فایل dex 

 

به نظرم باید بیشتر روی این گارد میگرفتین. حالا من توضیحات تکمیلی بدم با اجازتون

 

گاهی اوقات برنامه ما سنگین میشه از لحاظ رفرنس( مثلا از کلی کتابخونه و توابع خاصی استفاده میکنیم که منجر میشه رفرنس از حد مجازمون بیشتر بشه و با خطایی که آقای ارتا گفتن هنگام کامپایل مواجه بشیم, خطای کاملش تو کادر پایین گزاشتم )

B4A version: 7.01
Parsing code.    (0.34s)
Running custom action.    (0.24s)
Compiling code.    (0.73s)
  
ObfuscatorMap.txt file created in Objects folder.
Compiling layouts code.    (0.15s)
Organizing libraries.    (2.09s)
Generating R file.    (1.92s)
Compiling generated Java code.    (12.21s)
Convert byte code - optimized dex.    Error
trouble writing output: Too many field references: 65730; max is 65536.
You may try using —multi-dex option.

توی تجربیات من فهمیدم که بیشترین رفرنس رو کتابخونه متریال دراور داره.

نکته  : خلاصه اگر رفرنسهاتون زیاد شد دیگه نمیتونین کامپایل کنین و راه حل آن این هست که(همانطور که جناب آرتا فرمودن:) از بیسیک 6.8 به بالا استفاده کنین و بعدش توی اکتیویتی مین اینو بزارین:

#MultiDex: True

 

حالا پروژه شما کامپایل میشود ولی یه نکته مهم اینجاست که اگر کد مولتی دکس به کار بردین دیگه برنامه شما روی اندروید پایین فورس کلوز میده( فکر کنم از 5 به بالا جواب میده)

این خیلی بده چون دیگه روی خیلی گوشیها جواب نمیده و هنوز نسخه 4.4 زیاده توی بازار.

 

برای کیف نرم افزار من این مشکل مولتی دکس پیش اومد و دیگه رفتم با شناسایی کتابخونه ها و با حذفشون و جایگزین با کتابخونه ساده تر اومدم تعداد رفرنس ها رو کم کردم

مثلا با حذف کتابخونه متریال دراور و جایگزین با کتابخونه اسلاید پنل این مشکل رو حل کردم ( البته فقط با این یکی حل نشد که.خخخخ. 5 تایی کتابخونه سنگین داشتم که با حذف و جایگزینش تونستم رفرنسهام رو کم کنم و نیاز به مولتی دکس نداشته باشم)

حد مجاز رفرنس : 65536 می باشد

تایپک مولتی دکس:

https://www.b4x.com/android/forum/threads/multidex-solves-the-too-many-methods-error.76431/#content

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

  • 4 هفته بعد...

 

در در 1396/10/30, 05:39:29، salmana گفته است :

حالا پروژه شما کامپایل میشود ولی یه نکته مهم اینجاست که اگر کد مولتی دکس به کار بردین دیگه برنامه شما روی اندروید پایین فورس کلوز میده( فکر کنم از 5 به بالا جواب میده)

این

عزیز. شما بهتره تاپیک مرجع رو با دقت بیشتری بخونید. جمله زیر میگه که این قابلیت با اندروید 2 مشکل داره نه اندروید 5.

There are issues with MultiDex and Android 2.x devices

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1396/11/25, 15:49:17، محمدرضا شاهپیری گفته است :

 

عزیز. شما بهتره تاپیک مرجع رو با دقت بیشتری بخونید. جمله زیر میگه که این قابلیت با اندروید 2 مشکل داره نه اندروید 5.

There are issues with MultiDex and Android 2.x devices

من خیلی وقت پیش که مراجعه کرده بودم اون موقع ها ارل گفته بود که از اندروید 5 به بالا ساپورت میکنه و روی کمتر از 5 خطا میده و من هم تست کرده بودم و فقط 5 به بالا جواب میداد

جدیدا اومده فایل  Dexer.jar  را به روز کرده تا روی اندروید 4 هم مشکل حل کنه( در متن پایین گفته) . البته من تست کردم روی اندروید 4 و جواب نداد.خخخخ

Developers who use this version should replace the existing Dexer.jar with this one: www.b4x.com/android/files/Dexer.jar

Close the IDE and copy the updated Dexer.jar to the installation folder. It fixes an issue with Android 4 and the MultiDex feature.

اگر دقت کنی ارل پستش رو ادیت کرده و edit هم نوشته شده.

نکته :این که بقول ارل از این مولتی دکس فقط در مورد (خطای رفرنس زیاد) موقع کامپایل استفاده بشه.

در پایین گفته اگر نیازی ندارین ازش استفاده نکنین چون مولتی دکس هیچ منفعتی نداره بلکه ضرر کامپایل کندتر  هم به همراه داره

 - Don't use this feature if not needed. Compilation will be a bit slower and there are no benefits.

متن پایین هم میگه روی اندروید 4 جالب نیست(چیزی که تونستم ازش بفهمم فکر کنم این بودش)

 - Test your APK on an Android 4.x device. There is no native support for MultiDex on Android 4.x so the process is more fragile. 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...