① 怎麼deodex系統軟體
一、什麼是odex文件? 簡單來說odex文件是由apk中的classes.dex提取出來,以提前運行,加快軟體的運行速度以及系統的開機速度。一般來說,odex化的軟體都是位於system/app以及system/framework目錄下的系統軟體或jar文件。通常,官方刷機包的系統軟體是odex化的,定製的刷機包是無odex文件的。 二、什麼是deodex?為什麼要deodex? deodex就是odex化的逆向過程,即將odex文件轉換為dex文件放回apk里。此舉能在一定程度上減少system空間的佔用,並能更加容易地修改軟體,例如修改框架文件(framework.jar等)。 三、如何deodex軟體? 前幾年有一款一鍵deodex軟體叫做xUltimare,但後來因為它的版本停滯不前和Android的更新導致deodex報錯越來越多,Android Kitchen也一樣。MIUI中的某些app這些軟體怎麼都不能合並odex,所以就必須手動合並了。 前提條件:電腦上安裝了java並且已經進行了環境變數。具體可以網路查找資料。除此之外,還需要谷歌官方提供的文件, 要下載smali-X.X.X.jar和baksmali-X.X.X.jar兩個文件(X.X.X表示谷歌官方提供軟體最新版本的版本號),倘若下載不了,可以使用本帖最後提供的smali-2.0.3.jar和baksmali-2.0.3.jar。為了在後文使用代碼方便,建議重命名將後面的版本號刪掉。 以下為步驟 ①將smali.jar、baksmali.jar、將進行轉換的odex文件放到同一目錄下。新建system文件夾,在裡面放入刷機包里的system/framework(此步是為了添加框架文件,其實只需要framework里的odex文件就足夠了,把整個文件夾放進去是出於方便考慮)。 ②打開cmd,並且用cd命令轉到剛才的目錄。 ③在cmd里輸入 java -jar baksmali.jar -d ./system/framework -x AppName.odex 復制代碼 註:此處AppName.odex是指待轉化的odex文件名稱。這一步就是解決報錯的關鍵,baksmali是不會自主識別目錄中的框架文件的,所以必須主動載入 若cmd未報錯,此時目錄下應當出現了一個名為out的文件夾 ④在cmd里再輸入 java -Xmx512M -jar smali.jar out -o classes.dex 復制代碼 無意外的話此時由odex文件生成的classes.dex已經在目錄下生成 ⑤接下來以winrar或其他壓縮軟體為打開方式,直接打開原odex文件所對應的apk文件 直接將classes.dex拖拽進apk就行了 ⑥簽名 此步驟是可選的,若是系統軟體,無需簽名,直接放入system/app使用即可(記得改許可權),大可不必簽名。 以上為deodex一個apk的全過程,合並jar也是一樣的方法。此方法除windows適用之外,linux也可參考。
② 如何對系統app進行deodex
1、下載Java SE Development Kit (JDK),在網路上搜索jdk即可搜索到,然後下載安裝。
③ 安卓手機system/app裡面,每個apk文件下面都有一個odex文件,那個文件是什麼東西
odex是安卓上的應用程序apk中提取出來的可運行文件,即將APK中的classes.dex文件通過dex優化過程將其優化生成一個·dex文件單獨存放,原APK中的classes.dex文件會保留。
所謂Odex,是由android軟體中的classes.dex生成的,Odex化即是把那個文件預先提取出來作用是能加快軟體載入速度和開機速度。不過Odex也有缺點,那就是有時候加刷東西會出現問題。
原本系統恢復出廠設置後第一次開機需要先提取classes.dex出來,而Odex化就是現在你提前把它提取出來了。系統啟動或者程序運行加快的原因也就在此。並且將dex變為odex還可以節省空間,因為提取後可以把apk內的dex刪除。如果不odex,那麼系統還是會自動提取dex,這時不僅apk內有dex,/data/dalvik-cache目錄下也有dex,雖然apk內的dex經過壓縮了,但是兩份dex的總體積已經大於一份odex的體積了。
Odex化後系統啟動和程序運行速度大大提高,穩定性不變。因此推薦做Odex化。
一般來說官方rom都是odex化的rom(含Odex文件),而定製rom大部分都是deodex化的(無odex文件)。兩者應該各有優點吧,貌似現在也沒有統一的說法。官方rom大部分每個apk對應一個.odex文件,而deodex化的rom裡面只有一個apk,把.odex轉換成classes.dex放到apk包裡面了。所以 odex rom的.apk+.odex=deodex化rom的1個.apk (簡單地來說,其實就上一個合並的過程)。
④ 安卓手機系統提取出來的apk和odex文件怎樣合並成可以安裝的apk安裝包
合並apk和odex我們需要先建立java環境,直接網路JDK下載安裝即可,需要用到的工具是smali,這是一個開源軟體,同樣可以直接網路下載即可。
操作步驟如下:
把下載的baksmali-1.2.4.jar和smali-1.2.4.jar這兩個文件與ROM裡面systemframework目錄下的文件一起放在一個文件夾里。
把ROM裡面的core.odex, ext.odex, framework.odex, android.policy.odex, services.odex這5個文件也放在此目錄。
分解odex文件:運行CMD,我們以aaa.apk和aaa.odex為例,在CMD中輸入java -jar baksmali-1.2.4.jar -x aaa.odex,然後會在工作目錄生成一個out的目錄,裡面是分解出來的一些文件。
把分解得到的文件變成classes.dex:在CMD中輸入java -Xmx512M -jar smali-1.2.4.jar out -o classes.dex,(注意其中的大小寫,java代碼嚴格區分大小寫)。我們得到了一個有用的classes.dex文件,用WinZip或者WinRAR打開aaa.apk,把這個classes.dex放進去。
最後再用signapk把最新得到的這個包含classes.dex的apk重新簽名一下 (可以使用Auto Sign簽名工具,網路下載即可),就生成一個可以安裝的單獨APK程序了。
⑤ 我有一些apk文件。用來做固件使用的。有哪位大神知道可以把d1x轉換為odex嗎
可以通過bindService的方式,先在Activity里實現一個ServiceConnection介面,並將該介面傳遞給bindService()方法,在ServiceConnection介面的onServiceConnected()方法
⑥ 如何修改framework下面的odex文件
android系統,一般分為工程版本和用戶版本。而一般用戶拿到的系統,都是用戶版,用戶版的直覺表面上的區別就是/system/framework和/system/app下的jar和apk文件都被odex化了。
對於/system/app下的odex,我們使用baksmali工具,就可以反編譯出smali文件,我們對些smali文件做修改之後,在目標機器上,使用dexopt-wrapper工具進行odex化之後,push到/system/app下就ok。但是,對於framework下面的文件,一般不能如此修改,修改之後,push到/system/framework下面的時候,一般都會把系統搞掛掉。如果framework下面文件不能修改,那麼玩android系統不是缺少很多樂趣?
[Toturial][Windows] How Editing The ODEX framework files?
這個方法需要改進一下就可以適合各種機型了。
framework下面的odex進行反編譯之後,在打包,push到機器上運行不起來主要有兩點原因。
第一點,就是framework下面的jar包,很多都是dalvik虛擬需要使用的BOOTCLASSPATH,android對此有特別的安全機制,所有我們進行odex化的時候,需要加入$BOOTCLASSPATH
第二點,就是簽名的問題,如果前面不對,那麼還是會啟動fail的,這個我們原有的odex文件頭就可以解決。
具體的方法,我們以下面一個例子,修改android.policy.odex為例子。
我們提取目標機器擾坦滲中的android.policy.odex和android.policy.jar的,然後使用baksmali,修改smali之後,使用smali工具之後,打包成classes.dex,然後替換到android.policy.jar中。
下面開始我們的正文緩脊方法:
1,在/data/local/tmp中建立一個zangcf_changed目錄和zangcf_original目錄
adb shell
cd /data/local/tmp
mkdir zangcf_changed
mkdir zangcf_original
exit
2,把原始文件和修改後的文件到目標機器
adb shell
adb push ./zangcf_changed/android.policy.jar /data/local/tmp/zangcf_changed/
adb push ./zangcf_original/android.policy.jar /data/local/tmp/zangcf_original/
adb push ./zangcf_original/android.policy.odex /data/local/tmp/zangcf_original/
exit
3, 准備執行環境
adb shell
su
mount -o rw,remount /system
chmod 777 /system/bin
chmod 777 /system/framework/
exit
exit
adb push ./dexopt-wrapper /system/bin
adb shell
su
chmod 777 /system/bin/dexopt-wrapper
exit
exit
4, 進行odex化
adb shell
su
cp /data/local/tmp/zangcf_changed/android.policy.jar /system/framework/android.policy.jar
dexopt-wrapper /system/framework/android.policy.jar /system/framework/new_android.policy.odex $BOOTCLASSPATH
cp -f /sdcard/信談amestris_original/android.policy.jar /system/framework
chmod 777 /system/framework/android.policy.odex
chmod 777 /system/framework/android.policy.jar
chmod 777 /system/framework/new_android.policy.odex
exit
5, 原文件的頭。
adb shell
su
busybox dd if=/system/framework/android.policy.odex of=/system/framework/new_android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
cp /system/framework/new_android.policy.odex /system/framework/android.policy.odex
exit
exit
6, 刪除臨時文件和修改文件屬性
adb shell
su
chmod 644 /system/framework/android.policy.odex
chown root.root /system/framework/android.policy.odex
rm /system/framework/new_android.policy.odex
exit
exit
7,ok,然後重啟
adb reboot
⑦ 前提:安卓手機。求將\system\app中apk安裝包odex化的工具和教程。。。。。各路大俠,小弟在此提前謝謝了
進入應用程序管理,然後強行關閉就可以了
⑧ 如何odex系統即分離apk和odex
想要odex系統首先必須先處理/system/framework/下面的jar文件,其次才是/system/app下面的apk和jar等。
換種說法:
如果framework下面的文件沒有odex化,都是單獨的jar文件,那麼系統中其他地方比如/system/app下即使存在odex文件也應該是無效的。
如果framework下的文件已經odex化,那麼其他地方的apk和jar可以odex化也可以不odex都可以正常運行。
0901的包初始是deodex的,也就是所有apk都是合並好的沒有odex文件存在。想要odex系統可以執行那個包解壓後的odex.bat來達到目的。
odex.bat主要是調用/system/xbin/odex_framework和/system/xbin/odex_app這兩個腳本。(直接在手機端用終端模擬器來執行這兩個腳本應該也行,也就是說odex化的過程應該可以不依賴電腦)
odex_framework和odex_app要用到busybox、dexopt-wrapper、zip、zipalign等命令,因此需要事先將這些工具准備妥當。(0901包裡面這些第三方的命令行工具基本都在/system/xbin目錄下,busybox最好使用相關軟體來安裝,其他命令復制好後改好許可權就行。)
下面直接看/system/xbin/odex_framework這個腳本,它負責odex化framework下的文件,內容如下,###開頭的行都是我寫的說明:
#!/system/bin/sh
### 掛載system分區為可讀寫,並將目錄切換到/system/framework。
busybox mount -o rw,remount /system
cd /system/framework
### dexopt-wrapper這個命令直接用來生成odex文件。比如dexopt-wrapper /system/framework/core.jar /system/framework/core.odex就是由core.jar生成core.odex。
### 另外framework下面的文件odex有順序要求,具體的順序可見手機根目錄下的init.rc這個文件,在這個init.rc裡面查找BOOTCLASSPATH這行,這行後面會列出一些jar文件,那麼我們這里odex的順序就要照著那個列出的順序來進行。各機型各版本這個順序可能有區別,因此這里必須照實際情況排好順序,否則生成了odex也多半是啟動不了的。
### 一行處理一個文件,依次按順序執行。
dexopt-wrapper /system/framework/core.jar /system/framework/core.odex
dexopt-wrapper /system/framework/core-junit.jar /system/framework/core-junit.odex
dexopt-wrapper /system/framework/bouncycastle.jar /system/framework/bouncycastle.odex
dexopt-wrapper /system/framework/ext.jar /system/framework/ext.odex
dexopt-wrapper /system/framework/framework.jar /system/framework/framework.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex
dexopt-wrapper /system/framework/services.jar /system/framework/services.odex
dexopt-wrapper /system/framework/apache-xml.jar /system/framework/apache-xml.odex
dexopt-wrapper /system/framework/filterfw.jar /system/framework/filterfw.odex
### 需要按順序處理的文件處理完成後,其他的文件就不用在意順序了,直接用個for語句來統一處理。
for j in /system/framework/*.jar
do
odexj=`echo $j | sed -e 's/.jar/.odex/g'`
if [ -f $odexj ]; then
echo "++++++++++++"
echo "$odexj already exists, skipping"
echo "++++++++++++"
else
echo "dexopt-wrapper $j $odex"
dexopt-wrapper $j $odexj
fi
done
### 到此時所有的文件都已經生成了相應的odex文件,下面的步驟是刪除掉原始jar文件裡面的classes.dex以及對文件zipalign優化,這一步應該不是必須的但推薦也處理一下。同樣也是for語句來統一處理。zip命令負責刪除classes.dex打包,zipalign命令負責zipalign優化。
for filename in `find . -name '*.jar'`
do
# step 1 - did we succesfully odex?
if [ -f `echo $filename | sed 's/\(.*\.\)jar/\1odex/'` ]
then
# step 2 - remove the classes.dex from the jar
zip -d $filename classes.dex
# step 3 - zipalign, just in case
zipalign -f -v 4 $filename $filename.new
mv $filename.new $filename
fi
done
### 單獨對framework-res.apk進行zipalign優化,因為上面的語句只是針對jar文件。並且framework-res.apk中沒有classes.dex文件因此它不需要odex處理。
zipalign -f -v 4 framework-res.apk framework-res.apk.new
mv framework-res.apk.new framework-res.apk
### 改好framework下面所有文件的許可權。
chmod 644 /system/framework/*
### 清空系統的dalvik緩存然後退出腳本。
busybox rm -f /data/dalvik-cache/*
exit 0
通過上面的腳本framework下的文件都已經odex化,接下來可以處理/system/app下面的文件,當然不處理app下的文件應該也是可以正常運行的。
odex_app就是處理app下的文件的,格式與odex_framework類似並且要簡單些,因為裡面的文件都沒有順序的要求。
⑨ 如何做apk odex
編譯開源GIT上的build/tools /dexpreopt/dexopt-wrapper這個,使用dexopt-wrapper即舉局可,操作步驟: 將dexopt-wrapper用RE管理器放到手機的/data/local目錄中,並改許可權為rwxr-xr-x,在電腦使用adb shell執行linux命令行,使用cd命令進入/data/local目錄,命令如下:
adb shell(回車)
su(回車)
cd /data/local(回車)
./dexopt-wrapper ***.apk ***.odex(回車)***代表你要做的軟體名,前後要絕對一致。
或者手機端用終端(推薦):
su(回車)
cd /data/local(回車)伏困
./dexopt-wrapper ***.apk ***.odex(回車)***代缺答念表你要做的軟體名,前後要絕對一致。
成功之後將apk和odex文件都拷貝到system\app文件夾下替換就可以了。
⑩ apk文件怎樣生成odex文件
首先,下載軟體"幸運破解器",安裝。
打開。Tip:下載安裝後注意對比一下應用包名。
以下是它專的主界面。屬
點擊你想odex化的程序,
出現提示框,點擊"打開破解菜單"
點擊"移除許可驗證"
再點擊「自動模式」
點擊"移除dalvik緩存"
(節省空間,odex會在data/app/下生成與應用包同名的odex文件,若不清除davlik緩存data/dalvik-cache/下有dex緩存,占存儲空間)
點擊確定就行了,然後等待它提示操作完成。一般情況下都是提示失敗,不用管它。返回就行了。這樣程序就被odex化了。
但這時程序apk文件中還有classes.dex文件,占據了較多存儲空間。
如需刪除該dex文件較為麻煩,但也並不是不行。
簡略說一下:
1.解壓程序到某個臨時目錄。
2.刪除dex文件。
3.壓縮該文件夾。(要用re壓縮。別的壓縮軟體目前我還沒試成功過。)
4.簽名。(用zip signer或者dalvik位元組碼編輯器簽名。我覺得不簽名應該也是可以的。但沒試過。)
5.注意事項:一定要保持apk文件與odex文件主文件名一致。