Подтвердить что ты не робот

Автоматизация для выпуска Android

У меня есть десять проектов Android в одной папке. Для каждого проекта я могу использовать ant debug для его создания. Таким образом, нетрудно написать простой script для компиляции всех этих проектов. Я использую Hudson для ежедневного создания этих проектов, и он отлично работает.

Но теперь наш проект должен перейти на этап выпуска. Поэтому команда компиляции становится ant release. Для компиляции проекта выпуска я должен вводить пароль для сертификата каждый раз во время компиляции. Поэтому я не могу сделать автоматизацию для выпуска.

Эта компиляционная работа убивает меня, так как у меня есть десять проектов, которые все должны взаимодействовать с вводом пароля.

Как я могу сделать сборку по-прежнему автоматической?

4b9b3361

Ответ 1

Предполагая, что вы используете последние Android-инструменты, скажите v9 или v10.

Если вы посмотрите tools/ant/main_rules.xml в каталоге Android SDK:

<!-- called through target 'release'. Only executed if the keystore and
     key alias are known but not their password. -->
<target name="-release-prompt-for-password" if="has.keystore" unless="has.password">
    <!-- Gets passwords -->
    <input
            message="Please enter keystore password (store:${key.store}):"
            addproperty="key.store.password" />
    <input
            message="Please enter password for alias '${key.alias}':"
            addproperty="key.alias.password" />
</target>

<!-- called through target 'release'. Only executed if there no
     keystore/key alias set -->
<target name="-release-nosign" unless="has.keystore">
    <echo>No key.store and key.alias properties found in build.properties.</echo>
    <echo>Please sign ${out.unsigned.file} manually</echo>
    <echo>and run zipalign from the Android SDK tools.</echo>
</target>

Поиск файла XML для has.keystore показывает:

<!-- properties for signing in release mode -->
<condition property="has.keystore">
    <and>
        <isset property="key.store" />
        <length string="${key.store}" when="greater" length="0" />
        <isset property="key.alias" />
    </and>
</condition>
<condition property="has.password">
    <and>
        <isset property="has.keystore" />
        <isset property="key.store.password" />
        <isset property="key.alias.password" />
    </and>
</condition>

Итак, я бы предположил, что вам нужно передать четыре элемента в build.xml: key.store, key.alias, key.store.password, key.alias.password.

И не забывайте передавать эти определения в командной строке из соображений безопасности.:)

Ответ 2

Gradle построены

1) Создайте файл secure.properties, чтобы содержать ваши пароли:

key.store.password=<your keystore password>
key.alias.password=<your alias password>

Вероятно, вы не хотите этого под контролем версий, поэтому мы помещаем пароли в отдельный файл *.properties. Если вы не против иметь свои пароли под управлением версиями, вы можете ввести свои пароли непосредственно в build.gradle, но это не рекомендуется, поэтому я не показываю это прямо.

2) Настройте build.gradle следующим образом:

Properties secureProperties = new Properties()
secureProperties.load(new FileInputStream("secure.properties"))

android {
    signingConfigs {
        release {
            storeFile file("<path to your keystore>")
            storePassword secureProperties['key.store.password']
            keyAlias "<alias name>"
            keyPassword secureProperties['key.alias.password']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

И что это. ./gradlew assembleRelease теперь строит и подписывает мой APK без запроса моего пароля.

Ant построенные сборки

1) Создайте файл secure.properties, чтобы содержать ваши пароли:

key.store.password=<your keystore password>
key.alias.password=<your alias password>

Вероятно, вы не хотите этого под контролем версий, поэтому мы не помещаем пароли в один из существующих файлов *.properties. Если вы не против иметь свои пароли под управлением версиями, поместите эти две строки в ant.properties, и все готово.

2) Создайте файл custom_rules.xml, чтобы сообщить системе сборки о вашем файле secure.properties.

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" default="help">
  <property file="secure.properties" />
</project>

Я не знаком с этой системой сборки, поэтому я не уверен в свойствах project element name или default, но я считаю, что то, что я выбрал, должно работать для всех.

2b) Любая недавняя версия инструментов Android SDK должна быть хорошей, но если по какой-то причине ваш файл build.xml не содержит следующего, вы должны добавить его:

<import file="custom_rules.xml" optional="true" />

И это должно быть так. ant release теперь строит и подписывает мой APK без запроса моего пароля.

Ответ 3

Вы можете определить конфигурацию своего хранилища ключей в своих проектах project.properties в папке проекта. Так же, как это

key.store =/путь/к/вашим/хранилище ключей

key.alias = yourkeyalias

key.store.password = yourkeystorepassword

key.alias.password = yourkeyaliaspassword

Ответ 4

Просто примечание... Я не хотел устанавливать пароли в реквизите, и по умолчанию ваш пароль будет отображаться в командной строке, что также вызывает беспокойство. Добавление использования SecureInputHandler к вам main_rules.xml работает так, что ваш пароль не отображается в командной строке.

<target name="-release-prompt-for-password" if="has.keystore" unless="has.password">
    <!-- Gets passwords -->
    <input
            message="Please enter keystore password (store:${key.store}):"
            addproperty="key.store.password" >
        <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
    </input>
    <input
            message="Please enter password for alias '${key.alias}':"
            addproperty="key.alias.password" >
        <handler classname="org.apache.tools.ant.input.SecureInputHandler" />
    </input>
</target>

Ответ 5

посмотрите эту статью, особенно там, где она начинает упоминать key.store.password. Я использовал его без проблем.

В принципе, вы должны создать локальный файл secure.properties на вашей (сборной) машине, который должен быть относительно безопасным, например. недоступны для всех или не сохраняются для всех в исходном управлении. Этот файл хранит пароли как свойства с правильными именами и импортируется в файл сборки проекта ANT.