當前位置:首頁 » 編程軟體 » apk編譯時間

apk編譯時間

發布時間: 2023-10-25 14:55:20

1. Android APK編譯流程

apk 是Android Package的簡寫, 在平時的開發過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入

這樣Android Studio就會啟動構建流程,最終輸出一個我們想要的APK。

直達官網介紹

對於小白來說,上面一張圖已經可以解釋apk的構建過程了,不過對於Andoid開發者而言還需要了解一些更詳細的構建過程。

詳細的對應步驟 和 使用工具如下:

資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。

resources.arsc 是一個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內存地址,resources.arsc文件的作用是通過一樣的ID,根據不同的配置索引到最佳的資源顯示在UI中。

AIDL (Android Interface Definition Language), 是Android介面定義語言,是Android提供的IPC (Inter Process Communication,進程間通信)的一種獨特實現。
如果有aidl文件,這個階段會生成對應的Java介面文件。

R.java文件、工程源碼文件、aidl.java文件, 在這一步通過javac生成.class文件。

源碼.class文件和第三方jar或者library通過dx工具打包成dex文件

Android系統的Dalvik虛擬機的可執行文件為DEX格式,所以這里會將上一步中生成的.class文件 和 引用的第三方jar等過程中的.class 一起通過dx工具打包成dex文件

apkbuilder工具會將所有沒有編譯的資源、.arsc資源、.dex文件打包到一個完成apk文件中

tips:

apksigner工具會對未簽名的apk驗證簽名。得到一個簽名後的apk(signed.apk)

apksigner 是google 退出的V2簽名方式
Jarsigner 是之前一直使用的V1簽名方式

可以通過在命令行中輸入apksigner --help來獲取詳情信息,如果沒有特殊需求,使用下面命令即可完成簽名

release mode 下使用 aipalign進行align,即對簽名後的apk進行對齊處理

所謂對齊,主要過程是將APK包中所有的資源文件距離文件起始偏移為4位元組整數倍,這樣通過內存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內存的使用。

zipalign是一個android平台上整理APK文件的工具,它對apk中未壓縮的數據進行4位元組對齊,對齊後就可以使用mmap函數讀取文件,可以像讀取內存一樣對普通文件進行操作。如果沒有4位元組對齊,就必須顯式的讀取,這樣比較緩慢並且會耗費額外的內存。

參考文章:
Android-Studio配置構建
淺談Android打包流程
apk打包流程

END!

2. apk反編譯和重新打包

操作系統:Mac OS X
軟體:apktool

進入官網 https://ibotpeaches.github.io/Apktool/ ,點擊官網首頁的install( https://ibotpeaches.github.io/Apktool/install/ )進入安裝指南,裡面有Windows,Linux和Mac的安裝方法,不同的操作系統按不同的步驟來就可以了。

在終端輸入: apktool d xxx.apk ,我在反編譯時出現了以下錯誤:

看提示是無法寫入到這個目錄 /Users/xxx/Library/apktool/framework (xxx為電腦用戶名),那就在 /Users/xxx/Library 下新建apktool文件夾,並在apktool文件夾下再新建個framework文件夾,然後為了保險起見設置新建文件夾到許可權,在終端輸入: chmod -R 777 /Users/xxx/Library/apktool
接著再重新執行反編譯命令就可以成功了,在xxx.apk相同目錄下會出現反編譯後的文件夾。

在終端輸入編譯命令: apktool b xxx (xxx為剛才反編譯的文件夾),成功後會在xxx文件夾下的dist文件夾下生成打包好後的apk文件

現在打包好後的apk是沒有簽名的,所以無法安裝,現在給apk簽名

20000為時間,這個設置長點就好了,-keystore後面是簽名文件保存路徑。輸入命令按回車鍵會讓輸入密碼等信息,按提示輸入,不要忘了密碼,簽名時要用。
2.接著在終端輸入:

-keystore後面的為簽名文件的路徑,-signedjar後面為簽名好後apk的存放路徑,在這個後面的一個為需要簽名的pak的路徑,最後的android.keystore為證書的別名,如果不知道別名,可以在終端輸入: keytool -list -v -keystore /Users/xxx/Desktop/android.keystore 查看具體信息,裡面有別名。
這一步還要注意,簽名文件和需要簽名的apk要在同一目錄下。

3. 反編譯Android APK的具體步驟是怎樣的

1、配置好JAVA環境變數,下載:apktool 解壓的文件放在C盤根目錄的apktool文件夾里(apktool文件夾自己創立)
2打開命令提示符,(開始-運行-輸入cmd)
3輸入:cd \apktool 系統指令到了apktool文件夾(這里就是為什麼要把解壓的apktool解壓的文件放到apktool文件夾的原因,當然你也可以自命名文件夾的名稱,那麼比如arc,那麼指令就變成了:cd \arc 前提是你必須把apktool解壓的文件放到這個文件夾裡面)
4使用RE管理器把系統裡面的framework-res.apk 與 SystemUI.apk 提取出來放在apktool文件夾裡面

