OTA প্যাকেজের ভিতরে

সিস্টেমটি bootable/recovery/updater থেকে আপডেটার বাইনারি তৈরি করে এবং এটি একটি OTA প্যাকেজে ব্যবহার করে।

প্যাকেজটি নিজেই একটি .zip ফাইল ( ota_update.zip , incremental_ota_update.zip ) যাতে এক্সিকিউটেবল বাইনারি META-INF/com/google/android/update-binary রয়েছে।

আপডেটারে বেশ কিছু বিল্টইন ফাংশন এবং একটি এক্সটেনসিবল স্ক্রিপ্টিং ল্যাঙ্গুয়েজ ( এডিফাই ) এর জন্য একটি ইন্টারপ্রেটার রয়েছে যা সাধারণ আপডেট-সম্পর্কিত কাজের জন্য কমান্ড সমর্থন করে। আপডেটার META-INF/com/google/android/updater-script ফাইলে একটি স্ক্রিপ্টের জন্য প্যাকেজ .zip ফাইলে দেখায়।

দ্রষ্টব্য: এডিফাই স্ক্রিপ্ট এবং/অথবা বিল্টইন ফাংশন ব্যবহার করা একটি সাধারণ কার্যকলাপ নয়, তবে আপডেট ফাইলটি ডিবাগ করার প্রয়োজন হলে এটি সহায়ক হতে পারে।

সিনট্যাক্স সম্পাদনা করুন

একটি edify স্ক্রিপ্ট হল একটি একক অভিব্যক্তি যেখানে সমস্ত মান স্ট্রিং। খালি স্ট্রিংগুলি বুলিয়ান প্রসঙ্গে মিথ্যা এবং অন্য সমস্ত স্ট্রিং সত্য । Edify নিম্নলিখিত অপারেটরগুলিকে সমর্থন করে (স্বাভাবিক অর্থ সহ):

(expr )
 expr + expr  # string concatenation, not integer addition
 expr == expr
 expr != expr
 expr && expr
 expr || expr
 ! expr
 if expr then expr endif
 if expr then expr else expr endif
 function_name(expr, expr,...)
 expr; expr

az, AZ, 0-9, _, :, /, অক্ষরের যেকোনো স্ট্রিং। এটি একটি সংরক্ষিত শব্দ নয় একটি স্ট্রিং আক্ষরিক হিসাবে বিবেচিত হয়। (সংরক্ষিত শব্দ যদি অন্যথায় তাহলে শেষ হয়। ) স্ট্রিং লিটারালগুলি ডাবল-উদ্ধৃতিতেও উপস্থিত হতে পারে; উপরের সেটে না থাকা হোয়াইটস্পেস এবং অন্যান্য অক্ষরগুলির সাথে মানগুলি কীভাবে তৈরি করা যায়। \n, \t, \", এবং \\ উদ্ধৃত স্ট্রিংগুলির মধ্যে এস্কেপ হিসাবে পরিবেশন করে, যেমন \x ##

&& এবং || অপারেটর শর্ট সার্কিটিং হয়; যৌক্তিক ফলাফল বাম দিক দ্বারা নির্ধারিত হলে ডান দিকের মূল্যায়ন করা হয় না। নিম্নলিখিতগুলি সমতুল্য:

e1 && e2
if e1 then e2 endif

; অপারেটর একটি সিকোয়েন্স পয়েন্ট; এর অর্থ প্রথমে বাম দিক এবং তারপর ডান দিকটি মূল্যায়ন করা। এর মান হল ডান পাশের অভিব্যক্তির মান। একটি সেমিকোলন একটি অভিব্যক্তির পরেও উপস্থিত হতে পারে, তাই প্রভাবটি সি-স্টাইলের বিবৃতিগুলিকে অনুকরণ করে:

prepare();
do_other_thing("argument");
finish_up();

অন্তর্নির্মিত ফাংশন

