обнаружение конфигурации сборки (отладка или выпуск) в скрипте ant - PullRequest
8 голосов
/ 02 июня 2011

У меня есть ant-скрипт, который делает то, что ему нужно, но мне нужно установить несколько значений свойств в зависимости от того, запускаю ли я релиз или отладку. Как мне это сделать?

Если это имеет значение, мой скрипт ant запускает несколько пользовательских утилит перед выполнением сборки Android.


Чтобы ответить на мой вопрос:

Свойства для поиска: " build.mode.release " и " build.mode.debug ", однако есть предостережение .. если ваш манифест имеет debuggable = "true" , система ОБРАТИТ в режим отладки с небольшим «кратковременным» (IMO)

  1. build.mode.release is НЕ установлено ,
  2. build.mode.debug равен ТАКЖЕ не установлен
  3. Отладочная подпись отключена (необходимо указать хранилище ключей, псевдоним и пароль)

Примечание: Это относится только к сборкам Android

Ответы [ 4 ]

8 голосов
/ 03 июня 2011

Причина "предостережения" фактически задокументирована в проекте 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" />
3 голосов
/ 11 февраля 2014

Как обновление ответа Джо, похоже, что по крайней мере с Android Tools revision 22.3 свойство build.mode.debug больше не существует, но вы можете использовать build.is.packaging.debug чтобы различать отладку и выпуск

1 голос
/ 02 июня 2011

ant -D<prop-name>=<value> установит свойство в муравье

0 голосов
/ 15 марта 2015

окончательная версия для модуля отладки и 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

...