آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آپدیت برنامه

اپلیکیشن ساز شاپینا  11 سال پیش  11 سال پیش
+1 0

کسی میدونه کافه بازار چطوری برنامه ها رو اپدیت میکنه که حجم آپدیت انقدر کم میشه؟

+1 0
ظاهراً فقط فایل هایی که تغییر کردن رو با ورژن قبلی مقایسه میکنه و فقط اونها رو برای دانلود قرار میده. (11 سال پیش)
+2 0
حداقل این روشی که دوستمون گفتن نیست، فایلی که ما میفرستیم ی یکه و تنهاست، مثل یه سایت اینترنتی نیست که چندین فایل داشته باشه و اونی که تغییر کرده رو دریافت کنه - با توجه به سوالی که از اساتید سایت کردم اگر بخواییم تحقیق کنیم این دو عبارت مناسبتره :) "compare two binary files" و "get difference between two binary files" (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
hamidd  11 سال پیش
+3 0

وقتی پسوند فایل apk را به zip تغییر میدیم می بینیم که شامل فایل های مختلفی هست. هر فایلی رو که درون فایل apk وجود داره رو میشه به یک رشته ی hash منحصر به فرد تبدیل کرد(که طولش فقط 128 بیت هست).با ارسال رشته ی هش فایل ها به سرور و مقایسه اونها با فایل هایی که در نسخه ی جدید برنامه که روی سرور وجود داره و دانلود کردن فقط فایل های تغییر کرده یا اضافه شده و دوباره zip کردنشون و تغییر نام دادن فایل نهایی به apk میشه این الگوریتم رو پیاده سازی کرد. به الگوریتم اش هم الگوریتم "دلتا آپدیت" می گن که بازار از الگوریتم دلتا آپدیت استفاده کرده.

A delta update is an update that only requires the user to download the code that has changed, not the whole program. It can significantly save time and bandwidth. The name is drawn from the fact that the Greek letter delta, Δ or δ, is used to denote change in mathematical sciences.

اطلاعات بیشتر : http://en.wikipedia.org/wiki/Delta_update

این الگوریتم رو شما خودتون هم می تونید برای خودتون روی سرورتون و برنامه هاتون پیاده سازی کنید اگه قابلیت force update رو برای برنامه هاتون گذاشتین .

+1 0
به نظرم این روشم نیست D: - تونستم فایلی که دانلود میکنه بدست بیارم(فقط نپرسید چجوری :)، یه فایل با پسوند diff ، با 7zip بازش کردم داخلش یه فایل بود، این فایل داخلش با 7zip که باز نشد، معلوم نیست فرمتش چیه. نظر شما چیه؟ (11 سال پیش)
+1 0
Spirit@ :الگوریتمش که ظاهرا همینه . منم به این فایل diff رسیدم ولی نتونستم بخونم . چند تا روش برای باز کردنش دیدم همش کامند لینوکس بود . این لینک هم توضیحات خوبی داده (11 سال پیش)
+2 0
بازار اعلام کرده از الگوریتم دلتا آپدیت استفاده می کنه. ساختار فایلش نمی دونم چیه، ولی هر چی هست یک header داره که خودشون می دونن چیه و فایل های که توی دو ورژن متفاوتند با یک ساختار فایلی که فقط خودشون می دونن درش قرار داده شده (تازه شاید رمز نگاری هم شده باشه، که البته نیاز نیست) (11 سال پیش)
+2 0
تازه اون توضیحاتی که من دادم خیلی کلی بود و وارد جزئیات نشدم فایل classes.dex که در فایل apk قرار داره رو هم میشه به اجزای جداگانه ای تقسیم کرد.اگه بخوان الگوریتم شون بهینه باشه باید فایل classes.dex هم تجزیه کنن. تا حجم کمتری نیاز به دانلود باشه (شایدم این کارو کردن). (11 سال پیش)
+2 0
بازار توی همایش پنج شنبه بازار گفته بود نسخه ی جدید بازار که میاد از الگوریتم "دلتا آپدیت" استفاده میکنه. (11 سال پیش)
+2 0
لینک فقط سایتش دور باز میشه (11 سال پیش)
+1 0
حتماً اسمش همینه ولی روشش فرق میکنه نمیدونم، ولی بر اساس شواهد این فایل قبلا توی خود سرور آماده میشه، کلاینت تاثیری توش نداره جز دریافت و اعمال اون به فایل apk - چرا؟ چون چندین بار شده برنامه ای رو از Google Play بروز کردم، بعد از مراجعه به بازار دیدم برای همون برنامه تازه بروز شده آپدیت وجود داره تنها تفاوت هم تو عدد build نسخه هاست وگرنه حجم هر دو هم یکی هست (علتش رو هم میدونیم که توی Google Play میتونیم برای دستگاه های مختلف apk متفاوت در نظر بگیرم که تغییرات بسیار کوچیکی با هم دارن)، با توجه به توضیحاتتون میبایست در این شرایط هم حداقل یک بروزرسانی چند کیلوبایتی باید در دسترس باشه که معمولا تو این موارد باید کل فایل دانلود بشه. البته حمید جان شما استاد مایی :) من از این موراد زیاد سر درنمیارم، همین طوری حسی وارد بحث شدم D: (11 سال پیش)
+1 0
فدات شم:) شکست نفسی نفرمایید. شما استاد مایی. اونجایی که فرمودی (با توجه به توضیحاتتون میبایست در این شرایط هم حداقل یک بروزرسانی چند کیلوبایتی باید در دسترس باشه که معمولا تو این موارد باید کل فایل دانلود بشه) منظورت اینه که وقتی تو گوگل پلی برنامه رو ارتقا میدی توی بازار دیگه گزینه ی ارتقا وجود نداره؟ (11 سال پیش)
+1 0
نه شما استادی که ویندوز رو روی اندروید بالا میاری :) ارتقا هست ولی باید کل فایل دانلود بشه. الان شما CM Browser 5.1.89 رو نصب کنید، بازار هم نسخه 5.1.90 رو داره ولی باید کل فایل رو دانلود کنید. (11 سال پیش)
+1 0
راستی تو گوگل پلی کجا نسخه برنامه (و نسخه ی آپدیت جدید برنامه) رو می نویسه هر چی می گردم نیست.مثل بازار نیست؟ (11 سال پیش)
+1 0
دیروز رام گوشی رو عوض کردم هنوز وارد حسابم نشدم دقیق بگم، ولی این عکس رو ببین لینک (11 سال پیش)
+1 0
یادم رفت بگم روی Read More باید کلیک کنی (الان دیگه پیدا کردی خب). (11 سال پیش)
پاسخ به سوال 
hamidd  11 سال پیش
+4 0

