我有一个ant脚本可以完成它需要做的事情,但是我需要根据我是在运行发布还是调试来设置一些属性值。我该怎么做?
如果它有所不同,我的ant脚本会在执行android build之前运行一些自定义实用程序任务。
回答我自己的问题:
要查找的属性是“ build.mode.release ”和“ build.mode.debug ”,但是有一个警告 ...如果你的清单有 debuggable =“true”,系统 REVERTS 进入调试模式并带有轻微的“短缺”(IMO)
注意:这仅适用于Android版本
答案 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>
ifeq($(BUILDMODE),true)
LOCAL_CFLAGS=-DDEBUG
endif