Advertisement
sniper_nuko

Deodex Zipalign やり直し

Jul 15th, 2014
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 11.39 KB | None | 0 0
  1. #!/bin/bash
  2. #
  3. # Deodex Zipalign Tool やり直し
  4.  
  5. clear
  6.  
  7. # toolsフォルダチェック
  8. if [ ! -e tools ]; then
  9.     echo "toolsフォルダがありません"
  10.     echo "終了します"
  11.     exit
  12. else
  13.     chmod -R 0755 tools
  14. fi
  15.  
  16. # Javaチェック
  17. check_java () {
  18.     clear
  19.     java -version
  20.     if [ $? -eq 0 ]; then
  21.         check_adb
  22.     elif [ $? -eq 1 ]; then
  23.         err_java
  24.     elif [ $? -eq 2 ]; then
  25.         err_java
  26.     else
  27.         err_unknown
  28.     fi
  29. }
  30.  
  31. # ADBチェック
  32. check_adb () {
  33.     ./tools/adb-linux version
  34.     if [ $? -eq 0 ]; then
  35.         check_api
  36.     elif [ $? -eq 1 ]; then
  37.         err_adb
  38.     elif [ $? -eq 2 ]; then
  39.         err_adb
  40.     else
  41.         err_unknown
  42.     fi
  43. }
  44.  
  45. # APIレベル取得
  46. check_api () {
  47.     clear
  48.     echo "端末接続待ち"
  49.     ./tools/adb-linux wait-for-device
  50.     echo "端末のAPIレベル取得"
  51.     api=`./tools/adb-linux shell getprop ro.build.version.sdk | sed 's/[^0-9]//g'`
  52.     echo "端末のAPIレベル $api"
  53.     # 取得したAPIレベルで条件分岐
  54.     if [ $api -ge 19 ]; then
  55.         adb_pull_kk
  56.     elif [ $api -lt 19 ]; then
  57.         adb_pull
  58.     else
  59.         err_unknown
  60.     fi
  61. }
  62.  
  63. # APIレベル19以上 端末から必要ファイル取得
  64. adb_pull_kk () {
  65.     clear
  66.     mkdir app framework priv-app work
  67.     echo "appを取得"
  68.     ./tools/adb-linux pull /system/app app
  69.     echo "frameworkを取得"
  70.     ./tools/adb-linux pull /system/framework framework
  71.     echo "priv-appを取得"
  72.     ./tools/adb-linux pull /system/priv-app priv-app
  73.     if [ -e framework/webview ]; then
  74.         rm -rf framework/webview
  75.     fi
  76.     # ファイル数チェック
  77.     aapk=`find app | grep -c ".apk"`
  78.     aodex=`find app | grep -c ".odex"`
  79.     fapk=`find framework | grep -c ".apk"`
  80.     fjar=`find framework | grep -c ".jar"`
  81.     fodex=`find framework | grep -c ".odex"`
  82.     papk=`find priv-app | grep -c ".apk"`
  83.     podex=`find priv-app | grep -c ".odex"`
  84.     echo "app apkファイル数:$aapk odexファイル数:$aodex"
  85.     echo "framework apkファイル数: $fapk jarファイル数: $fjar odexファイル数: $fodex"
  86.     echo "priv-app apkファイル数: $papk odexファイル数: $podex"
  87.     echo "取得しました"
  88.     echo "Enterkey押すと次に進みます"
  89.     read Wait
  90.     app_deodex
  91. }
  92.  
  93. # APIレベル18以下 端末から必要ファイル取得
  94. adb_pull () {
  95.     clear
  96.     mkdir app framework work
  97.     echo "appを取得"
  98.     ./tools/adb-linux pull /system/app app
  99.     echo "frameworkを取得"
  100.     ./tools/adb-linux pull /system/framework framework
  101.     if [ -e framework/webview ]; then
  102.         rm -rf framework/webview
  103.     fi
  104.     # ファイル数チェック
  105.     aapk=`find app | grep -c ".apk"`
  106.     aodex=`find app | grep -c ".odex"`
  107.     fapk=`find framework | grep -c ".apk"`
  108.     fjar=`find framework | grep -c ".jar"`
  109.     fodex=`find framework | grep -c ".odex"`
  110.     echo "app apkファイル数:$aapk odexファイル数:$aodex"
  111.     echo "framework apkファイル数: $fapk jarファイル数: $fjar odexファイル数: $fodex"
  112.     echo "取得しました"
  113.     echo "Enterkey押すと次に進みます"
  114.     read Wait
  115.     app_deodex
  116. }
  117.  
  118. # app 繰り返しdeodex
  119. app_deodex () {
  120.     clear
  121.     if [ $aodex != "0" ]; then
  122.         cd app
  123.         # odexリスト
  124.         aodexlist=`find *.odex | sed s/.odex//`
  125.         # odexリスト分deodex繰り返し処理
  126.         echo "app deodex開始"
  127.         for aodexfile in ${aodexlist[@]}
  128.         do
  129.             clear
  130.             echo "$aodexfile deodex中..."
  131.             ../tools/baksmali -d ../framework -x $aodexfile.odex -o ../work/$aodexfile
  132.             ../tools/smali ../work/$aodexfile -o ../work/classes.dex
  133.             ../tools/7z a -tzip $aodexfile.apk ../work/classes.dex
  134.             rm -rf ../work/$aodexfile $aodexfile.odex ../work/classes.dex
  135.             echo "$aodexfile deodex完"
  136.         done
  137.         cd ..
  138.         aapknew=`find app | grep -c ".apk"`
  139.         aodexnew=`find app | grep -c ".odex"`
  140.         echo "app apkファイル数: $aapknew odexファイル数: $aodexnew"
  141.         echo "appのdeodex完了しました"
  142.         echo "Enterkey押すと次に進みます"
  143.         read Wait
  144.         framework_deodex
  145.     else
  146.         echo "appにodexファイルがありません"
  147.         echo "Enterkey押すと次に進みます"
  148.         read Wait
  149.         framework_deodex
  150.     fi
  151. }
  152.  
  153. # framework 繰り返しdeodex
  154. framework_deodex () {
  155.     clear
  156.     if [ $fodex != "0" ]; then
  157.         cd framework
  158.         # XPERIA
  159.         if [ -e playstationcertified.odex ]; then
  160.             mv playstationcertified.odex com.playstation.playstationcertified.odex
  161.         fi
  162.         if [ -e cneapiclient_release.odex ]; then
  163.             mv cneapiclient_release.odex cneapiclient.odex
  164.         fi
  165.         if [ -e com.quicinc.cne_release.odex ]; then
  166.             mv com.quicinc.cne_release.odex com.quicinc.cne.odex
  167.         fi
  168.         # SemcGenericUxpResチェック
  169.         echo " framework deodex開始"
  170. #       if [ -e SemcGenericUxpRes.odex ]; then
  171.         fapklist=`find *.apk | sed s/.apk//`
  172.         for fapkfile in ${fapklist[@]}
  173.         do
  174.             clear
  175.             echo "$fapkfile deodex中..."
  176.             ../tools/baksmali -d ../framework -x $fapkfile.odex -o \
  177.             ../work/$fapkfile
  178.             ../tools/smali ../work/$fapkfile -o ../work/classes.dex
  179.             ../tools/7z a -tzip $fapkfile.apk ../work/classes.dex
  180.             rm -rf ../work/$fapkfile $fapkfile.odex ../work/classes.dex
  181.             echo "$fapkfile deodex完"
  182.         done
  183. #       fi
  184.         # odexリスト
  185.         fodexlist=`find *.odex | sed s/.odex//`
  186.         # odexリスト分deodex繰り返し処理
  187.         for fodexfile in ${fodexlist[@]}
  188.         do
  189.             clear
  190.             echo "$fodexfile deodex中..."
  191.             ../tools/baksmali -d ../framework -x $fodexfile.odex -o \
  192.             ../work/$fodexfile
  193.             ../tools/smali ../work/$fodexfile -o ../work/classes.dex
  194.             ../tools/7z a -tzip $fodexfile.jar ../work/classes.dex
  195.             rm -rf ../work/$fodexfile $fodexfile.odex ../work/classes.dex
  196.             echo "$fodexfile deodex完"
  197.         done
  198.         cd ..
  199.         fapknew=`find framework | grep -c ".apk"`
  200.         fjarnew=`find framework | grep -c ".jar"`
  201.         fodexnew=`find framework | grep -c ".odex"`
  202.         echo "framework apkファイル数: $fapknew jarファイル数: $fjarnew odexファイル数: $fodexnew"
  203.         echo "frameworkのdeodex完了しました"
  204.         echo "Enterkey押すと次に進みます"
  205.         read Wait
  206.         if [ $api -ge 19 ]; then
  207.             priv_app_deodex
  208.         else
  209.             app_zipalign
  210.         fi
  211.     else
  212.         echo "frameworkにodexファイルがありません"
  213.         echo "Enterkey押すと次に進みます"
  214.         read Wait
  215.         if [ $api -ge 19 ]; then
  216.             priv_app_deodex
  217.         else
  218.             app_zipalign
  219.         fi
  220.     fi
  221. }
  222.  
  223. # priv-app 繰り返しdeodex
  224. priv_app_deodex () {
  225.     clear
  226.     if [ $podex != "0" ]; then
  227.         cd priv-app
  228.         # odexリスト
  229.         podexlist=`find *.odex | sed s/.odex//`
  230.         # odexリスト分deodex繰り返し処理
  231.         echo "priv-app deodexk開始"
  232.         for podexfile in ${podexlist[@]}
  233.         do
  234.             clear
  235.             echo "$podexfile deodex中..."
  236.             ../tools/baksmali -d ../framework -x $podexfile.odex -o ../work/$podexfile
  237.             ../tools/smali ../work/$podexfile -o ../work/classes.dex
  238.             ../tools/7z a -tzip $podexfile.apk ../work/classes.dex
  239.             rm -rf ../work/$podexfile $podexfile.odex ../work/classes.dex
  240.             echo "$podexfile deodex完"
  241.         done
  242.         cd ..
  243.         papknew=`find priv-app | grep -c ".apk"`
  244.         podexnew=`find priv-app | grep -c ".odex"`
  245.         echo "priv-app apkファイル数: $papknew odexファイル数: $podexnew"
  246.         echo "priv-appのdeodex完了しました"
  247.         echo "Enterkey押すと次に進みます"
  248.         read Wait
  249.         app_zipalign
  250.     else
  251.         echo "priv-appにodexファイルがありません"
  252.         echo "Enterkey押すと次に進みます"
  253.         read Wait
  254.         app_zipalign
  255.     fi
  256. }
  257.  
  258. # app apk最適化
  259. app_zipalign () {
  260.     clear
  261.     azip=`find app | grep -c ".apk"`
  262.     if [ $azip != "0" ]; then
  263.         cd app
  264.         # apkリスト
  265.         aziplist=`find *.apk`
  266.         # apkリスト分繰り返し最適化処理
  267.         echo "最適化開始"
  268.         for azipfile in ${aziplist[@]}
  269.         do
  270.             ../tools/zipalign-linux 4 $azipfile $azipfile-ed
  271.             rm $azipfile
  272.             mv $azipfile-ed $azipfile
  273.             echo "$azipfile 最適化完"
  274.         done
  275.         cd ..
  276.         azipnew=`find app | grep -c ".apk"`
  277.         echo "app apkファイル数: $azipnew"
  278.         echo "appの最適化完了しました"
  279.         echo "Enterkey押すと次に進みます"
  280.         read Wait
  281.         framework_zipalign
  282.     else
  283.         echo "appに最適化するapkがありません"
  284.         echo "Enterkey押すと次に進みます"
  285.         read Wait
  286.         framework_zipalign
  287.     fi
  288. }
  289.  
  290. # framework apk最適化
  291. framework_zipalign () {
  292.     clear
  293.     fzip=`find framework | grep -c ".apk"`
  294.     if [ $fzip != "0" ]; then
  295.         cd framework
  296.         # apkリスト
  297.         fziplist=`find *.apk`
  298.         # apkリスト分繰り返し最適化処理
  299.         echo "最適化開始"
  300.         for fzipfile in ${fziplist[@]}
  301.         do
  302.             ../tools/zipalign-linux 4 $fzipfile $fzipfile-ed
  303.             rm $fzipfile
  304.             mv $fzipfile-ed $fzipfile
  305.             echo "$fzipfile 最適化完"
  306.         done
  307.         cd ..
  308.         fzipnew=`find framework | grep -c ".apk"`
  309.         echo "framework apkファイル数: $fzipnew"
  310.         echo "frameworkの最適化完了しました"
  311.         echo "Enterkey押すと次に進みます"
  312.         read Wait
  313.         if [ $api -ge 19 ]; then
  314.             priv_app_zipalign
  315.         else
  316.             mk_zip
  317.         fi
  318.     else
  319.         echo "frameworkに最適化するapkがありません"
  320.         echo "Enterkey押すと次に進みます"
  321.         read Wait
  322.         if [ $api -ge 19 ]; then
  323.             priv_app_zipalign
  324.         else
  325.             mk_zip
  326.         fi
  327.     fi
  328. }
  329.  
  330. # priv-app apk最適化
  331. priv_app_zipalign () {
  332.     clear
  333.     pzip=`find priv-app | grep -c ".apk"`
  334.     if [ $pzip != "0" ]; then
  335.         cd priv-app
  336.         # apkリスト
  337.         pziplist=`find *.apk`
  338.         # apkリスト分繰り返し最適化処理
  339.         echo "最適化開始"
  340.         for pzipfile in ${pziplist[@]}
  341.         do
  342.             ../tools/zipalign-linux 4 $pzipfile $pzipfile-ed
  343.             rm $pzipfile
  344.             mv $pzipfile-ed $pzipfile
  345.             echo "$pzipfile 最適化完"
  346.         done
  347.         cd ..
  348.         pzipnew=`find priv-app | grep -c ".apk"`
  349.         echo "priv-app apkファイル数: $pzipnew"
  350.         echo "priv-appの最適化完了しました"
  351.         echo "Enterkey押すと次に進みます"
  352.         read Wait
  353.         mk_zip_kk
  354.     else
  355.         echo "priv-appに最適化するapkがありません"
  356.         echo "Enterkey押すと次に進みます"
  357.         read Wait
  358.         mk_zip_kk
  359.     fi
  360. }
  361.  
  362. mk_zip_kk () {
  363.     clear
  364.     mkdir system
  365.     mv app system/
  366.     mv framework system/
  367.     mv priv-app system/
  368.     cp tools/kk.zip deodex.zip
  369.     create_zip
  370. }
  371.  
  372. mk_zip () {
  373.     clear
  374.     mkdir system
  375.     mv app system/
  376.     mv framework system/
  377.     cp tools/ot.zip deodex.zip
  378.     create_zip
  379. }
  380.  
  381. # zip作成
  382. create_zip () {
  383.     # build.propから端末名とビルド番号取得
  384.     ./tools/adb-linux pull /system/build.prop work/
  385.     devNAME=`grep ro.product.device work/build.prop | sed 's/ro.product.device=//g'`
  386.     devID=`grep ro.product.id work/build.prop | sed 's/ro.product.id=//g'`
  387.     zipNAME="$devNAME""_""$devID""_deodex"
  388.     echo "zipファイルに追加圧縮"
  389.     ./tools/7z a deodex.zip system
  390.     echo "zipファイルに署名"
  391.     ./tools/signapk deodex.zip $zipNAME.zip
  392.     rm -rf system work deodex.zip
  393.     echo "署名しました"
  394.     echo "$zipNAME.zipを端末のSDカードに転送して"
  395.     echo "CWM,TWRPでインストールして下さい"
  396.     echo "Enterkey押すと終了します"
  397.     read Wait
  398.     ./tools/adb-linux kill-server
  399. }
  400.  
  401. clear
  402. echo  ""
  403. echo  "*************************************************************"
  404. echo  "* Deodex Zipalign                                           *"
  405. echo  "*************************************************************"
  406. echo  ""
  407. echo  "adbバージョン:1.0.31"
  408. echo  "baksmali,smaliバージョン:2.0.3"
  409. echo
  410. echo  "1 - 開始"
  411. echo  "0 - 終了"
  412.  
  413. echo -e
  414. echo -e -n "番号選択 : "
  415. read opt
  416. case $opt in
  417.     1) check_java;;
  418.     0)
  419.         clear
  420.         exit ;;
  421. esac
  422.  
  423. # エラー処理
  424. err_java () {
  425.     clear
  426.     echo "Javaが実行できません"
  427.     echo "処理を中止します"
  428.     read Wait
  429.     exit
  430. }
  431.  
  432. err_adb () {
  433.     clear
  434.     echo "adbを実行できません"
  435.     echo "処理を中止します"
  436.     read Wait
  437.     exit
  438. }
  439.  
  440. err_unknown () {
  441.     clear
  442.     echo "不明なエラーが発生しました"
  443.     echo "処理を中止します"
  444.     read Wait
  445.     exit
  446. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement