一般情況下,我們都是使用Eclipse+ADT外掛程式或者Android studio軟體來編譯Android工程的,其實,Eclipse或者Android studio僅僅是將一些編譯命令封裝到視覺化介面裡而已,通過shell腳本、ADT附帶的一些命令以及Ant工具,我們完全可以將Android工程的編譯過程自動化,直接通過運行腳本就得到最終的APK檔。
Linux下用腳本編譯c/c++程式至少需要兩個東西,一個是編譯器,如gcc/g++,另一個則是編譯設定檔,即Makefile;同理,編譯Android程式也同樣需要編譯器和編譯設定檔,由於Android程式是JAVA開發的,所以編譯器一般使用Ant(Apache的核心專案,JAVA編譯器),設定檔則是build.xml,該編譯設定檔可以自己手寫,也可以通過ADT的工具生成;如果Andrid工程涉及JNI層,則編譯命令使用NDK-Build,對應的編譯設定檔則是Android.mk。
前面這段話,簡單介紹了使用腳本編譯Andriod工程的一些基本工具和關鍵字,詳細的用法就留給讀者自己去Google吧,這裡給出一個我自己編寫的通用腳本,放到你的Android工程的根目錄,修改腳本的相關路徑的配置,添加執行許可權(chmod +x),即可編譯你的Android工程了,具體的用法用注釋的形式添加在腳本中了,文章最後的附件則是該腳本的測試Android工程。
#!/bin/bash
#NOTE: 用法,在本工程根目錄下執行 ./build.sh xxx
#其中,xxx為參數,可以是clean debug release,也可以不帶參數,不帶參數預設為debug
#如果參數是 clean, 則會刪除所有編譯生成的檔
#如果參數是 debug , 則會生成 debug 版本的apk,位於 bin 目錄下
#如果參數是 release,則生成 release版本的apk,位於 bin 目錄下
#NOTE: 如果更改了工程配置,請先刪除目錄下的build.xml
#獲取本目錄的名稱,作為build.xml的專案名稱
PROJECT_NAME=${PWD##*/}
#路徑配置,請根據編譯環境修改
ANDROID_SDK_PATH=/opt/android/sdk
ANDROID_NDK_PATH=/opt/android/ndk
ANT_PATH=/opt/apache-ant-1.9.0/bin
#決定是否生成release版
BUILD_RELEASE=0
if [ $1 = "clean" ]
then
rm -rf gen
rm -rf obj
rm -rf libs/armeabi
echo "clean success"
exit
fi
if [ $1 = "debug" ]
then
BUILD_RELEASE=0
fi
if [ $1 = "release" ]
then
BUILD_RELEASE=1
fi
echo "begin to build..."
#判斷 build.xml 是否存在,若不存在,則創建一個
#請根據你的目標平臺,修改update project命令的最後一個參數,該值為 android list 命令輸出結果清單的id值
if [ ! -e build.xml ]
then
echo "No build.xml exist, generate build.xml"
$SDK_PATH/tools/android update project -n $PROJECT_NAME -p . -s -t 1
fi
#判斷jni目錄是否存在,如果存在,則首先編譯jni目錄
if [ -d jni ]
then
echo "build jni, generate libs"
$ANDROID_NDK_PATH/ndk-build
fi
#使用ant來編譯
if [ $BUILD_RELEASE ]
then
$ANT_PATH/ant release
else
$ANT_PATH/ant debug
fi
echo "build success"
在Android工程的根目錄運行該指令檔後,會在bin目錄下生成apk檔,如果工程目錄下沒有ant.properties檔和xxx.key檔的話,則只會生成debug版和unsigned-release版,如果希望直接生成簽名後的apk檔,則需要給出一個Android key檔,並編寫一個ant.properties檔,該檔的編寫示例如下:
key.store=ticktick.key
key.alias=ticktick
key.store.password=123456
key.alias.password=123456
在Android工程的根目錄下,如果存在該ant.properties檔,則在編譯release版的時候,會自動使用ticktick.key檔來簽名生成的apk文
全站熱搜
留言列表