利用 ant 指令碼修改專案包名

yangxi_001發表於2014-03-19
在開發android應用專案的時候,經常會有這樣的需求,一個應用專案,要求在不同的OEM下有不同的包名,不同的資源,不同的功能點什麼的。儘管可以利用eclipse adt自帶的功能來做這件事,但是,當按照這樣的需求來定製的越來越多的時候,手動去修改就開始變得力不從心起來。這個時候,一個良好的自動化指令碼呼之欲出,你完全可以利用perl/python/Makefile來做,不過這裡如果直接使用ant來做的話,似乎很多事情變得簡單起來。畢竟,ant提供給我們良好的介面,而隱藏那些實現細節。
廢話少說,先搭建一個這樣的環境吧。
首先還是簡述一下我的工作環境Windows 7

1. 下載安裝jdk, 一定是jdk, 如果只安裝jre的話,在執行ant時會報錯,說找不到tools.jar這個檔案。
安裝完畢後在系統環境變數下設定JAVA_HOME=C:\Program Files\Java\jdk1.6.0_25(這個換成自己的安裝路徑)

2. 下載安裝ant
其實就是解壓到某目錄下,解壓完畢後在系統環境變數下設定ANT_HOME=D:\apache-ant-1.8.2(這個換成自己的安裝路徑)
並新增執行路徑Path=%Path%;%ANT_HOME%\bin

3. 更新project

android.bat update project --path .

4. 使用ant
ant release (或者是debug)

5. 定製自己的指令碼來完成修改專案包名等內容

  1. 準備config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- www.Ulrich-Scheller.de - use this script/project for whatever you want on your own risk -->

    <project name="myproject" default="myproject" basedir=".">
    <description> Build project for different partner </description>

    <!--partner.dir, pkg.name, ver.code, ver.name are input from command line when execute 'ant' -->

    <!-- set global properties for this build -->
    <property name="build.bin" location="bin"/>
    <property name="build.gen" location="gen"/>
    <property name="src" location="src"/>
    <property name="res" location="res"/>

    <target name="preparefiles" description="Prepare files for different partner" >
    <delete dir="${build.bin}" />
    <delete dir="${build.gen}" />

    <copy todir="${res}" overwrite="true" />
    <fileset dir="${partner.dir}/res" /> 
    </copy>

    <!-- change the import in all Java source files -->
    <replaceregexp file="AndroidManifest.xml"
    match='android.versionCode="(.*)"'
    replace='android.versionCode="${ver.code}"'
    byline="false">

    <replaceregexp file="AndroidManifest.xml"
    match='android.versionName="(.*)"'
    replace='android.versionName="${ver.name}"'
    byline="false">

    <replaceregexp file="AndroidManifest.xml"
    match='package="(.*)"'
    replace='package="${pkg.name}"'
    byline="false">

    <!-- change the package name in AndroidManifest -->
    <replaceregexp flags="g" byline="false">
    <regexp pattern="import(.*)com.myproject.com.R;" /> 
    <substitution expression="import com.${pkg.name}.R;" />
    <fileset dir="${src}" includes="**/*.java" /> 
    </replaceregexp>

    <replaceregexp flags="g" byline="false">
    <regexp pattern="(package com.myproject.com;)" /> 
    <substitution expression="\1&#10;import com.${pkg.name}.R;" />
    <fileset dir="${src}" includes="**/*.java" /> 
    </replaceregexp>
    </target>

    </project>
  2. 執行定製指令碼
    $ ant -f config.xml -Dpartner.dir="xxx" -Dpkg.name="xxx" -Dver.code="xxx" -Dver.name="xxx" preparefiles
  3. 編譯
    $ ant debug
    或者
    $ ant release
具體的定製細節可以參考上面的指令碼和如下連結裡提到的內容
http://blogold.chinaunix.net/u/9577/showart_1828754.html

相關文章