Как я могу указать расположение хранилища ключей отладки для сборок Android и отладки? - PullRequest
39 голосов
/ 26 января 2012

Можно ли указать местоположение самостоятельно созданного хранилища ключей отладки при создании отладки .apk (<project-name>-debug.apk) с ant debug? Я вижу только возможность указать расположение хранилища ключей релиза.

Я хотел бы поделиться хранилищем ключей отладки на нескольких компьютерах, не копируя их на тот, который находится в каталоге .android. Например, хранилище ключей отладки может находиться в хранилище исходного кода. Но мне нужен способ сообщить муравью, где найти хранилище ключей отладки.

Ответы [ 7 ]

19 голосов
/ 26 января 2012

Вы должны быть в состоянии указать хранилище ключей для использования с этими свойствами

key.store=/path/to/key.keystore
key.alias=alias
key.store.password=pass
key.alias.password=pass

Просто передайте свойства в Ant.

[EDIT] Из документов на http://developer.android.com/guide/publishing/app-signing.html#setup

Инструменты сборки Android предоставляют режим подписи отладки, который упрощает разработку и отладку приложения, но при этом отвечает требованиям системы Android для подписи вашего .apk.При использовании режима отладки для создания приложения инструменты SDK вызывают Keytool для автоматического создания хранилища ключей и ключа отладки.Этот ключ отладки затем используется для автоматической подписи .apk, поэтому вам не нужно подписывать пакет собственным ключом.

Инструменты SDK создают хранилище / ключ отладки ключей с заранее заданными именами / паролями:

  • Имя хранилища ключей: "debug.keystore"
  • Пароль хранилища ключей: "android"
  • Псевдоним ключа: "androiddebugkey"
  • Пароль ключа: "android"
  • CN:" CN = Android Debug, O = Android, C = US "

При необходимости вы можете изменить местоположение / имя хранилища ключей отладки /ключ или укажите пользовательское отладочное хранилище ключей / ключ для использования .Однако любое пользовательское хранилище ключей / ключ отладки должно использовать те же имена ключей и паролей ключей и пароли, что и ключ отладки по умолчанию (как описано выше).(Для этого в Eclipse / ADT перейдите в Windows> «Установки»> «Android»> «Сборка».)

11 голосов
/ 25 мая 2012

Насколько я могу судить, для этого вам нужно переопределить цель "-do-debug". Хотелось бы узнать, есть ли более элегантный способ. Я добавил это в свой build.xml

<property name="build.is.signing.debug" value="false"/>
<target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package">
    <!-- only create apk if *not* a library project -->
    <do-only-if-not-library elseText="Library project: do not create apk..." >
        <sequential>
            <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />

            <!-- Signs the APK -->
            <echo>Signing final apk...</echo>
            <signjar
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

            <!-- Zip aligns the APK -->
            <zipalign-helper
                    in.package="${out.unaligned.file}"
                    out.package="${out.final.file}" />
            <echo>Debug Package: ${out.final.file}</echo>
        </sequential>
    </do-only-if-not-library>
    <record-build-info />
</target>
<import file="${sdk.dir}/tools/ant/build.xml" />
4 голосов
/ 20 августа 2013

Вы можете удалить подпись финального apk и подписать ее снова.Это просто отладочная сборка, поэтому можно избежать zipalign (по крайней мере, у меня нет проблем с моей сборкой).

Скопируйте ваше хранилище ключей в файл debug.keystore в проекте и добавьте следующее в ant.properties

debug.key.store.password=android
debug.key.alias.password=android
debug.key.store=../debug.keystore
debug.key.alias=androiddebugkey

И добавьте следующее в свой build.xml

<target name="-post-build" if="${build.is.packaging.debug}">
    <!-- Remove the signature of the debug build, and sign it again with our own debug keystore -->
    <delete dir="tmp" includeemptydirs="true" failonerror="false" />
    <mkdir dir="tmp" />
    <unzip src="${out.final.file}" dest="tmp" />
    <delete dir="tmp/META-INF" includeemptydirs="true" verbose="true" failonerror="true" />
    <delete file="${out.final.file}" failonerror="true" />
    <zip destfile="${out.final.file}" basedir="tmp" />
    <delete dir="tmp" includeemptydirs="true" failonerror="false" /> 

    <echo level="info">Signing final DEBUG apk with a common signature...
        signapk
            input="${out.final.file}"
            output="${out.packaged.file}"
            keystore="${debug.key.store}"
            storepass="${debug.key.store.password}"
            alias="${debug.key.alias}"
            keypass="${debug.key.alias.password}"
    </echo>

    <signapk
        input="${out.final.file}"
        output="${out.packaged.file}"
        keystore="${debug.key.store}"
        storepass="${debug.key.store.password}"
        alias="${debug.key.alias}"
        keypass="${debug.key.alias.password}"/>

    <delete file="${out.final.file}" failonerror="true" />
    <move file="${out.packaged.file}" tofile="${out.final.file}" failonerror="true" />

