PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : Odex و deOdex چیست؟



mohammadsp
17-08-2011, 10:51
>>توضیحات اولیه<<


*- دوستانی که با کاستوم رامها آشنایی دارند میدونن که یکی از featureهایی که اکثر کوکرها برای رامشون مطرح میکنند، deodex بودن رامه. تو این مقاله میخوام ببینیم این ویژگی چیه و به چچی مربوط میشه و اصلا چه فایده ای داره.

*- این مقاله علاوه بر کمک به افرادی که میخوان وارد کوک کردن رام بشن، به دوستان دیگه ای که علاقه دارند با سیستم عملکرد اندروید آشنا بشن هم مفید خواهد بود.


>>اصلا فایلهای odex در سیستم عامل اندروید چی هستند و کارشون چیه؟<<


همیشه قدم اول آشنایی با صورت مساله هست. میدونید که برنامه ها در اندروید با پسوند apk شناخته میشن. مثلا برنامه Mail در اندروید به صورت یک فایل mail.apk هست. همینطور در مورد messages و people و gmail و ...

فایلهای odex فایلهایی هستند که در کنار هر فایل apk قرار دارند. به صورت دقیقتر باید گفت قسمتهایی از برنامه که در هنگام بالا اومدن سیستم عامل باید load بشن درون فایل odex قرار دارند. با این کار سرعت بوت افزایش پیدا میکنه چون دیگه کل برنامه load نمیشه بلکه فقط قسمتی از برنامه preload میشه.

همین ویژگی این فایلها، امکان هک کردن برنامه هایی که به این شکل هستند رو سخت میکنه. چون قسمتی از برنامه مورد نظر قبل از اجرا در جایی دیگه قرار گرفته.

بنابراین به طور خلاصه:

* - مزیت فایلهای odex در بالا بردن سرعت بوت گوشیه.
* - عیب استفاده از این سیستم زمانی دیده میشه که شما بخواهید گوشی یا فقط یه برنامه رو هک کنید.

نکته

باید به این نکته اشاره بشه که منظور از هک، چیز پیچیده ای نیست. مثلا یه نمونه هک که همیشه ممکنه انجامش بدید (البته در کاستوم رامها). مثلا هر بار که شما یه افزونه به رام اضافه میکنید میبینید که بسیاری از منوها و گزینه ها و آیکون ها عوض میشه. این یعنی شما تعدادی از فایلهای apk رو عوض کردید. بنابراین اگر اون فایلها odex باشند نمیتونید این کار رو انجام بدید.


>>deOdex چیست و فایلهای dex چی هستند؟<<


deOdex کردن به این معناست که تمام قسمتهای فایلهای apk در یک فایل جمع بشن. یعنی دیگه اینجوری نباشه که قسمتهایی از یه برنامه درون یه فایل دیگه باشه. بنابراین جمع آوری تمام قسمتهای یه برنامه درون یه فایل با پسوند apk میشه deOdex کردن.
deOdex کردن، فایلهای odex رو به فایلهای dex تبدیل میکنه.


کمی تخصصی تر


اندروید برای اجرای برنامه ها از یک ماشین مجازی بر پایه جاوا (Java Based Virtual Machine) به نام Dalvik Virtual Machine استفاده میکنه. (حتما تا حالا اسم Dalvik Cache به گوشتون خورده)
فایلهای odex یا dex شامل کشی که این ماشین مجازی برای اجرای یک برنامه لازم داره هستند. با این تفاوت که فایلهای odex بر خلاف فایلهای dex در کنار فایل apk قرار دارند و در واقع نسخه بهینه شده فایلهای dex هستند. این بهینه بودن هست که به افزایش سرعت بوت کمک میکنه و به dalvik cache آموزش میده که چه برنامه هایی load خواهند شد.
در مقابل این ویژگی فایلهای odex که در واقع جدای از apk هستند، هک کردن این برنامه ها رو دچار مشکل میکنه.



جمع بندی نهایی

* - اdeOdex کردن یک رام به کوکر و در نتیجه به کاربران این قدرت رو میده که بتونه فایلهای apk رو به هر صورتی که میخوان تغییر بدن. مثلا هر افزونه یا تمی که میخوان نصب کنند.