الگوریتم دلتا آپدیت رو میشه به روشهای مختلف پیاده سازی کرد. یادمه بازار به برنامه نویسها ایمیل داده بود نسخه ی آزمایشی بازار رو قبل از انتشار رسمی دانلود کنید و خلاصه این که تستش کنید. وقتی دیدم قابلیت دلتا آپدیت رو داره برام قابل تحسین بود که بازار قابلیت دلتا آپدیت داره ولی گوکل پلی نداره. پیش خودم فکر کردم که چجوری پیاده سازی کردن. اول همین فکر شما به ذهنم رسید که نسخه های برنامه ها رو روی سرورشون دارن و فقط سمت سرور یه فایلی که شامل تفاوت ها هست وجود داره و فقط همون دانلود میشه (که ظاهرا همین طوره). ولی بعد یه خلا حس کردم (یه چیز handle نشده) و فکر می کردم بازار که حالا همچین الگوریتم خوبی نوشته حتما اینم handle کرده (که الان متوجه شدم نکرده). بیاین فرض کنیم برنامه نویسی نسخه ی 1.0 برنامه اش رو در گوگل پلی منتشر میکنه بعد همین جور چند تا آپدیت میده 1.2 1.3 1.4 تا نسخه ی مثلا 1.5 رو منتشر میکنه. بعد بازار حالا دست به کار میشه تصمیم می گیره برنامه رو توی مارکت خودش منتشر کنه. نسخه ی 1.5 برنامه رو توی مارکت خودش منتشر می کنه ولی به نسخه های قبلی دسترسی نداره. حالا اگه من کاربر نسخه ی 1.4 رو از گوگل پلی قبلا دانلود و نصب کرده باشم بخوام توی بازار برنامه رو به نسخه ی 1.5 ارتقا بدم الگوریتم دلتا آپدیت به این شکل فعلی که پیاده سازی شده کارایی نداره باید کل برنامه رو دانلود کنم چون بازار که نسخه ی 1.4 برنامه رو نداره که بخواد روی سرورش فایل تفاوت ها یا همون diff که مخفف different هست رو ایجاد کنه (ولی الگوریتمی که بالا گفتم این مشکلو نداره).