</target>
4 голосов
/ 04 января 2013

Один простой метод, который вы можете использовать в качестве обходного пути (который особенно хорош в нашей системе CI, где создается много проектов и где требуется мягкое касание при работе с хранилищами ключей), - это запустить отладочную сборку.используйте AAPT, чтобы удалить содержимое папки META-INF, и запустите jarsigner, чтобы подписать его с помощью пользовательского debug.keystore.

В псевдоскрипте это выглядит так:1003 *

# Remove default debug signing
aapt remove YourDebugApp.apk META-INF/MANIFEST.MF
aapt remove YourDebugApp.apk META-INF/CERT.SF
aapt remove YourDebugApp.apk META-INF/CERT.RSA

# Use Jarsigner and the custom debug.keystore. 
# NOTE: This assumes you explicitly called out MD5withRSA as your signing algorithm 
# when you generated the key; drop the -sigalg tag if you did not.
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore -storepass android YourDebugApp.apk

# Verify signing
jarsigner -verify YourDebugApp.apk
4 голосов
/ 15 сентября 2012
  • Создайте новую и пустую папку в рабочей области Eclipse.

  • Скопируйте файл "debug.keystore" из его стандартного расположения (например, "c: /Users/YourAcount/.Android/" в Windows) в этот новый каталог.

  • Сконфигурируйте Eclipse для использования этого нового каталога / файла для всех отладочных APK (Eclipse -> Окно -> Настройки -> Android -> Сборка -> Настраиваемое хранилище ключей отладки ".

0 голосов
/ 30 октября 2015

Я нашел другое решение ..

Добавьте следующее в $ {PROJECT_HOME} /custom_rules.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules">
    <!-- @Override -->
    <target name="-set-debug-mode" depends="-setup">
        <!-- record the current build target -->
        <property name="build.target" value="debug" />

        <if>
            <condition>
                <and>
                    <istrue value="${project.is.testapp}" />
                    <istrue value="${emma.enabled}" />
                </and>
            </condition>
            <then>
                <property name="build.is.instrumented" value="true" />
            </then>
            <else>
                <property name="build.is.instrumented" value="false" />
            </else>
        </if>

        <!-- whether the build is a debug build. always set. -->
        <property name="build.is.packaging.debug" value="true" />

        <!-- signing mode: debug -->
        <property name="build.is.signing.debug" value="false" />

        <!-- Renderscript optimization level: none -->
        <property name="renderscript.opt.level" value="${renderscript.debug.opt.level}" />

    </target>

    <!-- @Override -->
    <!-- Builds debug output package -->
    <target name="-do-debug" depends="-set-debug-mode, -debug-obfuscation-check, -package, -post-package">
        <property name="out.unsigned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unsigned.apk"/>
        <move file="${out.packaged.file}" tofile="${out.unsigned.file}"/>
        <property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" />

        <!-- Signs the APK -->
        <echo level="info">Signing final apk...</echo>
        <signapk
            input="${out.unsigned.file}"
            output="${out.unaligned.file}"
            keystore="${out.absolute.dir}/../debug.keystore" <!-- your debug.keystore path -->
            storepass="android"
            alias="androiddebugkey"
            keypass="android"/>

        <!-- only create apk if *not* a library project -->
        <do-only-if-not-library elseText="Library project: do not create apk..." >
            <sequential>
                <zipalign-helper in.package="${out.unaligned.file}" out.package="${out.final.file}" />
                <echo level="info">Debug Package: ${out.final.file}</echo>
            </sequential>
        </do-only-if-not-library>
        <record-build-info />
    </target>

</project>
0 голосов
/ 16 октября 2012

Насколько я видел, ни одно существующее решение не работает с последней версией ant.

Единственный примитивный способ сделать это - заменить debug.keys по умолчанию, сохранив его в папке по умолчанию.

Местоположение по умолчанию - папка .android.Обычно в C: \ Users \ USER_NAME.android В Windows вы можете получить к нему доступ, используя% USERPROFILE% .android.

Я создал сценарий powershell для резервного копирования файла по умолчанию, скопировал файл хранилища ключей в файл по умолчаниюместоположение, создайте подписанный отладочный apk, удалите мой файл хранилища ключей, восстановите оригинальный файл.

Дайте мне знать, если вам нужна дополнительная информация здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...