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



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

如果有区别的话,我的ant脚本在执行android构建之前会运行一些自定义的实用程序任务。


回答我自己的问题:

要查找的属性是"build.mode.release"one_answers"build.mode.debug",但有一个警告。。。如果您的清单具有可调试="true",则系统切换到带有轻微"短期"(IMO)的调试模式

  1. build.mode.release未设置
  2. build.mode.debug是 也未设置
  3. 调试签名被禁用(您必须提供密钥库、别名和密码)

注意:这仅适用于Android构建的

"警告"的原因实际上记录在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" />

作为对Joe答案的更新,至少在Android Tools版本22.3中,属性build.mode.debug似乎已不存在,但您可以使用uild.is.package.debug来区分调试和发布

ant -D<prop-name>=<value>将在ant 中设置属性

ant调试和jni模块的最终解决方案:
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>
  1. jni/Android.mk,添加以下内容:

ifeq($(BUILDMODE),true)
LOCAL_CFLAGS=-DDEBUG
endif

相关内容

  • 没有找到相关文章

最新更新