【手冊】如何編譯/修改三星手機Rom(四)

上一篇文章《【手冊】如何編譯/修改三星手機Rom(三)》介紹如何在三星Rom上做一些基本的修改,這篇文章接上一篇文章,介紹如何更新腳本語法和將外部功能添加到ROM。

本節是製作ROMS 最有趣的部分(反正我是這麼覺得),這節的重點是updater-script。接上文,我們進入到“工作/ META-INF / COM /Google/ Android”的目錄,在那裏你會看到兩個文件,即,“更新腳本”和“更新二進制”。接下來,我將首先向您介紹什麼是更新程序腳本,其本質是什麼,以及爲何它在ROM 開發中如此有益和有趣。

UPDATER-SCRIPT(第1部分)

因此,首先,這個updater-script有什麼用。它基本上是file ,它指示TWRP(或任何其他恢復)如何處理zip(您的ROM 或任何其他可刷新的zip )。沒有此功能,您將無法刷新設備上的任何內容(嗯,這是個謊言)。但是,在刷新ROM中,這非常重要。因此,現在讓我們瞭解一下updater-script語法 。在此之前,我需要告訴您一些事情,即恢復實際上是如何刷新zip 文件的(這就是我的假設)。所以基本上,當我們閃一個文件,恢復驗看更新二進制文件內“META-INF / COM /谷歌/機器人”中的zip 文件。然後,此更新二進制文件將告訴恢復;

zip 必須與STANDALONE INSTALLER或AROMA INSTALLER一起安裝。如果恢復開創出了拉鍊必須由一個獨立的安裝安裝程序,它就會進入到更新腳本,其中HAS是在同一個目錄中更新二進制和說,嘿,哥們,你能告訴我,是什麼我和這個壓縮 文件有關。

因此,updater-script基本上指示恢復如何處理zip 。因此,在瞭解了updater-script及其本質之後,現在讓我們討論一下可以編寫updater-script的語法或語言。

注意:-這不是更新程序指南,因此,我僅會讓您知道與ROM開發有關的重要關鍵字或其他此類內容。但是,這是我所學到的,而且還遠遠不夠,這遠遠不夠。此外,您必須充分注意即將出現的部分,這是必不可少的。最後,如果您有一些編程背景, 那麼它會很好,但是如果您沒有,那麼我將盡可能簡單,直接地;

學習更新腳本語法

因此,爲此,請首先使用Notepad ++打開updater-script ,您會驚訝地看到大量的線條。您會想,這到底是什麼意思。我要在這裏向您解釋大部分(如果不是全部)的內容。

1. ui_print(“”);

因此,我們首先從ui_print開始。因此,這就是將您放在雙引號(“”)中的任何內容都將直接打印到安裝程序 屏幕中。(對於我的編程專家來說,如果您瞭解C或C ++,就像cout <<“”)。
現在,讓我用一個示例更好地說明這一點,這裏是一段代碼及其輸出;

ui_print(“你好,我正在學習ROM 構建/修改”);

及其在recovery的輸出:

您好,我正在學習ROM的構建/修改

學到了嗎?現在讓我們進入下一個。

2. run_program(“ / sbin / busybox”,“ mount ”,“ / system”);

這基本上是修改後的命令。原始命令(run_program())用於運行Recovery中可用的許多內置程序。在進行ROM 開發時,將探索該命令的許多版本。現在,這個特定的命令做的是,它安裝了“ 系統”的分區設備。
現在,你們中的一些人可能會問,爲什麼我們需要安裝。基本上,如果不掛載特定分區,我們將無法修改(添加文件或將其刪除)。因此,我希望您現在明白爲什麼安裝如此重要。

在ROM 構建中,我們通常需要掛載系統,數據,緩存和dalvik。因此,您將始終在ROM 的任何updater-script開頭看到以下代碼集。

run_program("/sbin/busybox","mount","/system");
run_program("/sbin/busybox","mount","/data");
run_program("/sbin/busybox","mount","/cache");
run_program("/sbin/busybox","mount","/preload");

3. delete(“ / file_path”);
顧名思義,它會刪除設備上的文件。您需要在括號內用雙引號指定確切的文件目錄。 例如:

