① android 的apk包有什麼組成
1.APK文件簡介
APK是AndroidPackage的縮寫,即即Androidapplicationpackage文件或Android安裝包。每個要安裝到Android平台的應用都要被編譯打包為一個單獨的文件,後綴名為.apk。APK文件是用專業軟體eclipse編譯生成的文件包,其中包含了應用的二進制代碼、資源、配置文件等。通過將APK文件直接傳到Android手機中執行即可安裝。APK文件其實就是zip格式,但其擴展名被改為apk,用解壓軟體可以直接打開。通過WinRAR或UnZip解壓後,你會看到有幾個文件和文件夾。一個典型的APK文件通常有下列內容組成:AndroidManifest.xml程序全局配置文件classes.dexDalvik位元組碼
resources.arsc
編譯後的二進制資源文件
META-INF\該目錄下存放的是簽名信息res\
該目錄存放資源文件
assets\該目錄可以存放一些配置文件
下面對這些文件和目錄做些基本的注釋和介紹。•AndroidManifest.xml
該文件是每個應用程序都必須定義和包含的文件,它描述了應用程序的名字、版本、許可權、引用的庫文件等等信息。需要解包後才能加以閱讀。
•classes.dex文件
classes.dex是java源碼編譯後生成的java位元組碼文件。dex是DalvikVMexecutes的全稱,即AndroidDalvik執行程序,並非JavaME的位元組碼而是Dalvik位元組碼。•resources.arsc
編譯後的二進制資源文件。•META-INF目錄
META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全。在eclipse編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,並把計算結果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。比如拿到一個apk包後,如果想要替換裡面的一幅圖片,一段代碼,或一段版權信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染
和惡意修改增加了難度,有助於保護系統的安全。•res目錄
res目錄存放資源文件。包括圖片,字元串等等。解包後,幾乎所有可能的修改和編輯工作基本都在這里。•assets目錄
assets目錄可以存放一些配置文件,這些文件的內容在程序運行過程中可以通過相關的API獲得。
2.APK文件的解包和打包
APK文件是用專業軟體eclipse編譯生成的文件包。在網上可以找到許多軟體來對APK的內容進行反編譯,例如:可以通過AXMLPrinter2工具和命令:java-jarAXMLPrinter2.jarAndroidManifest.xml解開在apk中的AndroidManifest.xml。最近,業界有一個功能強大的解包打包工具包apktool,可以在Windows下用來方便快速地對APK文件進行解包和打包,給修改和編輯工作帶來許多方便。下面來介紹它的使用。
1)APKtool軟體包
APKtool軟體包有2個程序組成:apktool.jar和aapt.exe另外提供一個批處理文件:apktool.bat,其內容為:java-jar"%~dp0\apktool.jar"%1%2%3%4%5%6%7%8%9
運行apktools.jar需要java環境(1.6.0版本以上)。apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。2)APK文件的解包
下面以解開Contacts.apk為例。首先把Contacts.apk復制到當前工作目錄下(例:Test)。在DOS下打入命令apktooldContacts.apkABC
這里「d」表示要解碼。Contacts.apk是要解包的APK文件。ABC是子目錄名。所有解包的文件都會放在這個子目錄內。3)APK文件的打包在DOS下打入命令
apktoolbABCNew-Contacts.apk這里「b」表示要打包
ABC是子目錄名,是解包時產生的子目錄,用來存放所有解包後的和修改後的文件。
New-Contacts.apk是打包後產生的新的APK文件。4)Framework框架文件
在解開APK文件時,apktool需要框架文件(framework-res.apk)來解碼和打包。Apktool已經包含了標準的框架,所以在大多數APK文件的解包時,不需要另外提供框架文件。但是,某些製造商使用了他們自己的框架文件,為了解包,就不得不從手機中把框架文件(framework-res.apk)提取出來,然後安裝到計算機。安裝命令是:
apktoolifframework-res.apk
安裝後就會得到:~\apktool\framework\1.apk5)解包、解包和簽名批處理
在實際使用時,可能對多個APK文件進行處理。方便的做法是寫成批處理文件。打包和簽名可以一次完成。
解包批處理命令:
for%%iin(*.apk)dojava-jarapktool.jard%%i_%%i&&move_%%iModifying_Files&©%%iBackuped_Raw_Files&&@echoFile[%%i]unpackingprocessiscompleted!
打包和簽名批處理命令:
for/d%%iin(*)docd..&&java-jarapktool.jarbModifying_Files\%%i&&
java
-jar
signapk.jar
testkey.x509.pem
testkey.pk8
Modifying_Files\%%i\dist\*.apk%%i&&ren%%iNew%%i&&moveNew%%iModified_Signed_Files&&@echo%%iCompleterepackingandSigning
② apk安裝包內都有些什麼文件文件是什麼格式
包括的文件有:
classes.dex,為dex格式。
resources.arsc,為arsc格式。
AndroidManifest.xml,為xml格式。
其他xml格式文件
APK其實就是zip格式,可以通過解壓文件進行解壓,下圖中就是解壓後一個apk文件後的截圖:
③ 如何使用反編譯軟體破解android的布局文件
工具:
apktool,作用:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看
dex2jar,作用:將apk反編譯成java源碼(classes.dex轉化成jar文件)
jd-gui,作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件
反編譯流程:
一、apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件
下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下,
打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:apktool.bat d -f test.apk test
(命令中test.apk指的是要反編譯的APK文件全名,test為反編譯後資源文件存放的目錄名稱,即為:apktool.bat d -f [apk文件 ] [輸出文件夾])
獲取成功之後,發現在文件夾下多了個test文件,點擊便可以查看該應用的所有資源文件了。
如果你想將反編譯完的文件重新打包成apk,那你可以:輸入apktool.bat b test(你編譯出來文件夾)便可
之後在之前的test文件下便可以發現多了2個文件夾:
build
dist(裡面存放著打包出來的APK文件)
二、Apk反編譯得到Java源代碼
下載上述工具中的dex2jar和jd-gui ,解壓
將要反編譯的APK後綴名改為.rar或則 .zip,並解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar-0.0.9.15 文件夾內,
在命令行下定位到dex2jar.bat所在目錄,輸入dex2jar.bat classes.dex,
在改目錄下會生成一個classes_dex2jar.jar的文件,然後打開工具jd-gui文件夾里的jd-gui.exe,之後用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了