2012年5月29日 星期二

[rom] pwn3d [momo11,907c,s9000

http://www.slatedroid.com/topic/31501-rom-pwn3d-momo11907cs9000/

Features

* usb bluetooth support
* full market access
* wifi location working
* zipaligned
* superuser
* build.prop tweaks
* more to come

You need CWM to flash updates, and you have two ways to achieve that.

The first one is flashing this rom using livesuite. This is version 1.0.1_1 which includes CWM recovery from xda's member _fun (I've just compiled it changing kernel, key mappings and .android_secure location).
With this version you may have a not working touchscreen if your tablet uses FT5X controller instead of Goodix; this can be fixed flashing any version >=1.2 through cwm

If you feel "brave" and are already on an ICS based rom you can just flash CWM image to nandg device.
Download this file, unzip it and push recovery.img file to /sdcard.
Then you have to execute this command, with root priviledges, on "Terminal Emulator" or "adb shell":

cat /sdcard/recovery.img > /dev/block/nandg
sync; sync; sync

Now CWM is installed on your device.

There is one more way to get CWM. You can use this versione of SausageScript (a big thank to fatesausage)

Instructions

* Upload flashable zip to MicroSD or internal storage.
* Boot into CWM keeping pressed VOL- (MENU) and POWER for 3 secs, than release POWER and after another sec release VOL-.
* Optional: do a nandroid backup
* Wipe data / Factory reset
* Flash zip
* Reboot


