編輯:關於Android編程
Android 工程構建的持續集成,需要搭建一套編譯和打包自動化流程,比如建立每日構建系統、自動生成發布文件等等。這些都需要我們對Android工程的編譯和打包有一個比較深入的理解,例如知道它的每一步都做了什麼,需要什麼環境和工具,輸入和輸出是什麼,等等。
首先,假定你的系統(Windows、Linux、Mac OS都行,本文默認使用Linux系統來舉例子,但在 Windows中幾乎沒有什麼差別)已經安裝了JDK和Android SDK。
我們重點關心的是:
(1)這個過程的輸入是什麼?
(2)這個過程的輸出是什麼?
(3)這個過程使用了什麼工具?
至於使用什麼參數,可以自己去看對應命令的幫助文件,或者在網上搜索,這不是本文的重點。
提前列出下列步驟中需要用到的工具,如下表:
第一步:打包資源文件,生成R.java文件
【輸入】Resource文件(就是工程中res中的文件)、Assets文件(相當於另外一種資源,這種資源Android系統並不像對res中的文件那樣優化它)、AndroidManifest.xml文件(包名就是從這裡讀取的,因為生成R.java文件需要包名)、Android基礎類庫(Android.jar文件)
【輸出】打包好的資源(一般在Android工程的bin目錄可以看到一個叫resources.ap_的文件就是它了)、R.java文件(在gen目錄中,大家應該很熟悉了)
【工具】aapt工具,它的路徑在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows系統,按慣例路徑應該這樣寫:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。
第二步:處理AIDL文件,生成對應的.java文件(當然,有很多工程沒有用到AIDL,那這個過程就可以省了)
【輸入】源碼文件、aidl文件、framework.aidl文件
【輸出】對應的.java文件
【工具】aidl工具
第三步:編譯Java文件,生成對應的.class文件
【輸入】源碼文件(包括R.java和AIDL生成的.java文件)、庫文件(.jar文件)
【輸出】.class文件
【工具】javac工具
第四步:把.class文件轉化成Davik VM支持的.dex文件
【輸入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),庫文件(.jar文件)
【輸出】.dex文件
【工具】dex工具
第五步:打包生成未簽名的.apk文件
【輸入】打包後的資源文件、打包後類文件(.dex文件)、libs文件(包括.so文件,當然很多工程都沒有這樣的文件,如果你不使用C/C++開發的話)
【輸出】未簽名的.apk文件
【工具】apkbuilder工具
第六步:對未簽名.apk文件進行簽名
【輸入】未簽名的.apk文件
【輸出】簽名的.apk文件
【工具】jarsigner
第七步:對簽名後的.apk文件進行對齊處理(不進行對齊處理是不能發布到Google Market的)
【輸入】簽名後的.apk文件
【輸出】對齊後的.apk文件
【工具】zipalign工具
知道了上面這些細節後,就可以實現很多我們想實現東西了,比如:編譯流程自動化,例如我們可以使用某種腳本,像Windows下的批處理,linux下的Bash,Java下的Ant,Python、Perl這樣的腳本語言,甚至直接用Java、.Net這們的強類型語言也是可以的。
如果真正弄懂了上面的步驟,了解了編譯打包過程的本質,你完全可以以你想要的任何方式實現它的自動化,這才是真正的“舉一反三,以不變應萬變”。再比如,對Android SDK的精簡,大家知道現在Android SDK動轍幾百兆,我們完全可以應用上面的知識,只保留必要的工具,把SDK精簡到10M以下。當然,還可以做很多事情,前提是你真正弄懂了它。
使用編譯工具Ant
1, 下載
這是官方下載頁:
http://ant.apache.org/srcdownload.cgi
下面我的示例環境為Ubuntu系統。
2, 安裝
1) 解壓
tar zxvf apache-ant-1.9.0-bin.tar.gz
2) 配置環境
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, 驗證
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, 創建項目
1) 列出android平台列表
android list targets
輸出結果如下:
2) android命令創建項目
命令格式:
復制代碼 代碼如下:
android create project --target <target-id> --name MyFirstApp --path <path-to-workspace> MyFirstApp --activity MainActivity --package com.example.myfirstapp
創建 AntTest 為例,命令如下:
復制代碼 代碼如下:
android create project --target android-3 --name AntTest --path /home/homer/workspace/AntTest --activity MainActivity --package com.homer.anttest
創建項目如下:
5, 編譯項目
1) 進入項目目錄
cd /home/homer/workspace/AntTest
2) 檢查是否有build.xml 文件
build.xml 文件,在項目根目錄下,用作ant的配置文件; 如果沒有,則通過android update更新生成,命令如下:
復制代碼 代碼如下:android update project --target android-3 --name AntTest --path /home/homer/workspace/AntTest
3) ant 命令編譯項目ant debug
輸出命令信息如下:
此時,bin目錄下會生成 AntTest-debug.apk 等文件,如下圖:
PPPPPPPPPPPPPPPPPPPPP5
6, 安裝驗證
1) 列出avd
android list avd
avd列表如下:
2) 啟動模擬器
android-sdk-linux/tools/emulator -avd AVD-1.5
3) 安裝apk
adb install bin/AntTest-debug.apk
實現功能:實現MyLoveMusicActivity(音樂收藏界面)實現MyRecordMusicActivity(最近播放界面)實現MyMusicListFragmen
離線緩存是指在有網絡的狀態下將從服務器獲取的網絡數據,如Json 數據緩存到本地,在斷網的狀態下啟動APP時讀取本地緩存數據顯示在界面上,常用的APP(網易新聞、知乎等等
AutoCompleteTextView,很多人都用過,有些情況下使用Google提供的ArrayAdapter作為適配器就可以完成需求,但是在實際開發中,我們經常需要開
我們知道有不少開源工程,能實現很多不錯的效果。前幾天,我看了一個效果,剛好項目中也用到了這個jar包。沒事挖一挖 學一學(一說到挖一挖,那麼問題來了,挖掘機技術到底哪家強