বেশিরভাগ আপডেট কার্যকারিতা স্ক্রিপ্ট দ্বারা সঞ্চালনের জন্য উপলব্ধ ফাংশনগুলির মধ্যে রয়েছে। (কঠোরভাবে বলতে গেলে এগুলি লিস্প অর্থে ফাংশনের পরিবর্তে ম্যাক্রো , যেহেতু তাদের তাদের সমস্ত আর্গুমেন্টের মূল্যায়ন করার দরকার নেই।) অন্যথায় উল্লেখ করা না থাকলে, ফাংশনগুলি সাফল্যের ক্ষেত্রে সত্য এবং ত্রুটির ক্ষেত্রে মিথ্যা ফেরত দেয়। আপনি যদি স্ক্রিপ্টের কার্য সম্পাদন বাতিল করতে ত্রুটি চান, abort() এবং/অথবা assert() ফাংশন ব্যবহার করুন। আপডেটারে উপলব্ধ ফাংশনগুলির সেটটি ডিভাইস-নির্দিষ্ট কার্যকারিতা প্রদানের জন্য প্রসারিত করা যেতে পারে।

abort([ msg ])
ঐচ্ছিক বার্তা সহ স্ক্রিপ্টের সম্পাদন অবিলম্বে বাতিল করে। ব্যবহারকারী যদি টেক্সট ডিসপ্লে চালু করে থাকে, তাহলে বার্তাটি রিকভারি লগ এবং অন-স্ক্রীনে প্রদর্শিত হবে।
assert( expr [, expr , ...])
পালাক্রমে প্রতিটি expr মূল্যায়ন করে। যদি কোনটি মিথ্যা হয়, অবিলম্বে "অ্যাসার্ট ফেইল" মেসেজ এবং ব্যর্থ এক্সপ্রেশনের সোর্স টেক্সট সহ এক্সিকিউশন বাতিল করে।
apply_patch( src_file , tgt_file , tgt_sha1 , tgt_size , patch1_sha1 , patch1_blob , [...])
tgt_file তৈরি করতে src_file- এ একটি বাইনারি প্যাচ প্রয়োগ করে। যদি কাঙ্খিত লক্ষ্য উৎসের মতোই হয়, tgt_file- এর জন্য "-" পাস করুন। tgt_sha1 এবং tgt_size হল প্রত্যাশিত চূড়ান্ত SHA1 হ্যাশ এবং টার্গেট ফাইলের আকার। অবশিষ্ট আর্গুমেন্টগুলি অবশ্যই জোড়ায় আসবে: একটি SHA1 হ্যাশ (একটি 40-অক্ষরের হেক্স স্ট্রিং) এবং একটি ব্লব৷ সোর্স ফাইলের বর্তমান বিষয়বস্তুতে SHA1 দেওয়া থাকলে ব্লব হল প্যাচ প্রয়োগ করা।

প্যাচিংটি একটি নিরাপদ পদ্ধতিতে করা হয় যা লক্ষ্য ফাইলটির হয় কাঙ্খিত SHA1 হ্যাশ এবং আকারের গ্যারান্টি দেয়, বা এটি অস্পর্শ করা হয় - এটি একটি অপুনরুদ্ধারযোগ্য মধ্যবর্তী অবস্থায় ছেড়ে দেওয়া হবে না। প্যাচিংয়ের সময় প্রক্রিয়াটি বাধাগ্রস্ত হলে, লক্ষ্য ফাইলটি একটি মধ্যবর্তী অবস্থায় থাকতে পারে; ক্যাশে পার্টিশনে একটি অনুলিপি বিদ্যমান তাই আপডেটটি পুনরায় চালু করলে ফাইলটি সফলভাবে আপডেট করা যায়।

মেমরি টেকনোলজি ডিভাইস (MTD) পার্টিশনের বিষয়বস্তুকে ফাইল হিসেবে বিবেচনা করার জন্য বিশেষ সিনট্যাক্স সমর্থিত, যা বুটের মতো কাঁচা পার্টিশন প্যাচ করার অনুমতি দেয়। একটি MTD পার্টিশন পড়ার জন্য, আপনাকে অবশ্যই জানতে হবে যে আপনি কতটা ডেটা পড়তে চান কারণ পার্টিশনটিতে ফাইলের শেষের ধারণা নেই। প্রদত্ত পার্টিশনটি পড়ার জন্য আপনি ফাইলের নাম হিসাবে "MTD: partition : size_1 : sha1_1 : size_2 : sha1_2 " স্ট্রিং ব্যবহার করতে পারেন। আপনাকে অবশ্যই কমপক্ষে একটি (আকার, শা-১) জোড়া নির্দিষ্ট করতে হবে; আপনি যা পড়ার আশা করছেন তার জন্য একাধিক সম্ভাবনা থাকলে আপনি একাধিক নির্দিষ্ট করতে পারেন।

apply_patch_check( filename , sha1 [, sha1 , ...])
ফাইলের নামের বিষয়বস্তু বা ক্যাশে পার্টিশনে (যদি উপস্থিত থাকে) অস্থায়ী অনুলিপিতে প্রদত্ত sha1 মানের একটির সমান একটি SHA1 চেকসাম থাকলে তা সত্য দেখায়। sha1 মান 40 হেক্স ডিজিট হিসাবে নির্দিষ্ট করা হয়েছে। এই ফাংশনটি sha1_check(read_file( filename ), sha1 [, ...]) থেকে আলাদা যে এটি ক্যাশে পার্টিশন কপি চেক করতে জানে, তাই apply_patch_check() সফল হবে যদিও ফাইলটি একটি বাধাপ্রাপ্ত apply_patch() update দ্বারা দূষিত হয়েছিল।
apply_patch_space( bytes )
বাইনারি প্যাচ প্রয়োগ করার জন্য কমপক্ষে বাইট স্ক্র্যাচ স্পেস পাওয়া গেলে সত্য দেখায়।
concat( expr [, expr , ...])
প্রতিটি অভিব্যক্তিকে মূল্যায়ন করে এবং তাদের সংযুক্ত করে। + অপারেটর হল দুটি আর্গুমেন্টের বিশেষ ক্ষেত্রে এই ফাংশনের জন্য সিনট্যাক্টিক সুগার (তবে ফাংশন ফর্মটি যেকোনো সংখ্যক এক্সপ্রেশন নিতে পারে)। অভিব্যক্তি স্ট্রিং হতে হবে; এটা blobs একত্রিত করতে পারে না.
file_getprop( filename , key )
প্রদত্ত ফাইলের নামটি পড়ে, এটিকে একটি বৈশিষ্ট্য ফাইল হিসাবে ব্যাখ্যা করে (যেমন /system/build.prop ), এবং প্রদত্ত কীটির মান প্রদান করে, অথবা কী উপস্থিত না থাকলে খালি স্ট্রিংটি প্রদান করে।
format( fs_type , partition_type , location , fs_size , mount_point )
একটি প্রদত্ত পার্টিশন পুনরায় ফর্ম্যাট করে। সমর্থিত পার্টিশন প্রকার:
  • fs_type="yaffs2" এবং partition_type="MTD"। অবস্থান MTD পার্টিশনের নাম হতে হবে; একটি খালি yaffs2 ফাইল সিস্টেম সেখানে তৈরি করা হয়েছে। অবশিষ্ট আর্গুমেন্ট অব্যবহৃত.
  • fs_type="ext4" এবং partition_type="EMMC"। অবস্থান অবশ্যই পার্টিশনের জন্য ডিভাইস ফাইল হতে হবে। সেখানে একটি খালি ext4 ফাইল সিস্টেম তৈরি করা হয়েছে। fs_size শূন্য হলে, ফাইল-সিস্টেম সম্পূর্ণ পার্টিশন গ্রহণ করে। fs_size একটি ধনাত্মক সংখ্যা হলে, ফাইল সিস্টেম পার্টিশনের প্রথম fs_size বাইট নেয়। যদি fs_size একটি ঋণাত্মক সংখ্যা হয়, তাহলে ফাইল সিস্টেম শেষ |fs_size| ছাড়া বাকি সবই নেয়। পার্টিশনের বাইট।
  • fs_type="f2fs" এবং partition_type="EMMC"। অবস্থান অবশ্যই পার্টিশনের জন্য ডিভাইস ফাইল হতে হবে। fs_size একটি নন-নেতিবাচক সংখ্যা হতে হবে। fs_size শূন্য হলে, ফাইল-সিস্টেম সম্পূর্ণ পার্টিশন গ্রহণ করে। fs_size একটি ধনাত্মক সংখ্যা হলে, ফাইল সিস্টেম পার্টিশনের প্রথম fs_size বাইট নেয়।
  • mount_point ফাইল সিস্টেমের জন্য ভবিষ্যতের মাউন্ট পয়েন্ট হওয়া উচিত।
getprop( key )
সিস্টেম প্রপার্টি কী (বা খালি স্ট্রিং, যদি এটি সংজ্ঞায়িত না থাকে) এর মান প্রদান করে। পুনরুদ্ধার পার্টিশন দ্বারা সংজ্ঞায়িত সিস্টেম সম্পত্তি মান অগত্যা প্রধান সিস্টেমের মত একই নয়। এই ফাংশন পুনরুদ্ধারের মান প্রদান করে।
greater_than_int( a , b )
সত্য দেখায় যদি এবং শুধুমাত্র যদি (iff) a (একটি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা হয়) b এর থেকে বড় হয় (একটি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা হয়)।
ifelse( cond , e1 [, e2 ])
cond এর মূল্যায়ন করে, এবং যদি এটি সত্য হয় তাহলে e1 এর মান মূল্যায়ন করে এবং ফেরত দেয়, অন্যথায় এটি e2 (যদি উপস্থিত থাকে) মূল্যায়ন করে এবং প্রদান করে। "if... else... তারপর ... endif" কনস্ট্রাক্ট এই ফাংশনের জন্য সিনট্যাকটিক সুগার।
is_mounted( mount_point )
মাউন্ট_পয়েন্ট এ মাউন্ট করা একটি ফাইল সিস্টেম থাকলে সত্য দেখায়।
is_substring( needle , haystack )
রিটার্নস সত্য iff সুই খড়ের গাদা একটি সাবস্ট্রিং।
less_than_int( a , b )
সত্য দেখায় যদি a (একটি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা হয়) b থেকে কম হয় (একটি পূর্ণসংখ্যা হিসাবে ব্যাখ্যা করা হয়)।
mount( fs_type , partition_type , name , mount_point )
mount_pointfs_type এর একটি ফাইল সিস্টেম মাউন্ট করে। partition_type এর একটি হতে হবে:
  • এমটিডি নাম হল একটি MTD পার্টিশনের নাম (যেমন, সিস্টেম, ব্যবহারকারীর তথ্য; সম্পূর্ণ তালিকার জন্য ডিভাইসে /proc/mtd দেখুন)।
  • EMMC.

পুনরুদ্ধার ডিফল্টভাবে কোনো ফাইল সিস্টেম মাউন্ট করে না (এসডি কার্ড ব্যতীত যদি ব্যবহারকারী SD কার্ড থেকে একটি প্যাকেজ ম্যানুয়াল ইনস্টল করে থাকেন); আপনার স্ক্রিপ্ট পরিবর্তন করার জন্য প্রয়োজনীয় পার্টিশন মাউন্ট করতে হবে।

package_extract_dir( package_dir , dest_dir )
প্যাকেজ_ডির-এর নীচে থাকা প্যাকেজ থেকে সমস্ত ফাইল বের করে এবং dest_dir-এর নীচে সংশ্লিষ্ট গাছে লেখে। যে কোনো বিদ্যমান ফাইল ওভাররাইট করা হয়.
package_extract_file( package_file [, dest_file ])
আপডেট প্যাকেজ থেকে একটি একক প্যাকেজ_ফাইল বের করে এবং প্রয়োজনে বিদ্যমান ফাইলগুলিকে ওভাররাইট করে dest_file- এ লেখে। dest_file আর্গুমেন্ট ব্যতীত, একটি বাইনারি ব্লব হিসাবে প্যাকেজ ফাইলের বিষয়বস্তু ফেরত দেয়।
read_file( filename )
ফাইলের নাম পড়ে এবং একটি বাইনারি ব্লব হিসাবে এর বিষয়বস্তু ফেরত দেয়।
run_program( path [, arg , ...])
পাথ এ বাইনারি চালায়, arg s পাস করে। প্রোগ্রামের প্রস্থান অবস্থা ফেরত দেয়।
set_progress( frac )
সাম্প্রতিক show_progress() কল দ্বারা সংজ্ঞায়িত অংশের মধ্যে অগ্রগতি মিটারের অবস্থান সেট করে। frac অবশ্যই [0.0, 1.0] পরিসরে থাকতে হবে। অগ্রগতি মিটার কখনও পিছনে সরে না; এটা করার প্রচেষ্টা উপেক্ষা করা হয়.
sha1_check( blob [, sha1 ])
ব্লব আর্গুমেন্ট হল read_file() বা package_extract_file() এর এক-আর্গুমেন্ট ফর্ম দ্বারা প্রত্যাবর্তিত টাইপের একটি ব্লব। কোন sha1 আর্গুমেন্ট ছাড়াই, এই ফাংশনটি ব্লবের SHA1 হ্যাশ ফেরত দেয় (একটি 40-সংখ্যার হেক্স স্ট্রিং হিসাবে)। এক বা একাধিক sha1 আর্গুমেন্টের সাথে, এই ফাংশনটি SHA1 হ্যাশ রিটার্ন করে যদি এটি একটি আর্গুমেন্টের সমান হয়, অথবা খালি স্ট্রিং যদি তাদের কোনোটির সমান না হয়।
show_progress( frac , secs )
অগ্রগতি মিটারকে তার দৈর্ঘ্যের পরবর্তী ফ্র্যাকের উপর সেকেন্ড সেকেন্ডে অগ্রসর করে (একটি পূর্ণসংখ্যা হতে হবে)। সেকেন্ড 0 হতে পারে, এই ক্ষেত্রে মিটার স্বয়ংক্রিয়ভাবে উন্নত হয় না কিন্তু উপরে সংজ্ঞায়িত set_progress() ফাংশন ব্যবহার করে।
sleep( secs )
সেকেন্ড সেকেন্ডের জন্য ঘুমায় (একটি পূর্ণসংখ্যা হতে হবে)।
stdout( expr [, expr , ...])
প্রতিটি এক্সপ্রেশন মূল্যায়ন করে এবং এর মান stdout এ ডাম্প করে। ডিবাগ করার জন্য দরকারী।
tune2fs( device [, arg , …])
ডিভাইসে টিউনযোগ্য প্যারামিটার args সামঞ্জস্য করে।
ui_print([ text , ...])
সমস্ত টেক্সট আর্গুমেন্ট একত্রিত করে এবং ফলাফলটি UI-তে প্রিন্ট করে (যেখানে ব্যবহারকারী পাঠ্য প্রদর্শন চালু করলে এটি দৃশ্যমান হবে)।
unmount( mount_point )
mount_point এ মাউন্ট করা ফাইল সিস্টেম আনমাউন্ট করে।
wipe_block_device( block_dev , len )
প্রদত্ত ব্লক ডিভাইসের লেন বাইট মুছে দেয় block_dev
wipe_cache()
সফল ইনস্টলেশনের শেষে ক্যাশে পার্টিশনটি মুছে ফেলার কারণ।
write_raw_image( filename_or_blob , partition )
MTD পার্টিশনে filename_or_blob- এ ছবি লেখে। filename_or_blob একটি স্ট্রিং হতে পারে একটি স্থানীয় ফাইলের নামকরণ বা একটি ব্লব-মূল্যবান আর্গুমেন্ট যাতে লেখার জন্য ডেটা থাকে। OTA প্যাকেজ থেকে একটি পার্টিশনে একটি ফাইল অনুলিপি করতে, ব্যবহার করুন: write_raw_image(package_extract_file("zip_filename"), "partition_name");

দ্রষ্টব্য: Android 4.1 এর আগে, শুধুমাত্র ফাইলের নাম গৃহীত হত, তাই এটি সম্পন্ন করার জন্য প্রথমে ডেটাটিকে একটি অস্থায়ী স্থানীয় ফাইলে আনজিপ করতে হয়েছিল৷