检测ant脚本中的构建配置(调试或发布)

时间:2011-06-02 18:08:11

标签: java android configuration ant build

我有一个ant脚本可以完成它需要做的事情,但是我需要根据我是在运行发布还是调试来设置一些属性值。我该怎么做?

如果它有所不同,我的ant脚本会在执行android build之前运行一些自定义实用程序任务。


回答我自己的问题:

要查找的属性是“ build.mode.release ”和“ build.mode.debug ”,但是有一个警告 ...如果你的清单有 debuggable =“true”,系统 REVERTS 进入调试模式并带有轻微的“短缺”(IMO)

  1. build.mode.release 未设置
  2. build.mode.debug 未设置
  3. 禁用调试签名(您必须提供密钥库,别名和密码)
  4. 注意:这仅适用于Android版本

4 个答案:

答案 0 :(得分: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=false时执行,ant release执行),最后满足您的警告:build.packaging.debug@debuggable=true时执行并ant 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" />

答案 1 :(得分:3)

作为对Joe的回答的更新,看起来,至少在Android Tools修订版22.3中,属性 build.mode.debug 不再存在,但您可以使用 build.is .packaging.debug 来区分调试和发布

答案 2 :(得分:1)

ant -D<prop-name>=<value>将在ant

中设置属性

答案 3 :(得分:0)

ant debug和jni模块的最终灵魂:
1.在custom_rules.xml中,将调试模式分配给&#39; BUILDMODE&#39;

<?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>
  1. jni / Android.mk,添加以下内容:
  2. ifeq($(BUILDMODE),true)
         LOCAL_CFLAGS=-DDEBUG
    endif