一般情況下,我們都是使用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文
 
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()