Changelog
V 1.4
- built from allwinner's sources (baseband 1.2)
- usb bluetooth dongle support: btusb and ath3k (I haven't tested it because my dongle uses btusb kernel module, testers needed). Google and see if your dongle is supported by one of these drivers
- added some kernel modules: xpad (for x360 gamepads), pl2303 (for usb gps receivers) and tun (for openvpn)
- replaced wifi kernel module with one built by me and without some power save functions (let's see if throughput and reception improves)
- hide ics status bar; read this thread to learn how to use it: link
compatibility zip for visture v3 and clones
compatibility zip for teclast a10t and clones

2012年5月28日 星期一

Android 啟動流程: Init.c 閱讀筆記

http://blog.csdn.net/melody_lu123/article/details/6764437


Android內核啟動後會執行初始化初始化,代碼在系統/核心/初始化中。

- 創建為/ dev的/ proc,/ SYS目錄,創建/ dev / PTS的目錄(偽終端)和/ dev /插座的,並分別安裝
- 創建空設備節點,創建kmsg設備節點,初始化log
- 解析init.rc
- 讀取儲存在的/ proc /命令行中的內核啟動參數:
- QEMU
- androidboot.console
- androidboot.mode
- 工廠
- 工廠
- androidboot.serialno
- androidboot.baseband
- androidboot.carrier
- androidboot.bootloader
- androidboot.hardware

- 讀取硬件信息,如果命令行中沒有指出則到:/ PROC / cupinfo的中找
- 解析/ init的“硬件信息”RC
- 早期初始化
- 設備初始化,冷啟動/ sys / class中
- 初始化屬性,從/ default.prop中讀取屬性。
- 如果ro.debuggable為1,則初始化組合鍵(keychord)監聽
- 打開控制台,如果命令行中沒有指定控制台則打開界面風格默認的的/ dev /控制台
- 讀取/initlogo.rle,是一張565 rle壓縮的位圖,如果成功則在/dev/fb0顯示Logo,如果失敗則將/dev/tty0設為TEXT模式並打開/dev/tty0,輸出文本的ANDROID字樣。
- 判斷cmdline 中的參數:
- 如果使用bootmode為
- 工廠,設置ro.factorytest值為1
- factory2,設置ro.factorytest值為2
- 其他的設ro.factorytest值為0
- 如果有serialno則設置ro.serialno,否則為“”
- 如果有bootmod則設置ro.bootmod,否則為“未知”
- 如果有基帶則設置ro.baseband,否則為“未知”
- 如果有運營商則設定ro.carrier,否則為“未知”
- 如果有引導程序則設置ro.bootloader,否則為“未知”
- 設置ro.hardware
- 設置ro.version

- 行動執行所有權的跡象觸發初始化
-開始property服務,讀取一些property文件,這一動作必須在前面那些ro.foo設置後做,以便/data/local.prop不能干預到他們。
- /系統/ build.prop的
- /系統/ default.prop的
- /數據/ local.prop的
- 在讀取界面風格默認的屬性後讀取presistent性質的,在/數據/屬性中

- 為SIGCHLD處理器建立信號機制
- 確認所有權完成了第一次啟動工作
- device_fd(設備初始化完成)
- property_set_fd(財產服務器啟動完成)
- signal_recv_fd(信號機制建立)

- 執行所有觸發標識為早期啟動的行動
- 行動引導標籤執行所有權觸發
- 基於當前屬性狀態,執行所有觸發標識為財產的行動
- 註冊輪詢事件:
- device_fd
- property_set_fd
- signal_recv_fd
- 如果有keychord,則註冊keychord_fd

- 如果支持BOOTCHART,則初始化BOOTCHART
- 更多的流通主入口:
- 重置輪詢事件的接受狀態,revents為0
- 查詢action隊列
- 重啟需要重啟的進程
- 圖書事件詢注輪
- 如果signal_recv_fd的revents的為POLLIN,則得到一個信號,獲取並處理
- 如果device_fd的revents的為POLLIN,呼叫handle_device_fd
- 如果property_fd的revents的為POLLIN,呼叫handle_property_set_fd
- 如果keychord_fd的revents的為POLLIN,呼叫handle_keychord

Android應用程序如何訪問/sys和/proc等目錄下的系統文件

http://blog.csdn.net/silvervi/article/details/6315548


Android 下應用程序不能直接 獲得 root 權限,因此如果需要修改 /sys  /proc 等目錄下的文件時,有以下兩種方法可以選擇:

  1. 通過 service 或虛擬設備的方法將使得應用程序臨時 獲得 root 權限
  2.  /sys  /proc 目錄下的文件修改訪問權限,使得它們能夠被程序訪問

對於方法 ,可以參看我後續會寫到的一篇文章《如何使 Android 應用程序獲得 root 權限》,也可以在網上搜索別的相關文章。

這裡講講方法 

為了理解方法 ,首先要知道 Android 上的權限機制。 Android 會為每個安裝在系統上的包( apk )配一個唯一的 linux userID ,名稱為 "app_" 加一個數字,比如 app_43 。這樣該應用程序的文件只對該用戶可見,也就是說,應用程序只能訪問相同 uid  gid 的文件。
另外,也可以通過 AndroidManifest.xml 修改應用程序的 uid 。如果將 android:sharedUserId 項的值改為其它apk  java package name ,則該應用程序和所指定的應用程序擁有相同的 uid ,可以訪問對方的文件。
通過 android:sharedUserId 還可以將應用程序提升為 system 權限。

有了上面的知識,這裡有三種方法來修改我們所要訪問的文件:
  1. 將文件改為 777 權限
  2. 將文件改為 apk  uid  gid
  3. 將文件修改為 system  uid ,同時將 apk 也提升為 system 權限

這三種方法都需要修改所要訪問系統文件的權限。要更改權限,在 init.rc 文件中添加相應的命令即可。下述命令就將 /dev/cpuctl/tasks 修改為 system  uid  gid ,並且將其權限更改為 777 
chown system system /dev/cpuctl/tasks
chmod 0777 /dev/cpuctl/tasks

修改 init.rc 該文件需要修改 ramdisk.img ,具體修改方法可以網上搜索,也可以參看這篇文章最後的附錄。或者在源代碼中直接修改 init.rc 文件然後編譯即可。

下面依次分析一下上面提到的三種修改訪問文件的方法。第一種方法是最簡單的,不過安全性不好,僅僅可以作為實驗使用,不推薦;第二種方法將系統文件文件的 uid 修改後,拓展性不好,並且我不能確定每次分配給apk  uid 是否相同。我這裡試了幾次,重新安裝後 apk  uid 都是相同的,不過沒有找到相關文章,所以不敢用。最後我這裡採用第三種方法實現。

1)首先修改 init.rc
chown system system /sys/bus/usb/devices/testfile

這樣每次啟動後,系統都會執行 init.rc 文件將 testfile  uid 修改為 system ,這樣 uid 同問 system 的程序就能夠訪問該文件了。

2) 其次將 apk 提升為 system 權限

 apk 提升為 system 權限需要目標系統中的簽名文件對 apk 進行簽名,因此這種方法僅適用於某個 rom ,不能用於所有 rom 
具體的提升辦法網上有很多,這裡不再多說,可以參考這兩篇文章:

至此,我們的目標就達成了。

 修改 ramdisk.img 的方法

在網上找到了一些修改 ramdisk.img 的方法,都有點問題,我這裡寫一下自己的流程。由於 ramdisk.img 是首先用 cpio 打包,再用 gzip 壓縮後的文件,因此在解壓和壓縮時都需要經歷這兩個步驟。

1)    mv ramdisk.img ramdisk.img.gz
2)    gunzip ramdisk.img.gz   #gunzip 解壓得到 ramdisk.gz
3)    cpio –iI ramdisk.gz   #  cpio 解壓上一步得到的文件
4)    修改 init.rc
5)    find. | cpio –o –H newc | gzip -9 > ramdisk.gz    #cpio 打包後, gzip 再壓縮
6)    mv ramdisk.gz ramdisk.img

2012年5月27日 星期日

NOVO7 TABLETS LATEST FIRMWARES & GUIDE

https://www.facebook.com/groups/177110959049953/doc/234229946671387/


LATEST FIRMWARES FOR AINOL NOVO7 ALLWINNER A10 TABLETS
=====================================================
Firmware Download Links Instruction:
=====================================================
IceCreamSandwich 4.0 for Ainol Novo7 Advanced:
Gingerbread 2.3 for Ainol Novo7 Advanced:
=====================================================
IceCreamSandwich 4.0 for Ainol Novo7 Advanced-II:
Advanced-II ICS-4.0.3_v1.1-Feiyu Patch: http://www.mediafire.com/?rymj48fn09wme
  • After installing Feiyu-Mod ICS 4.0.3_1.1-04.29 Expect to have White-Screen.
  • Wait at-least 3mins. and connect Tablet to PC and run Advanced-2 Patch.bat.
  • If you want to Re-Mapped your Home/Menu Buttons to Volume Buttons.
=====================================================
IceCreamSandwich 4.0 for Ainol Novo7 Elf:
Elf ICS-Feiyu TouchScreen Patch: http://www.mediafire.com/?9uayu318j39xq
  • Install via CWM Recovery (Feiyu-04.05.2012 has built-in CWM Recovery)
  • If you want to Re-Mapped your Home/Menu Buttons to Volume Buttons.
=====================================================
IceCreamSandwich 4.0 for Ainol Novo7 Aurora v1: -----February 2012 Batch
IceCreamSandwich 4.0 for Ainol Novo7 Aurora v2: -----March 2012 Batch
Aurora-v2 ICS-Feiyu TouchScreen Patch: http://www.mediafire.com/?fatay58f336b9
  • Install via CWM Recovery (Feiyu-Mod ROM has built-in CWM Recovery)
IceCreamSandwich 4.0 for Ainol Novo7 Aurora v3: -----April 2012 Batch
Aurora-v3 ICS-Feiyu TouchScreen Patch: http://www.mediafire.com/?xe2xajkxp6rcj
  • Install via CWM Recovery (Feiyu-Mod ROM has built-in CWM Recovery)
=====================================================
Feiyu-Mod ICS 4.0.3_1.1 Accelerometer Fix: http://www.mediafire.com/?19x41p5j9jb9zcy
  • Install via CWM Recovery (Feiyu-Mod ROM has built-in CWM Recovery)
Feiyu 4.0.3_1.1 Increase Int.Memory Patch: http://www.mediafire.com/?7fyol1lw96inbl8
  • Double-Click patch.exe and locate Feiyu_Mod ICS 4.0.3_1.1-04.29 img file.
  • After patching, re-flash the patched firmware to Tablet. 
