我們的思路是每天下班后團隊各成員在指定的時間(例如下午18:30)之前把各自的代碼上傳到SVN,然后服務器在指定的時間(例如下午18:30)更新代碼、執行ant 打包命令、最后將apk包存放在指定目錄(或者上傳指定ftp目錄)、其他部門或者同事可以訪問指定的地址來下載最新的APK包。就是在ubuntu系統中創建一個定時任務,這個任務每天會在指定時間執行事先編寫好的編譯腳本。這個定時任務在ubuntu中可以使用crontab來實現。(還不了解crontab的同學自行腦補啦)
一、環境準備
1、在ubuntu 12.04搭建編譯環境。
關于Linux下ant編譯Android的步驟可以參考 《建立apk定時自動打包系統第一篇——Ant多渠道打包并指定打包目錄和打包日期》和《建立apk定時自動打包系統第二篇——自動上傳文件》 這個帖子。這個帖子雖然是在windows上操作的,但是步驟都是相似的。相信作為聰明的程序猿這點是可以舉一反三的。
2、搭建好apk的編譯環境之后我們要安裝SVN客戶端。unbuntu安裝SVN非常簡單。執行下列命令
sudo apt-get install subversion
等待完成之后,執行下面命令
svn --version
如果出現了svn版本以及相關幫助等信息說明svn已經安裝好了。
二、安裝apache服務
由于我的ubuntu服務器已經綁定了公司內網的IP(192.168.0.115),只要我將apk包存放在指定目錄下(如apk),那么其他同事就是可以在瀏覽器中使用192.168.0.115/apk下查看或下載已經打好包的apk了。
1、安裝apache服務。
ubuntu中安裝apache服務也是很簡單的。
sudo apt-get install apache2
?安裝好之后,自動打開了apache服務,其對外訪問的目錄默認是在/var/www/目錄下,所以在瀏覽器中輸入localhost,并出現It work!字樣,說明apache服務安裝成功
1、修改ant.properties
在這個文件中我們指定一個apk保存目錄為apache服務下的一個目錄
key.store=./test.keystore
key.alias=test.keystore
key.store.password=test
key.alias.password=testapk.dir=/var/www/apk
app.name=AntDemo
#channel numbers
market_channels=default_channel
這樣,ant打好包之后只要是公司內網的同事就可以訪問192.168.0.115/apk來下載最新的apk包了。
二、編寫apk編譯執行腳本
在《建立apk定時自動打包系統第一篇——Ant多渠道打包并指定打包目錄和打包日期》帖子中,我們是使用
ant deploy
進行打包的。因此我們的腳本的思路也是很簡單的,先使用svn update 項目代碼,然后使用ant deploy 命令。
1、在項目根目錄(例如我的項目目錄是/data/appworks/AntDemo)下面新建一個build-app.sh文件。文件的內容如下:
#!/bin/sh
export JAVA_HOME=/data/dev/jdk
export ANT_HOME=/data/dev/ant
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATHcd /data/appworks/AntDemo/#update
echo "updating code from server."
svn update --username 你的svn用戶名 --password svn密碼,無可省略echo "update finish.begin building the project."
#deploy
ant deploy
echo "building app is finishing."
上面藍色部分一定要設置,否則crontab不會執行這個腳本。這個問題困擾了樓主好久。切記切記!
編寫好shell腳本之后,給build-app.sh添加執行權限
chmod +x build-app.sh
然后在項目目錄下手動執行下這個腳本看看有沒有錯,如果可以打包成功,那么說明這個腳本是正確的了。
2、創建crontab任務。
使用下面命令編輯一個crontab任務
crontab -e
這個時候在shell中就打開了crontab的編輯狀態下的頁面,在這個頁面的后面插入下面的指令
30 18 * * * /data/appworks/AntDemo/build-app.sh
然后編輯,保存
這時候crontab就會在每天的18:30執行/data/appworks/AntDemo/build-app.sh 執行打包命令了。
?