delete("/system/priv-app/SystemUI/SystemUI.apk";
// 上面的行(在recovery運行時)將刪除SystemUI.apk

4. delete_recursive(“ / directory);
顧名思義,該命令刪除目錄甚至格式化分區。它與 delete();命令的工作方式不同。delete_recursive()刪除目錄,而 delete()命令刪除一個文件(一行中的刪除太多)
,例如:

// 請注意,在以上命令中,recovery將刪除SystemUI文件夾及其內容。
delete_recursive("/system/priv-app/SystemUI";

此命令的另一個用途是格式化分區。如你所知,閃爍的一個ROM 基本上意味着,我們需要提取的內容系統中的文件夾中的zip 文件到系統分區您的設備。所以,每當我們閃現一個新的 ROM ,它始終是建議擦拭緩存,Dalvik的和系統。

// 下面的代碼將固定必要的分區
delete_recursive("/system");
delete_recursive("/cache");
delete_recursive("/data/dalvik-cache");

5. package_extract_dir(“ zip_directory”,“ / directory_on_phone”);
這是一個非常簡單且重要的命令。實際上,它所做的就是將zip 文件中的文件夾提取到設備上的另一個文件夾。讓我用一個例子來解釋你:

// 下面的命令本質上是做的是,它提取的系統文件夾中的ROM  壓縮到系統的目錄設備。
package_extract_dir("system","/system");  
{Notice in the / sign in the second parameter, and this is absent in the first parameter}

讓我們通過更多示例來了解這一點:

  • 將提取應用程序中的文件夾系統的內部ROM 壓縮到應用程序中的文件夾系統的目錄設備。
package_extract_dir("MODS/SystemUI","/system/app/SystemUI");
package_extract_dir("MODS/SecSettings2","/system/priv-app/SecSettings2");

6. symlink(“file_name1”, “file_name2”);

這是一段代碼,您將永遠不需要!但是我在這裏解釋這個是因爲有大量的更新腳本。因此,我們不會在此命令的更多細節上進行概述。現在,此命令基本上在兩個文件之間創建了符號鏈接。符號鏈接是文件具有一個主要名稱的位置,但是文件名錶中還有一個額外的條目,用於將所有訪問都引用回該主要名稱。

以下命令在“ /system/lib/libQjpeg.so”和“ /system/priv-app/SelectiveFocusViewer/lib/arm/libQjpeg.so”之間創建了符號鏈接。

symlink("/system/lib/libQjpeg.so", "/system/priv-app/SelectiveFocusViewer/lib/arm/libQjpeg.so");

7 .set_perm(uid,gid,Permissions,“ file_name_with_adress”);
這是一個非常有用的命令,因爲它有助於給予各種必要的權限文件中的Android。現在,基本上,特定文件需要權限,該文件可能需要一些特殊特權才能完成操作。例如,Android不允許系統上的任何文件格式化設備,僅當文件具有Android本身的必要權限時,纔可以進行格式化。所以,我希望您明白了爲什麼權限在Android中如此重要。

現在,讓我們瞭解上述命令的語法,這將有助於賦予各種Android 文件權限 ;

set_perm(uid, gid, permissions, "file_name_with_adress");

現在,該語句本身具有許多參數,如您所見。現在,我將限制自己僅向您解釋ROM 開發所需的內容。現在,“ UID”和“ GID”分別是UserID和GroupID。(它們很難解釋,超出了本指南的範圍,因此,我僅作簡要說明)。它們本質上是Android 權限的重要組成部分,通常是整數。不用擔心,我們將在下面的示例中瞭解其工作原理。

其次,權限類似於rw-rr或rwx-rw-rw。現在,如果您一直在使用Linux有一陣子,你知道這些意味着什麼。讓我們以rwx-rw-rw爲例來理解這一點:-
現在第一部分,即“ rwx”是賦予文件“所有者”的權限集,第二部分,即“ rw”是授予“組”的權限集,第三部分“ rw”是授予“全局”的權限。它們似乎有點不堪重負,但請耐心等待,就ROM 開發而言,它們幾乎沒有作用。

現在回到命令,權限,以整數形式使用。現在,我在這裏發佈了一個鏈接,如果您想知道這些權限如何轉換爲整數…(https:)。
本質上,您只需要兩個權限0644和0755。在這些權限中,總是將apk授予0644,而將始終給文件夾0755。(0644-> rw-rr和0755-> rwx-rx-rx)

// 以下命令實質上將許可權“ rwx-rwx-rwx”賦予文件“ /tmp/wipe.sh”。
set_perm(0, 0, 0777, "/tmp/wipe.sh");

8.set_perm_recursive(UID, GID, perm_directory, perm_files, “directory_name”);
現在,這與set_perm()非常相似,但是唯一的區別在於,它授予整個目錄及其內容的權限。讓我們看一個例子。

//以下命令爲“ / system / framework”目錄提供0775權限及其所有內容0644權限。(0775-> rwx-rwx-rx)。
set_perm_recursive(1000, 1000, 0775, 0644, "/system/framework");

小夥伴們,在本文中,我試圖介紹大多數基本的Edify Scripting命令,這是您在ROM 開發過程中永遠需要的。在下一篇文章中討論aroma-config之後,我將再討論一些命令。我發佈了一個鏈接,它將幫助您找到更多此類命令:-https : //forum.xda-developers.com/wik…cript_language。

現在,我們完成了Updater Script命令(第1部分)。在接下來的文章中,我們將討論Aroma-Config,然後,我們將介紹Updater Script Commands(第2部分)。因此,請繼續關注,在下一篇文章中見。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章