Android應(yīng)用程序的編譯流程及使用Ant編譯項(xiàng)目的攻略
Android 工程構(gòu)建的持續(xù)集成,需要搭建一套編譯和打包自動(dòng)化流程,比如建立每日構(gòu)建系統(tǒng)、自動(dòng)生成發(fā)布文件等等。這些都需要我們對(duì)Android工程的編譯和打包有一個(gè)比較深入的理解,例如知道它的每一步都做了什么,需要什么環(huán)境和工具,輸入和輸出是什么,等等。
首先,假定你的系統(tǒng)(Windows、Linux、Mac OS都行,本文默認(rèn)使用Linux系統(tǒng)來舉例子,但在 Windows中幾乎沒有什么差別)已經(jīng)安裝了JDK和Android SDK。
我們重點(diǎn)關(guān)心的是:
(1)這個(gè)過程的輸入是什么?
(2)這個(gè)過程的輸出是什么?
(3)這個(gè)過程使用了什么工具?
至于使用什么參數(shù),可以自己去看對(duì)應(yīng)命令的幫助文件,或者在網(wǎng)上搜索,這不是本文的重點(diǎn)。
提前列出下列步驟中需要用到的工具,如下表:
第一步:打包資源文件,生成R.java文件
【輸入】Resource文件(就是工程中res中的文件)、Assets文件(相當(dāng)于另外一種資源,這種資源Android系統(tǒng)并不像對(duì)res中的文件那樣優(yōu)化它)、AndroidManifest.xml文件(包名就是從這里讀取的,因?yàn)樯蒖.java文件需要包名)、Android基礎(chǔ)類庫(kù)(Android.jar文件)
【輸出】打包好的資源(一般在Android工程的bin目錄可以看到一個(gè)叫resources.ap_的文件就是它了)、R.java文件(在gen目錄中,大家應(yīng)該很熟悉了)
【工具】aapt工具,它的路徑在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows系統(tǒng),按慣例路徑應(yīng)該這樣寫:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。
第二步:處理AIDL文件,生成對(duì)應(yīng)的.java文件(當(dāng)然,有很多工程沒有用到AIDL,那這個(gè)過程就可以省了)
【輸入】源碼文件、aidl文件、framework.aidl文件
【輸出】對(duì)應(yīng)的.java文件
【工具】aidl工具
第三步:編譯Java文件,生成對(duì)應(yīng)的.class文件
【輸入】源碼文件(包括R.java和AIDL生成的.java文件)、庫(kù)文件(.jar文件)
【輸出】.class文件
【工具】javac工具
第四步:把.class文件轉(zhuǎn)化成Davik VM支持的.dex文件
【輸入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),庫(kù)文件(.jar文件)
【輸出】.dex文件
【工具】dex工具
第五步:打包生成未簽名的.apk文件
【輸入】打包后的資源文件、打包后類文件(.dex文件)、libs文件(包括.so文件,當(dāng)然很多工程都沒有這樣的文件,如果你不使用C/C++開發(fā)的話)
【輸出】未簽名的.apk文件
【工具】apkbuilder工具
第六步:對(duì)未簽名.apk文件進(jìn)行簽名
【輸入】未簽名的.apk文件
【輸出】簽名的.apk文件
【工具】jarsigner
第七步:對(duì)簽名后的.apk文件進(jìn)行對(duì)齊處理(不進(jìn)行對(duì)齊處理是不能發(fā)布到Google Market的)
【輸入】簽名后的.apk文件
【輸出】對(duì)齊后的.apk文件
【工具】zipalign工具
知道了上面這些細(xì)節(jié)后,就可以實(shí)現(xiàn)很多我們想實(shí)現(xiàn)東西了,比如:編譯流程自動(dòng)化,例如我們可以使用某種腳本,像Windows下的批處理,linux下的Bash,Java下的Ant,Python、Perl這樣的腳本語(yǔ)言,甚至直接用Java、.Net這們的強(qiáng)類型語(yǔ)言也是可以的。
如果真正弄懂了上面的步驟,了解了編譯打包過程的本質(zhì),你完全可以以你想要的任何方式實(shí)現(xiàn)它的自動(dòng)化,這才是真正的“舉一反三,以不變應(yīng)萬變”。再比如,對(duì)Android SDK的精簡(jiǎn),大家知道現(xiàn)在Android SDK動(dòng)轍幾百兆,我們完全可以應(yīng)用上面的知識(shí),只保留必要的工具,把SDK精簡(jiǎn)到10M以下。當(dāng)然,還可以做很多事情,前提是你真正弄懂了它。
使用編譯工具Ant
1, 下載
這是官方下載頁(yè):
http://ant.apache.org/srcdownload.cgi
下面我的示例環(huán)境為Ubuntu系統(tǒng)。
2, 安裝
1) 解壓
tar zxvf apache-ant-1.9.0-bin.tar.gz
2) 配置環(huán)境
sudo vi /etc/profile export ANT_HOME=/home/homer/Apache-maven/ant-1.9.0/ export PATH=$ANT_HOME/bin:$PATH sudo source /etc/profile
3, 驗(yàn)證
homer@ubuntu:~$ ant -v Apache Ant(TM) version 1.9.0 compiled on March 5 2013 Trying the default build file: build.xml Buildfile: build.xml does not exist! Build failed
安裝完畢!
4, 創(chuàng)建項(xiàng)目
1) 列出android平臺(tái)列表
android list targets
輸出結(jié)果如下:
2) android命令創(chuàng)建項(xiàng)目
命令格式:
android create project --target <target-id> --name MyFirstApp --path <path-to-workspace> MyFirstApp --activity MainActivity --package com.example.myfirstapp
創(chuàng)建 AntTest 為例,命令如下:
android create project --target android-3 --name AntTest --path /home/homer/workspace/AntTest --activity MainActivity --package com.homer.anttest
創(chuàng)建項(xiàng)目如下:
5, 編譯項(xiàng)目
1) 進(jìn)入項(xiàng)目目錄
cd /home/homer/workspace/AntTest
2) 檢查是否有build.xml 文件
build.xml 文件,在項(xiàng)目根目錄下,用作ant的配置文件; 如果沒有,則通過android update更新生成,命令如下:
在項(xiàng)目 AntTest 根目錄下,輸入編譯命令:
ant debug
輸出命令信息如下:
此時(shí),bin目錄下會(huì)生成 AntTest-debug.apk 等文件,如下圖:
PPPPPPPPPPPPPPPPPPPPP5
6, 安裝驗(yàn)證
1) 列出avd
android list avd
avd列表如下:
2) 啟動(dòng)模擬器
android-sdk-linux/tools/emulator -avd AVD-1.5
3) 安裝apk
adb install bin/AntTest-debug.apk
- 單獨(dú)編譯Android 源代碼中的模塊實(shí)現(xiàn)方法
- Android內(nèi)核源碼 在Ubuntu上下載,編譯,安裝
- Android源碼 在Ubuntu上下載,編譯和安裝
- 為Android的apk應(yīng)用程序文件加殼以防止反編譯的教程
- Android APK反編譯圖文教程
- Android開發(fā)apk反編譯和二次打包教程
- 詳談Android編譯命令
- 從源碼編譯Android系統(tǒng)的Java類庫(kù)和JNI動(dòng)態(tài)庫(kù)的方法
- 利用源碼編譯Android系統(tǒng)的APK和可執(zhí)行命令的方法
- 使用Android studio創(chuàng)建的AIDL編譯時(shí)找不到自定義類的解決辦法
- Android 源碼如何編譯調(diào)試
相關(guān)文章
Android添加用戶組及自定義App權(quán)限的方法
今天小編就為大家分享一篇Android添加用戶組及自定義App權(quán)限的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07微信小程序電商常用倒計(jì)時(shí)實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了微信小程序電商常用倒計(jì)時(shí)實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06Android App中實(shí)現(xiàn)向右滑動(dòng)銷毀功能的要點(diǎn)解析
這篇文章主要介紹了Android應(yīng)用中實(shí)現(xiàn)向右滑動(dòng)銷毀條目功能的要點(diǎn)解析,有些類似于iOS App中的滑動(dòng)頁(yè)面刪除效果,需要的朋友可以參考下2016-04-04ViewPager打造輪播圖Banner/引導(dǎo)頁(yè)Guide
這篇文章主要為大家詳細(xì)介紹了ViewPager打造輪播圖Banner和引導(dǎo)頁(yè)Guide,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Flutter Http網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)詳解
這篇文章主要介紹了Flutter Http網(wǎng)絡(luò)請(qǐng)求實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Android使用DrawerLayout實(shí)現(xiàn)雙向側(cè)滑菜單
這篇文章主要為大家詳細(xì)介紹了Android使用DrawerLayout實(shí)現(xiàn)雙向側(cè)滑菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11android使用Jsoup 抓取頁(yè)面的數(shù)據(jù)
本篇文章主要介紹了android使用Jsoup 抓取頁(yè)面的數(shù)據(jù),jsoup 是一款Java的HTML解析器,有需要的朋友可以了解一下。2016-11-11