* - در مقابل همونطور که گفته شد، ویژگی اصلی فایلهای odex که افزایش سرعت بوت بود از بین میره.اما باید به این نکته توجه داشت که این اتفاق فقط در اولین بوت رخ میده. یعنی در نصب کاستوم رامها همیشه اولین بوت، طولانی خواهد بود(حتما دیدید که کوکرها میگن بعد از نصب رام، اولین بوت طولانی خواهد بود). در ادامه استفاده از رام Dalvik Cache به ندرت کامل میشه و فقط زمانی طولانی بودن مدت بوت تکرار میشه که Dalvik Cache رو وایپ کنید.

M_J_Nazari
05-02-2012, 23:38
با تشکر از استارتر تاپیک، با اجازه منم یه توضیحاتی بدم:

فایل های dex حاوی کدهای جاوا میباشند.
ساختار ODEX و DEODEX چندین تفاوت عمده دارند:

فایل های dex حاوی کدهای جاوا میباشند که توسط ماشین مجازی جاوا (دلویک) خوانده میشوند.
اگر فایل های dex کنار برنامه ی مورد نظر باشند، به آنها Odex گفته میشود:
برای مثال برنامه ای به نام mobilestan با ساختار ادکس:

mobilestan.apk
mobilestan.odexاگر این فایل درون نرم افزار گنجانده شده باشد، ساختار آن به اصطلاح Deodex خوانده میشود و خبری از فایل odex در کنار آن نیست.

فایل های جاوا در ساختار deodex در پکیجی به نام classes.dex در خود نرم افزار ذخیره میشوند.
برای ویرایش فایل های java باید از نرم افزارهای smali استفاده نمود.

حالا چگونه تشخیص دهیم یک فایل Odex هست یا نیست؟
در هر ساختار odex فایل های اجرایی یا جاوا در صورت وجود در کنار نرم افزار با همان نام نرم افزار و با پسوند Odex قرار دارند.
حالا اگر این فایل odex وجود نداشت، فایل jar و یا apk را با winrar باز کنید، در صورتی که فایل classes.dex وجود داشته باشد، این فایل deodex و در غیر اینصورت آن فایل در هر دو ساختار پاسخگو خواهد بود.


در ساختار ادکس فایل ها به همدیگر ارتباط دارند و زنجیره ی این ارتباطلات در فایل init.rc مشخص میشود.

معمولا این زنجیره ی ارتباطی درون فولدر framework هست.

بهتره با مثال توضیح بدم

فرض کنید فایل android.jar رو داریم، همونطور که میدونیم اگه فایل odex باشه پس فایل android.odex هم باید کنار آن باشد.
در ساختار odex فرض کنید برای اجرا شدن آن، باید از فایل android2.odex استفاده کند، ماشین مجازی دلویک، فایل های android2.odex را در آن نرم افزار ترکیبی خوانده و اجرا میکند.

پس هنگامی که ساختار اودکس هست، اگر نرم افزاری وابسته باشد، ماشین مجازی دلویک، دستور داده شده را مستقیم ا از فایل اودکس وابسته به درون حافظه ی کش خود انتقال داده و آنرا برای نرم افزار اولیه اجرا میکند.


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


دلیل افت سرعت و افزایش فضای RAM درون سیستم عامل های دی اودکس چیست؟

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

1- فایل های classes.dex برای دریافت فرامین و قالب کلی نرم افزار باید اجرا شوند.
2- فایل های classes.dex در حافظه ی RAM اکسترکت میشوند.
3- فایل های اکسترکت شده به حافظه ی دلویک انتقال داده میشوند.
4- سپس اجرا میشوند.

در فایل های اودکس، روند مرحله ی 2 اتفاق نمی افتد. و فایل های .odex مستقیم به حافظه ی دلویک کش انتقال داده میشوند.

با تشکر:mobilestan:

arash998
09-09-2012, 17:03
با تشکر از هر دوی شما اساتید که \یشتر هم از مطالبتون بهره مند شدیم.
میخواستم بپرسم با توجه به فرمایشات شما اینکه من احساس میکنم علاوه بر بوت اولیه در استفاده همیشگی از ROM هم بین Odex و Deodex اختلاف‌سرعت وجود داره اشتباهه یا خیر ؟
در کل اگر سرعت ROM‌ در استفاده روزانه ملاک باشه کدوم ساختار مناسب تره ؟
متشکرم.