綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資訊] 適用不同 CPU 架構的卡刷包

[複製連結] 查看: 30334|回覆: 2|好評: 0
跳轉到指定樓層
樓主
monitorstudio | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2015-6-9 19:56

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
本帖最後由 monitorstudio 於 2015-6-10 19:40 編輯

  隨著 Android 系統越來越受市場歡迎,各種不同架構的機器相繼出現,32 位元 ARM 不再獨大,不只 X86,使用 x64、64 位元 ARM CPU 的機器也越來越多,而這對製作卡刷包的開發者而言當然是個困擾。


  難道我們真的要如此命苦的把所有架構的 update-binary compile 一次嗎?
  事實擺在眼前 (啊不是
  Google 又沒規定 update-binary 一定要是個 ELF-format binary
    
  shell script 也是可以的啦!
  這樣子就不會有架構不同的問題啦~ (而且個人認為 shell script 功能比 updater-script 強大,熟悉 Linux 的也可以無痛製作 update.zip


  要把 shell script 當作 update-binary 用,還是有一些需要注意的問題的:
    1. stdout 應該要 redirect 到 /proc/self/fd/$2
    2. 輸出到 stdout 前,每行行首要加上 "ui_print ",假裝這是 ui_print() 輸出的字串
       例:
  1. echo "ui_print My dxxk is larger than yours" > "/proc/self/fd/$2"
複製代碼


    3. update.zip 的路徑是 $3
    4. shell 路徑是 /sbin/sh (不是 /bin/sh)


        
  範例:
  1. #!/sbin/sh

  2. ##
  3. ## 環境設定
  4. ##

  5. PROG_NAME="$0"
  6. STDOUT_FD="/proc/self/fd/$2"
  7. PACKAGE_PATH="$3"

  8. ##
  9. ## 實做 update-binary 提供的內建函數
  10. ##

  11. # ui_print <OUTPUT_STRING>
  12. #          $1
  13. ui_print()
  14. {
  15.         OLD_IFS="$IFS"
  16.         IFS="
  17. "
  18.         for LINE in $1
  19.         do
  20.                 echo -ne "ui_print $LINE\n\n" > $STDOUT_FD
  21.         done
  22.         IFS="$OLD_IFS"
  23. }

  24. # set_perm <GRP> <USR> <MOD> <FILE_PATH>
  25. #          $1    $2    $3    $4
  26. set_perm()
  27. {
  28.         chown $1.$2 "$4"
  29.         chown $1:$2 "$4"
  30.         chmod $3    "$4"
  31. }

  32. # set_perm_recursive <GRP> <USR> <DIR_MOD> <FILE_MOD> <DIR_PATH>
  33. #                    $1    $2    $3        $4         $5
  34. set_perm_recursive()
  35. {
  36.         chown -R $1.$2 "$5"
  37.         chown -R $1:$2 "$5"
  38.         chmod -R $4    "$5"
  39.         chmod    $3    "$5"
  40. }

  41. # symlink <TARGET> <LINK>
  42. #         $1       $2
  43. symlink()
  44. {
  45.         ln -s "$1" "$2"
  46. }

  47. # format <FS_TYPE> EMMC <DEV_PATH> <MNT_POINT>
  48. #        $1        $2   $3         $4
  49. format()
  50. {
  51.         umount "$4"
  52.         if [ `which mkfs.$1` = "" ]; then
  53.                 abort "$PROG_NAME: mkfs.$1: command not found"
  54.         else
  55.                 mkfs.$1 "$3"
  56.         fi
  57. }

  58. # mount <FS_TYPE> <DEV_PATH> <MNT_POINT>
  59. #       $1        $2         $3
  60. mount()
  61. {
  62.         umount "$3"
  63.         mount -t "$1" "$2" "$3"
  64. }

  65. # unmount <MNT_POINT>
  66. #         $1
  67. unmount()
  68. {
  69.         umount "$1"
  70. }

  71. # package_extract_file <FILE_PATH> <OUTPUT_PATH>
  72. #                      $1          $2
  73. package_extract_file()
  74. {
  75.         unzip -o "$PACKAGE_PATH" "$1" -p > "$2"
  76. }

  77. # package_extract_dir <DIR_PATH> <OUTPUT_PATH>
  78. #                     $1         $2
  79. package_extract_dir()
  80. {
  81.         DIR_NAME=$(echo "$1" | sed "s/^(.*/)*(.*)/2/g")
  82.         mkdir -p "$2"
  83.         unzip -ou "$PACKAGE_PATH" "$1/*" -d "$2/TMP_DIR"
  84.         OLD_IFS="$IFS"
  85.         IFS="
  86. "
  87.         for FILE in $(ls "$2/TMP_DIR/$DIR_NAME")
  88.         do
  89.                 mv "$2/TMP_DIR/$DIR_NAME/$FILE" "$2/$FILE"
  90.         done
  91.         IFS="$OLD_IFS"
  92.         rm -rf "$2/TMP_DIR"
  93. }

  94. # getprop <PROP_NAME>
  95. #         $1
  96. getprop()
  97. {
  98.         for file in /system/build*.prop
  99.         do
  100.                 grep "$1" "$file" | sed "s/^.*=(.*)/1/g"
  101.         done
  102. }

  103. # abort <OUTPUT_STRING>
  104. #       $1
  105. abort()
  106. {
  107.         echo -ne "$1

  108. " > $STDOUT_FD
  109.         exit 0
  110. }

  111. ##
  112. ## Main program
  113. ##

  114. ui_print "Hello World!"
  115. ui_print "Here Is A Beautiful Wrold Of Programming"

  116. ui_print "Mounting /system..."
  117. mount ext4 /dev/block/mmcblk0p9 /system

  118. ui_print "Extracting files..."
  119. package_extract_dir "system" "/system"

  120. ui_print "Setting up permissions..."
  121. set_perm_recursive 0 0 0755 0755 /system/xbin
  122. set_perm 0 0 06755 /system/xbin/su

  123. ui_print "Unmounting /system..."
  124. unmount /system

  125. ui_print "All done"
  126. ui_print "reboot system now!"
複製代碼




 
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 2碎鑽 +1 幫助 +2 收起 理由
koalabear168 + 1 + 1 非常讃
magicparty + 1 聽說評分可以懷孕,你就讓我試試吧.

查看全部評分

收藏收藏4 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
police4 | 收聽TA | 只看該作者
發表於 2016-4-19 20:33
受益良多,繼續加油!!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
proshenn | 收聽TA | 只看該作者
發表於 2016-5-19 13:27
感謝細心教學 ㄧ直都以為刷包都ㄧ樣
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則