綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教程] apk和odex的合併,讓軟體成為完整的apk包以便反編譯

  [複製連結] 查看: 71631|回覆: 127|好評: 16
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2012-3-4 15:37

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

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

x
       Android的ROM中正常的軟體都是apk內包含有一個classes.dex,但也有有時會沒有(比如MIUI或有些HTC的ROM),卻有很多odex文件,相對於APK中的dex文件而言這個odex有什麼作用呢?
       首先分析一下apk文件的安裝過程。安裝apk包,會在/data/app目錄複製一份安裝包,在/data/dalvikvm-cache目錄放一個解壓出來的classes.dex,如果有so文件,還要複製到對應的文件夾。但是,如果把一個apk分解為apk+odex,情況就大大不同了,這時完全可以把apk內的lib文件夾和classes.dex文件刪掉,然後簽名,配合odex一起使用,當然so文件也不能丟。所以,
            正常的包占的的空間=原包+classes.dex+so;
            分解後的包占的空間=分解包+odex+so。
       這樣做可以使其廠商保證一定的反盜版,因為沒有沒有dex文件的 apk是無法正常安裝的,而廠商直接將odex和不完整的apk文件放到手機rom固化到/system/bin中可以讓一般用戶無法正常導出使用,同時apk帶odex不僅節約空間,而且還能優化加載速度。
       而那個 apk 是殘缺的,裡面沒有 classes.dex 文件,殘缺的 apk 是裝不了的,只能把這個 apk 跟 odex 合併成一個完整的 apk 才能安裝。

下面介紹合併的方法:

需要的工具:
1.smali-1.2.6.jar 和 baksmali-1.2.6.jar
2.還需要這個 apk 所在的 rom 裡面的一些 jar 文件,都在 /system/framework 裡面: core.jar, ext. jar, framework. jar, Android.policy. jar, services. jar 。當然,這五個是最基本的,有可能還不夠,最好將整個framework文件夾裡面的都放這裡(不然可能會出異常)。

總共分四步:
1.   首先你的電腦要配置好java環境,不懂的自己Google。

2.把下載好的 smali-1.2.6.jar 和 baksmali-1.2.6.jar ,還有 rom 裡面摳出來的 jar ,放到工作目錄,然後 apk 和 odex 也放到一起。

3.分解 odex 文件為 class 文件。
命令: java -jar baksmali-1.2.6.jar -x <a.odex>
<a.odex> 處是你要分解的 odex 文件的名字(沒有角括號),命令完成之後,會生成一個 out 文件夾,裡面就是所有的 class 文件。

4.將 class 生成為 classes.dex 文件。
命令: java -Xmx512M -jar smali-1.2.6.jar out -o classes.dex
這一步應該不會有什麼問題,然後會生成 classes.dex 文件。

5.把 classes.dex 放入 apk 裡面。
最後這一步最簡單了,用解壓縮軟體開啟 apk ,然後把千辛萬苦生成的 classes.dex 拖進去替換原來的dex文件就 OK 了。這個 apk 就能用了。如果想給他重新簽個名的話,去找個 Auto Sign 簽名工具簽署一下就行。

tool.rar (2.12 MB, 下載次數: 905)
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)

評分

參與人數 34碎鑽 +19 經驗 +3 幫助 +38 收起 理由
asusjock + 1 + 1 非常讃
david082321 + 1 + 1 + 1 很給力!
kelvin6h0658 + 1 + 1 + 1 讚一個!
bland + 1 偶像,看完你的內容,讓我找到了活著的意義.
lspss93012 + 1 + 1 非常讚
v66642 + 1 + 1 非常讚
prograit + 1 + 1 非常讚
enker2001 + 1 老衲來幫這篇文章開光
jesson2 + 1
taium + 1 好內容。朕有賞,還不謝主隆恩.

查看全部評分

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

使用道具 舉報

沙發
apocaho | 收聽TA | 只看該作者
發表於 2012-3-7 21:50
看不太懂~ 我看要多多爬文了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
c3910chad | 收聽TA | 只看該作者
發表於 2012-3-17 15:36
me→
我→
要多學習了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
steve0000 | 收聽TA | 只看該作者
發表於 2012-3-25 22:42
好深呀  要好好學習~~~
謝謝分享~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
mchsieh | 收聽TA | 只看該作者
發表於 2012-3-31 14:19
剛好有用到~
謝謝分享~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
熱鬥小狐 | 收聽TA | 只看該作者
發表於 2012-4-4 13:34
剛好有用到~
謝謝分享~
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

7
ass21766h | 收聽TA | 只看該作者
發表於 2012-4-14 22:57
本帖最後由 ass21766h 於 2012-4-14 22:59 編輯

補充 先在c 曹創資料夾叫odex  把所需的檔多丟進去 當然也可改檔名要英文

進入cmd命令下: cd\odex  按確認 在打上命令語法java -jar baksmali-1.2.6.jar -x (要分解的odex檔名)
以上..~~
三星閉源係統很會出錯-  -

htc比較沒問題....
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

8
freeshadow | 收聽TA | 只看該作者
發表於 2012-4-18 09:54
剛好有一些問題,試試!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

9
lu8181 | 收聽TA | 只看該作者
發表於 2012-4-30 18:46
感謝大大用心的教學
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

10
lu8181 | 收聽TA | 只看該作者
發表於 2012-4-30 18:47
好複雜看來要多費心學習囉
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

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

本版積分規則