=====================================================
=====================================================
FIRMWARE UPGRADING TOOLS AND DRIVERS
=====================================================
  • Extract into a Folder to PC and Double-Click LiveSuitPack.exe
  • Click "Continue Anyway" if ask to install ADB Driver.
  • If Device not found error appear while installing any Script.
  • Power-ON your Tablet > Go to System Settings > Developers Option.
  • Enable USB Debuging & Stay Awake. Connect Tablet to PC.
  • Open Device Manager and right-Click Android Device.
  • Install driver manually and Choose Downloaded Driver location.
=====================================================
=====================================================
FIRMWARE UPGRADING STEP BY STEP GUIDE
=====================================================
=====================================================
0. Download latest Firmware version for your Tablet and exract. There should be an .img file.
1. Rename the Firmware to "ICS_4.0.3" or "GB_2.3.4", and put it inside LiveSuitPack Folder.
2. Launch LiveSuit.exe (Take Note: LiveSuit.exe) and Follow the Steps below:
  • 1st pop-up window click YES.
  • 2nd pop-up window click FORMAT.
  • 3rd pop-up window click NEXT.
  • 4th pop-up window click YES.
  • 5th pop-up window locate your selected FW image file and click OPEN.
  • 6th pop-up window click FINISH.
3. For Novo7 Advanced, Hold-Press the +Volume Button and connect the Tablet to PC.
4. For Novo7 Advanced-II, Hold-Press the Back Button and connect the Tablet to PC.
5. For Novo7 Elf, Hold-Press the Menu Button and connect the Tablet to PC.
6. For Novo7 Aurora, Hold-Press the -Volume Button and connect the Tablet to PC.
7. As soon as you connect the USB Cable to PC while Hold-Press above Buttons,
8. Rapidly press the Power button 5 to 6 times without releasing the Button.
  • 7th pop-up window click: (YES = Complete Format) (NO = Re-Flash to same Firmware)
  • 8th pop-up window click: (YES = Complete Format)
9. You can now release the Buttons and wait for the upgrading to get finished.
  • 9th pop-up window click OK and Exit LiveSuit Program (Click Walking icon).
  • Disconnect your Tablet to PC and Power it up.
=====================================================
=====================================================
FIRMWARE UPGRADING FAILED?
Just Hold-Press Power button for 30seconds and Perform Upgrading again.
=====================================================
=====================================================
Gingerbread 2.3 After Finishing Firmware Upgrading:
1. Disconnect the tablet to PC and Power-ON your Tablet.
2. Go to Settings scroll down upto bottom and locate the [A] icon to change the Language.
3. Touch the very 1st option and choose English (US).
4. Go to Settings > Wireless and Networks > Wi-Fi Settings and Press Menu.
5. Click Advanced > Wi-Fi Sleep Policy and set it to NEVER.
6. Go to Settings > Applications > Development and turn-ON Stay Awake.
7. Go to Settings > Display > Screen Timeout and set it to 2mins above.
8. Go To Settings > Sound and disable Haptic Feedback (Vibrate).
9. Reboot your Tablet.
=====================================================
IceCreamSandwich 4.0 After Finishing Firmware Upgrading:
1. Disconnect the tablet to PC and Power-ON your Tablet.
2. Go to Settings scroll down upto bottom and locate the [A] icon to change the Language.
3. Touch the very 1st option and choose English (US).
4. Go to System Settings > Developers Option > Turn-ON USB Debugging & Stay Awake.
5. Go to System Settings > Display >Sleep and set it to 2mins above.
6. Go To Settings > Sound and set Vibrate to Never and Disable Vibrate on Touch.
7. Reboot your Tablet.
=====================================================
GOOGLE PLAY AND COMPLETE GOOGLE APPS SCRIPT:
CWM RECOVERY FOR ICS_4.0.3 NOVO7 TABLETS SCRIPT:
V6 SUPERCHARGER SCRIPT FOR ICE-CREAM-SANDWICH: 
=====================================================
Thanks... ivanz
=====================================================
Feel free to add Mediafire Mirror Link for Novo7 Tablets Latest Firmwares.

(Updater-Script)刷機腳本說明

http://bbs.anzhi.com/thread-4886647-1-1.html