حالا اینا به کنار یه مشکلی دیگه هم داره که حوصله نداشتم دیگه اینو بگم، چون توضیح دادنش به صورت شفاف یکم سخته، ولی میگم. شما برای این که تست کنی و یک باگی توی سیستم آپدیت بازار ببینی این کارو بکن (شاید از نظر خودشون باگ نباشه، ولی من اسمشو باگ میذارم). من این کارو کردم اول نسخه ی قبلی یکی از برنامه ها مو نصب کردم بعد رفتم تو بخش توضیحات برنامه توی بازار دیدم برای بروزرسانی به جای 30 مگابایت لازمه فقط 17 کیلوبایت دانلود بشه بعد توی اکلیپس ورژن کد برنامه رو از 7 آوردم رو 6 و 15 مگابایت از فایلهایی که توی پوشه ی assets برنامه بود حذف کردم و برنامه رو نصب کردم رفتم تو بازار دیدم بازم نوشته 17 کیلوبایت D: ، زدم به روزرسانی دیدم بازار اون 17 کیلوبایت رو دانلود کرد و 10 ثانیه ای ذره هنگ کرد و یک Toast نشون داد "بسته ی دانلود شده نصب نشد!" بعد بدون این که چیزی بپرسه پروگرس بار اومد اول و کل حجم برنامه رو دانلود کرد (یعنی هم اون 17 کیلوبایت و 30 مگابایت رو دانلود کرد) .حالا تصور کنین اگه اون 17 کیلوبایت برای یک برنامه ی دیگه ممکنه 5 مگابایت باشه .خوب کاربر این جا به جای این که حجم کمتری دانلود کنه 5 مگابایت هم باید اضافه دانلود کنه و کامل نسخه ی جدید برنامه هم دانلود بشه. 5 مگابایت الکی بازار پهنای باند از دست داده و پنج مگابایت کاربر از دست داده و یه سری پردازش اضافی روی سرور انجام شده و وقت کاربر هم به ازای دانلود اون 5 مگابایت تلف شده( هم هزینه اضافی برای دو طرف هم تلف شدن وقت). شاید بگین چه وقت همچین مشکلی پیش میاد؟ شاید بگین ما که نمیایم نسخه ی قبلی برنامه مون رو تغییر بدیم و یک سری فایل هم فرضا حذف کنیم و دوباره منتشرش کنیم؟ (مگه بیکاریم آغا؟ D: ) وقتی این مورد پیش میاد که من برنامه نویس، نسخه ی 6 برنامه ام در مارکت کندو، با نسخه ی 6 برنامه ام در مارکت بازار فرق داشته باشه. کاربر نسخه ی 6 رو از کندو دانلود کرده حالا میاد نسخه ی 7 رو از بازار دانلود کنه میبینه به جای 30 مگابایت نوشته 17 کیلوبایت.خیلی خوشحال میزنه دانلود، میبینه نه بابا 17 کیلو بایت دانلود شد و بازار یه خورده هنگید و دوباره 30 مگابایت هم داره دانلود میشه، اون موقع نصب میشه.( خوب اگه این 17 کیلوبایت بیشتر بود چی؟ از دست دادن پهنای باند و تلف شدن وقت

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

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

کار زیاد سختی نیست پیاده سازیش.

+1 0
پاسخ ویرایش شد :) (11 سال پیش)
+1 0
پاسخ ویرایش شد. اسپم کیلر خوب کار نمی کنه :( (11 سال پیش)
0 0
ممنون بایت توضیح کامل .البته شاید بازار از گوگل پلی کپی نکرده باشه ولی حتما از یه جا دیگه کپی کرده :) (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .