2011-06-02 103 views
8

我有一個ant腳本來完成它需要做的事情,但是我需要根據我是否運行發行版或調試來設置一些屬性值。我該怎麼做呢?在ant腳本中檢測構建配置(調試或發佈)

如果它有所作爲,我的ant腳本會在執行android構建之前運行一些自定義實用工具。


要回答我的問題:

性質尋找有 「build.mode.release」 和 「build.mode.debug」,但有一個警告 ...如果你的清單具有可調試=「真」回覆調試模式有輕微的「短未來」(IMO)系統

  1. build.mode.release未設置
  2. build.mode.debug是也不設置
  3. 調試簽名是禁用的(你必須提供一個密鑰,別名和密碼)

注:這僅適用於Android的建立

回答

1

ant -D<prop-name>=<value>將設置屬性的螞蟻

+0

我知道,但我沒有看到的是,條件部分。 我想要加載兩個文件之一(release.properties/debug.properties),或者根據配置手動設置腳本中的屬性值。 以目錄路徑爲例,我想出/釋放和出/調試 – copolii 2011-06-02 18:20:55

+0

@copolii使用任務:http://ant.apache.org/manual/Tasks/conditions.html – 2011-06-02 18:26:25

+0

我知道條件任務,我需要實際條件......如果ant腳本正在使用「ant release」執行,而false使用「ant debug」或反之亦然,則評估爲true。 必須有一個屬性...在VisualStudio/MSBuild它的$(配置),其中評估'釋放'或'調試' – copolii 2011-06-02 18:39:23

8

的原因「警告」是在Android main_rules.xml項目($ANDROID_SDK_ROOT/tools/ant/main_rules.xml)實際上記載:

<target name="-set-release-mode"> 
    <!-- release mode is only valid if the manifest does not explicitly 
     set debuggable to true. default is false. 
     We actually store build.packaging.debug, not build.release --> 
    <xpath input="AndroidManifest.xml" expression="/manifest/application/@android:debuggable" 
      output="build.packaging.debug" default="false"/> 
    ... 
</target> 

所以,你要檢查什麼build.mode.debug(通過ant debug執行),build.mode.release(當@debuggable=falseant release執行),最後,以滿足您的警告:build.packaging.debug(當@debuggable=trueant release執行)


這裏,將工作的例子自動預編譯:

<target name="-my-debug-precompile" if="build.mode.debug"> 
    <!-- This is executed for any "debug" build ("ant debug") --> 
</target> 

<target name="-my-release-precompile" unless="build.mode.debug"> 
    <!-- This is executed for any non-"debug" build (e.g., "ant release", 
     regardless of the @debuggable attribute in AndroidManifest.xml) --> 
</target> 

<!-- This is called automatically by Android's ant tasks, and delegates the 
    task to one of the above two targets: --> 
<target name="-pre-compile" depends="-my-debug-precompile,-my-release-precompile" /> 
+0

main_rules是我找到我發佈的信息。謝謝:) – copolii 2011-06-04 09:14:19

+3

@copolii:我闡述的原因是因爲你沒有提到第三個屬性('build.packaging.debug') - 當應用程序被假設*處於釋放模式時('ant release '),但由於'@ debuggable = true'而被強制回到調試版本 - 並且沒有明確地調用*爲什麼會發生「警告」。我也意識到你已經有了一個適合你的解決方案,而且你已經用文字描述了這個解決方案,但是由於這是SO並且其他人以後會偶然發現這個問題,所以有一個精確的例子對其他人很有用;因此是示例目標。 – Joe 2011-06-13 23:44:10

3

爲更新到喬的回答,看起來,至少與Android工具版本22.3,物業build.mode.debug不再存在,但你可以使用build.is.packaging.debug調試區分和釋放

+0

在我絆倒之前,花了我數小時的努力。這不能超負荷。確實,它現在是'build.is.packaging.debug' – Warpspace 2014-12-05 10:23:42

0

螞蟻調試和JNI模塊最終soultion:
1 custom_rules.xml,分配調試模式爲 'BUILDMODE'

<?xml version="1.0" encoding="UTF-8"?> 
<project> 
     <property name="out.library.jar.file" location="bin/classes.jar" /> 
    <target name="-pre-compile"> 
       <exec executable="ndk-build"> 
         <arg value="BUILDMODE=${build.is.packaging.debug}" /> 
       </exec> 
    </target> 
</project> 
  • JNI /機器人。MK,添加以下內容:
  • IFEQ($(BUILDMODE),真)
    LOCAL_CFLAGS=-DDEBUG
    ENDIF