這是Android系統來運行updater-scripts的Edify語言的基本介紹。
大部分的Edify命名都是函數,當調用這些函數結束的時候,會返回數據給腳本。當然,你也可以使用這些函數的返回值來確認成功與否,例如: 
ifelse(mount("yaffs2", "MTD", "system", "/system") == "system", ui_print("Successfully Mounted!"), ui_print("Mount Failed!"); 
這個命令會嘗試去掛載命名為“system”的“MTD”分區到“/system”。如果掛載成功,腳本會顯示“Successfully Mounted!” ,否則會顯示“Mount Failed!”。

現面是用在Edify的Updater-script中的函數例子: 

函數名稱: mount 
函數語法: mount(fs_type, partition_type, location, mount_point) 
參數詳解: fs_type--- --------------"yaffs2"或"ext4" 
partition_type----------"MTD"或"EMMC" 
location---------- -------分區(partition)或驅動器(device) 
mount_poin------------掛載文件系統的目標文件夾(target folder to mount FS) 
作用解釋:掛載一個文件系統到指定的掛載點
返回值:掛載成功則返回掛載點,失敗返回null 
函數示例: mount("MTD", "system", "/system");掛載system分區,設置返回指針"/system” 
        mount("vfat", "/dev/block/mmcblk1p2", "/system");掛載/dev/block/mmcblk1p2,返回指針"/system” 

函數名稱: is_mounted 
函數語法: is_mounted(mount_point ) 
參數詳解: mount_point-----------字符串,檢查是否已經掛載的掛載點
作用解釋:檢查文件系統是否掛載
返回值:掛載成功則返回掛載點,失敗返回null 
函數示例: 

函數名稱: unmount 
函數語法: unmount(mount_point) 
參數詳解: mount_point-----------字符串,要解除掛載的掛載點
作用解釋:解除文件系統掛載
返回值:解除掛載成功則返回掛載點,失敗返回null 
函數示例: unmount("/system");卸載/system分區

函數名稱: format 
函數語法: format(fs_type, partition_type, location) 
參數詳解: fs_type-----------------字符串,數據為"yaffs2"或"ext4" 
partition_type----------字符串, "MTD"或"EMMC" 
location-----------------字符串,分區(partition)或驅動器(device) 
作用解釋:格式化為指定的文件系統
函數示例: format("MTD ", "system");格式化system分區

函數名稱: delete 
函數語法: delete(file1, file2, ..., fileN) 
參數詳解:字符串,要刪除的文件
作用解釋:刪除一個文件。最少指定一個文件;多個文件可以做為多個參數指定
函數示例: delete("/data/zipalign.log");刪除文件/data/zipalign.log 

函數名稱: delete_recursive 
函數語法: delete_recursive(dir1, dir2,. ..,dirN) 
參數詳解:字符串,要遞歸刪除的目錄
作用解釋:刪除文件夾及其包含的所有內容。最少指定1個目錄;多個目錄可以做為多個參數指定
函數示例: delete_recursive ("/data/dalvik-cache");刪除文件夾/data/dalvik-cache 

函數名稱: show_progress 
函數語法: show_progress(frac, sec) 
參數詳解: frac------------ ----------進度完成數值
Sec----------------------總秒數
作用解釋:顯示在Recovery系統中進度
函數示例: show_progress(0.1, 10);show_progress下面的操作可能進行10s,完成後進度條前進0.1(也就是10%) 

函數名稱: set_progress 
函數語法: set_prograss(frac) 
參數詳解: frac------ ---------------進度數值
函數示例: 

函數名稱: package_extract_dir 
函數語法: package_extract_dir(package_path, destination_path) 
參數詳解: package_path----------字符串,升級包內要提取的目錄
        destination_path--------字符串,提取文件的目標目錄
作用解釋:提取升級包內目錄中的所有文件到指定的目標目錄
函數示例: package_extract_dir("system" , "/system");釋放ROM包裡system文件夾下所有文件和子文件夾至/system 

函數名稱: package_extract_file 
函數語法: package_extract_file(package_path)或package_extract_file(package_path, destination_path) 
參數詳解: package_path---- ------字符串,升級包內要提取的文件
destination_path-------字符串,提取文件的目標目錄
作用解釋:提取升級包內的單個文件到指定的目標目錄
函數示例: package_extract_file("my.zip", "/system");解壓ROM包裡的my.zip文件至/system 

函數名稱: file_getprop 
函數語法: file_getprop(file, key) 
參數詳解: file----- -----------------字符串,要檢查的文件名
        ​​Key----------------------字符串,返回數據中的文件的鍵名字
作用解釋:在格式"key"="value"的文件中取得文件屬性值
函數示例: 

函數名稱: symlink 
函數語法: symlink(target, src1, src2, ..., srcN) 
參數詳解: target-------------------字符串,符號鏈接的目標
        srcX ---------------- -----字符串,要創建的符號鏈接的目標點
作用解釋:在創建新的符號鏈接之前,要斷開已經存在的符號鏈接
函數示例: symlink("toolbox", "/system/bin/ ps");建立指向toolbox的符號鏈接/system/bin/ps 

函數名稱: set_perm 
函數語法: set_perm(uid, gid, mode, file1, file2, ..., fileN) 
參數詳解: uid---- ------------------用戶ID(user id) 
        Gid----------------------用戶組ID (group id) 
        Mode--------------------權限模式(permission mode) 
        fileX------------------ ---要設置許可的文件(file to set permission on) 
作用解釋:設置單個文件或一系列文件的權限,最少指定1個文件,前4個參數是必須的
函數示例: set_perm(0,2000, 0550, "system/etc/init.goldfish.sh");設置手機system中的etc/init.goldfish.sh的用戶為root,用戶組為shell,所有者以及所屬用戶組成員可以進行讀取和執行操作,其他用戶無操作權限)
這裡0代表用戶為root 
2000代表用戶組為shell 
我們來說明0550這組數據,這組數據的最後三位550,分別代表“所有者\組用戶\其他用戶”的權限,也就是我們在RE管理中“用戶\群組\其他”三行。我們以XXX來表示這三組權限,其中:
×=4讀的權限
×=2寫的權限
×=1執行的權限
我們必須首先了解用數字表示的屬性的含義:0表示沒有權限,1表示可執行權限,2表示可寫權限,4表示可讀權限,然後將其相加。所以數字屬性的格式應為3個從0到7的八進制數。
例如,如果想讓某個文件的屬主有"讀/寫"二種權限,需要把4(可讀)+2(可寫)=6(讀/寫)。若要rwx屬性則4+2+1=7;若要rw-屬性則4+2=6;若要rx屬性則4+1=5。
常用修改權限的命令:
Set_perm 0 0 0600 ××× (只有所有者有讀和寫的權限) 
Set_perm 0 0 0644 ××× (所有者有讀和寫的權限,組用戶只有讀的權限) 
Set_perm 0 0 0700 ××× (只有所有者有讀和寫以及執行的權限) 
Set_perm 0 0 0666 ××× (每個人都有讀和寫的權限) 
Set_perm 0 0 0777 ××× (每個人都有讀和寫以及執行的權限) 