5 如果只是想反編譯framework-res.apk

輸入apktool if framework-res.apk(框架的建立)
6開始最重要的反編譯,輸入指令,apktool d framework-res.apk

(反編輯的APK一定要用沒換過圖片的,否則回編輯失敗)
7最後反編譯完成

修改代碼完成後,輸入代碼:apktool d framework-res 即可完成回編譯
8回編譯後的新的 apk在framework/dis 文件夾裡面
9如果反編譯的是系統文件,比如,SystemUI.apk 那麼必須進行掛載框架,反編譯時,必須敲入一下命令:(然後再重復7-9步驟)
apktool if framework-res.apk
apktool if SystemUI.apk

10對於三星手機(比如9100、9108/9100G),如果反編譯SystemUI.apk要敲入一下命令進行框架掛載apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
11回編譯的命令是 apktool b XXX (沒有後面的apk後綴)反編譯的命令是 apktool d xxx (有後面的apk)

4. 如何修改apk文件

如何修改apk文件[apk文件修改、圖標、美化、去廣告]完全教程
一、首先搭建jdk環境。
下載完後,點擊安裝。然後設置運行環境參數:
用滑鼠右擊「我的電腦」->屬性->高級->環境變數
系統變數->新建->變數名:JAVA_HOME 變數值:D:\Program Files\Java\jdk1.7.0(這是我的安裝路徑這個不是固定的,比如你安裝到C:\Program Files,就填C:\Program Files\Java\jdk1.7.0)
系統變數->編輯->變數名:Path 在變數值的最前面加上:%JAVA_HOME%\bin;(若已經有Path項,無須另外新建,直接在後面加,但需用;與前面已有的項分隔開)
系統變數->新建->變數名:CLASSPATH 變數值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
最後測試下環境變數是否設置成功
點開始菜單-運行-在這里輸入cmd-回車-輸入javac
1.如果出現如下信息:
用法:javac <選項> <源文件>
其中,可能的選項包括:
-g 生成所有調試信息
-g:none 不生成任何調試信息
-g:{lines,vars,source} 只生成某些調試信息
-nowarn 不生成任何警告
-verbose 輸出有關編譯器正在執行的操作的消息
-deprecation 輸出使用已過時的 API 的源位置
-classpath <路徑> 指定查找用戶類文件的位置
-cp <路徑> 指定查找用戶類文件的位置
-sourcepath <路徑> 指定查找輸入源文件的位置
-bootclasspath <路徑> 覆蓋引導類文件的位置
-extdirs <目錄> 覆蓋安裝的擴展目錄的位置
-endorseddirs <目錄> 覆蓋簽名的標准路徑的位置
-d <目錄> 指定存放生成的類文件的位置
-encoding <編碼> 指定源文件使用的字元編碼
-source <版本> 提供與指定版本的源兼容性
-target <版本> 生成特定 VM 版本的類文件
-version 版本信息
-help 輸出標准選項的提要
-X 輸出非標准選項的提要
-J<標志> 直接將 <標志> 傳遞給運行時系統
恭喜,你的Java環境變數配置成功了!
2.如果出現:
'javac' 不是內高坦部或外部命令,也不是可運行的程序
或批處理文件。
說明這Java環境變數配置出錯了,仔細檢查下吧!
二、下載APKTools工具包(裡麵包含:APKTools反編譯工具、轎念衫APKSign簽名工具)。下載Notepad代碼編輯器(可以修改smali和xml文件)。
在修改之前首先對APK文件內部結構有個了解:
AndroidManifest.xml 程序全局配置文件
classes.dex 這是Dalvik位元組碼
resources.arsc 編譯後的二進制資源文件
META-INF\ 該目錄下存放的是簽名信息
res\ 該目錄存放資源文件
assets\ 該目錄可以存放一些配置文件
對應這些文件和目錄做些基本的注釋和介紹:
AndroidManifest.xml
該文件是每個應用程序都必須定義和包含的文件,它描述了應用程序的名字、版本、許可權、引用的庫文件等等信息。需要解包後才能加以閱讀。
classes.dex文件
classes.dex是java源碼編譯後生成的java位元組碼文件。dex是Dalvik VM executes的全稱,即閉腔Android Dalvik執行程序,並非Java ME的位元組碼而是Dalvik位元組碼。
resources.arsc
編譯後的二進制資源文件。
META-INF目錄
META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全。在eclipse編譯生成一個apk包時,會對所有要打包的文件做一個校驗計算,並把計算結果放在META-INF目錄下。這就保證了apk包里的文件不能被隨意替換。比如拿到一個apk包後,如果想要替換裡面的一幅圖片,一段代碼, 或一段版權信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來就給病毒感染和惡意修改增加了難度,有助於保護系統的安全。
res目錄
res目錄存放資源文件。包括圖片,字元串等等。
解包後,幾乎所有可能的修改和編輯工作基本都在這里。
assets目錄
assets目錄可以存放一些配置文件,這些文件的內容在程序運行過程中可以通過相關的API獲得。
APK文件修改,首先要對APK文件解包(也就是反編譯),打開apktool.exe,如圖:

左邊APK反編譯區,選擇APK文件,選擇文件保存目錄,點反編譯APK按鈕,得到解包文件。
三、開始修改
1. 如果只是對圖像進行替換,沒有必要進行解包和打包。用WinRAR打開APK文件,直接做替換就可以了。但是,如果要對文字和其它非圖像類內容進行修改,那隻能通過解包了,改好後,再編譯回來,最後簽名才能放進手機安裝。下面介紹幾個對APK進行解包和打包的案例。
2. 漢化APK軟體
在res文件夾中,我們可以看到有很多values-***的文件夾,這就是語言包。values是英文語言包,values-zh是中國地區語言包(包含港澳台及內地),values-zh-rCN是中文簡體語言包(只包含內地),values-zh-rTW是中文繁體語言包(港澳台)。除此以外,其它地區的語言包都是精簡的對象,可以不過多了解。
在values文件夾里,通常有arrays.xml、strings.xml等語言文件,要作漢化就要對這些文件進行修改。有時也需要修改其它xml文件,一個一個地認真查看。改好後,打包,簽名,OK。
3. 修改桌面圖標名稱(標簽)
每一個APK文件都有一個「圖標標簽」。將APK程序安裝進手機後,在圖標下面顯示圖標標簽文字。這個圖標標簽的內容是可以修改的。在\res\values下找到strings.xml,修改其中的一行:
圖標標簽
例如:靜音啟動
同理,如果是窗口小插件,要修改widget_name。
注意:system/app下的apk不宜修改,因為要同時修改對應的odex文件。
改好後,打包,簽名,OK。
4. 去掉APK中的廣告
有很多APK應用都帶有廣告。為了去掉程序中的廣告,要修改main.xml文件與廣告有關的內容。在\res目錄下找到文件main.xml。通常在\layout目錄下,有時也被放在其它目錄下。甚至,有時不存在main.xml文件,廣告行被放在其它xml文件內。只能細心逐個文件進行查找。無論哪一種情況,查看其內容,你會看到有一項類似的命令如下。這就是廣告顯示。

將其改為:

可以看到,關鍵是要把fill_parent改為0.0dip,把wrap_content改為0.0dip,其它保持不變即可。這種改法就是不給廣告顯示空間,當然你就看不到廣告了。
改好後,打包,簽名,OK。
5. 修改顯示電池為1%精度
舉個例子比如在摩托羅拉XT502上,默認顯示只有7檔: 0%,10%,20%,40%,60%,80% 和100%。通過修改framework-res.apk,可以改變顯示精度。但是在一些手機上,實踐證明最好可能達到的現實精度只有10%。修改工作如下:
(1) 對framework-res.apk進行解包
(2) 修改和增加電池狀態圖標
(3) 修改文件stat_sys_battery.xml
(4) 修改文件stat_sys_battery_charge.xml
(5) 打包
(6) 提取stat_sys_battery.xml,stat_sys_battery_charge.xml,resources.arsc和一個圖標目錄:drawable-mdpi
(7) 重新裝配framework-res.apk
6. 狀態欄信息通知文字顏色修改
狀態欄信息通知文字顏色,是由framework-res.apk文件里res\values下的colors.xml文件控制的,所以我們只需修改colors.xml文件就可以了。另外,此文件還控制下拉欄的文字顏色,可以修改。
用文本編輯器打開colors.xml文件,找到
#ff000000
將這句修改為:#ffffffff
這狀態欄信息通知文字顏色由黑色改為白色。
改好後,打包,簽名,OK。

熱點內容
hp存儲擴容 發布:2024-11-17 23:29:16 瀏覽:569
在ftp中put表示什麼 發布:2024-11-17 23:29:12 瀏覽:383
mvc多文件上傳 發布:2024-11-17 23:13:56 瀏覽:155
玩游戲硬碟緩存32m 發布:2024-11-17 23:03:42 瀏覽:525
藍光存儲系統 發布:2024-11-17 23:03:41 瀏覽:436
地平線4提示配置低於最低怎麼辦 發布:2024-11-17 22:54:38 瀏覽:611
注冊銀行卡賬戶密碼填什麼 發布:2024-11-17 22:54:35 瀏覽:537
java壓縮上傳圖片 發布:2024-11-17 22:26:59 瀏覽:627
plc編程課件 發布:2024-11-17 22:18:23 瀏覽:469
我的世界伺服器信號一直在檢測 發布:2024-11-17 22:09:52 瀏覽:547