函數名稱: set_perm_recursive 
函數語法: set_perm_recursive(uid, gid, dirmode, filemode, dir1, dir2, ...dirN) 
參數詳解: uid------------- ---------用戶ID(user id) 
        Gid----------------------用戶組ID(group id) 
        Dirmode---- ------------指定目錄內的目錄的權限
        Filemode---------------指定目錄內的文件的權限
        dirX------- --------------要設置權限的目標
作用解釋:設置單個目錄或一系列目錄的里面的所有文件的權限,最少指定1個目錄,5個參數都是必須的
函數示例: set_perm_recursive 0 0 0755 0644 SYSTEM:app;設置手機system/app文件夾及其中文件的用戶為root,用戶組為root,app文件夾權限為所有者可以進行讀、寫、執行操作,其他用戶可以進行讀取和執行操作,其中的文件的權限為所有者可以進行讀寫操作,其他用戶可以進行讀取操作

函數名稱: getprop 
函數語法: getprop(key) 
參數詳解: key----- ----------------字符串,想要係統返回的屬性
作用解釋:這個函數是用來返指定的屬性的值。它是用來從build.props文件中查詢手機的信息的。
函數示例: 

函數名稱: write_raw_image 
函數語法: write_raw_image(file, partition) 
參數詳解: file----------------------字符串,要讀取的Img源文件
        Partition-----------------字符串,要寫入Img文件的目標分區
作用解釋:這個函數是用來寫Img文件到分區
函數示例: write_raw_image( "/tmp/boot.img", "boot")將yaffs2格式的boot包直接寫入boot分區

函數名稱: apply_patch 
函數語法: apply_patch(srcfile, tgtfile, tgtsha1, tgtsize, sha1_1, patch_1, ..., sha1_x , patch1_x) 
參數詳解: srcfile-------------------字符串,要打補丁的源文件(要讀入的文件) 
        Tgtfile------ -------------字符串,補丁文件要寫入的目標文件
        tgtsha1-----------------字符串,寫入補丁文件的目標文件的sha1哈希值
sha1_x------------------字符串,要寫入目標文件的補丁數據的sha1哈希值patch1_x------- ---------字符串,實際上應用到目標文件的補丁
作用解釋:這個函數是用來打補丁到文件。
函數示例: 

函數名稱: apply_patch_check 
函數語法: apply_patch_check(file, sha1_1, ..., sha1_x) 
參數詳解: file----------------------字符串,要檢查的文件
        sha1_x------------------要檢查的哈希值
作用解釋:檢查文件是否已經被打補丁,或者能不能被打補丁。需要檢查“applypatch_check ”函數調用的源代碼。
函數示例: 

函數名稱: apply_patch_space 
函數語法: apply_patch_space(bytes) 
參數詳解: bytes-------------------檢查的字節的數字
作用解釋:檢查緩存來確定是否有足夠的空間來寫入補丁文件並返回一些數據。
函數示例: 

函數名稱: read_file 
函數語法: read_file(filename) 
參數詳解: filename----------------字符串,要讀取內容的文件名
​​作用解釋:這個函數返回文件的內容
函數示例: 

函數名稱: sha1_check 
函數語法: sha1_check(data)或sha1_check(data, sha1_hex, ..., sha1_hexN) 
參數詳解: data-------------- -------要計算sha1哈希值的文件的內容-必須是只讀文件格式
        sha1_hexN--------------文件數據要匹配的特定的十六進制sha1_hex哈希值字符串
作用解釋:如果只指定data參數,這個函數返回data參數的十六進制sha1_hex哈希值字符串。其他參數用來確認你檢查的文件是不是列表中的哈希值的一個。它返回匹配的哈希值,或者在沒有匹配任何哈希值時返回空。
函數示例: 

函數名稱: ui_print 
函數語法: ui_print(msg1, ..., msgN) 
參數詳解: msg----------------------字符串,要處理過程中輸出給用戶的信息
作用解釋:在腳本運行的時候,在控制台顯示的信息。最少要指定1個參數,你可以指定額外的msg參數,並且它們會連接起來輸了
函數示例: ui_print("It's ready!");屏幕打印It's ready! 

函數名稱: run_program 
函數語法: run_program(prog, arg1, .., argN) 
參數詳解: prog--------------------字符串,要執行的程序
        argN---------- ----------字符串,要執行的程序的運行參數
作用解釋:以指定的參執行程序
函數示例: run_program("/system/xbin/installbusybox.sh");運行installbusybox.sh腳本文件

函數名稱: ifelse 
函數語法: ifelse(condition, truecondition, falsecondition) 
參數詳解: condition----------------要運算的表達式
        Truecondition------ -----當值為True時執行的Edify腳本塊
        Falsecodnition-----------當值為False時執行的Edify腳本塊
作用解釋:這是If-then結構的Edify腳本語言。在真條件或非條件下語句可以是單條Edify命令或者腳本塊。腳本塊可以用圓括號來界定,用分號來隔開。
函數示例: 

函數名稱: abort 
函數語法: abort() 
參數詳解:沒有參數
作用解釋:中止腳本執行
函數示例: 

函數名稱: assert 
函數語法: assert(condition) 
參數詳解: condition------ ---------boolean 
作用解釋:如果condition參數的計算結果為False,則停止腳本執行,否則繼續執行腳本
函數示例: assert(package_extract_file("boot.img","/tmp/boot. img"),write_raw_image("/tmp/boot.img","boot"),delete("/tmp/boot.img")) 
執行package_extract_file,如果不返回錯誤則執行write_raw_image,如果write_raw_image不出錯則執行delete 文檔附件: