Могу ли я создать приложение для Android в качестве отладки, но подписать с хранилищем ключей

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

Я использую IntelliJ Idea (Ver. 11 CE) и не могу понять, как настроить проект для сборки с помощью отладочного набора и знака с моим хранилищем ключей до развертывания на моем устройстве.

Я вижу, что я могу установить цель ant для конфигурации, и я предполагаю, что это так, но поскольку мой build.xml импортирует Android SDK/tools/ant/build.xml, нет любые цели для выбора.

Чтобы отлаживать, мне просто нужно включить set android: debuggable = "true" в манифесте? У кого-нибудь есть предложение для цели ant, которая будет делать то, что мне нужно? Один, который я могу добавить в свой файл build.xml?

Ответ 1

С указателями в правильном направлении формы Ixx Я закончил настройку android: debuggable = "true" и используя командную строку для сборки и развертывания. Затем присоедините к запущенному процессу для отладки.

Мое приложение настроено для сборки в командной строке с файлом ant build.xml, который импортирует androidSDK/tools/ant/build.xml и поддерживающий файл build.properties. Я обнаружил, что когда я устанавливаю android: debuggable = "true", а затем do 'ant release', процесс сборки создаст отлаживаемый apk и подпишет его с помощью ключа release.

Я создал цель в моем файле build.xml, который я мог установить для этого случая, называемый set-debuggable

<target name="set-debuggable" description="sets internal named property">
    <echo>Setting internal named property...</echo>
    <property name="set.debuggable" value="true" />
</target>

Затем в моей задаче -pre-build я добавил

    <if>
        <condition>
            <isset property="set.debuggable"/>
        </condition>
        <then>
            <replaceregexp
                    file="AndroidManifest.xml"
                    match="(android:debuggable=&#34;).*(&#34;)"
                    replace="\1true\2"/>

        </then>
        <else>
            <replaceregexp
                    file="AndroidManifest.xml"
                    match="(android:debuggable=&#34;).*(&#34;)"
                    replace="\1false\2"/>

        </else>
    </if>

Это создает мою отлаживаемую apk, подписанную с моим ключом release, когда я использую 'ant set-debuggable release'. Затем я использую "adb install -r myApp-release.apk" для повторной установки новой сборки. Затем я могу запустить и приложить к запущенному приложению для отладки через покупки в приложении.

Кажется, что как IntelliJ Idea, так и Eclipse используют самозаверяющий ключ отладки где-то в вашей системе для создания и развертывания отладки apk из среды IDE.

В ретроспективе я мог бы заменить ключ отладки, который была создана IDE с моим ключом освобождения, и попытался заставить сборку подписать с этим ключом (и найти пароль для использования ключа), но процесс сборки выше мне очень мало времени на установку и начало использования. Если кто-то пойдет в этом направлении и заработает, добавьте комментарий к моему ответу.

Ответ 2

Как и в IntelliJ IDEA 12 (не знаю о предыдущих версиях), вы можете установить "Пользовательское хранилище отладки" на фасет Android для модуля верхнего уровня. Таким образом, вы можете контролировать, как подписывается APK, и фактически использовать ключи выпуска для отладки из среды IDE.

Ответ 3

У меня есть это в build.xml для установки отлаживаемого атрибута:

<condition property="build.env" value="${build.env}" else="local">
    <isset property="build.env" />
</condition>

<!-- set debuggable=false for release and true for debug and others -->
<condition property="isDebuggable" value="false" else="true">
        <equals arg1="${build.env}" arg2="release" />
    </condition>
    <replaceregexp 
        file="AndroidManifest.xml"
        match="(android:debuggable=&#34;).*(&#34;)" 
        replace="\1${isDebuggable}\2"
        >
    </replaceregexp>

Где build.env передается в программу ant, как это (в случае "release" ):

ant <targets> -Dbuild.env=release

Чтобы подписать, вы добавляете это в файлы свойств:

key.store=C:/path/to/keystore/mykeystore.keystore

В приложении Debug есть хранилище отладки (хотя в настоящее время я не помню точно, почему это хранилище ключей необходимо) → здесь более подробную информацию об этом. Вероятно, вам просто нужно использовать хранилище ключей выпуска.

Ответ 4

IntelliJ использует файл .android/debug.keystore, чтобы указать для подписи отладочной версии вашего приложения. Вы можете изменить этот файл с помощью хранилища ключей выпуска или импортировать сертификат выпуска в файл debug.keystore. Я подготовил пошаговые инструкции для этого на http://www.denizoguz.com/2013/01/12/failure-install_parse_failed_inconsistent_certificates/

Ответ 5

Учитывая, что Lint теперь советует жестко кодировать флаг "android: debuggable" в AndroidManifest.xml, я пришел с лучшим решением (по крайней мере, для моего случая). Просто определите новую ant цель в custom_rules.xml, которая делает все точно так же, как и цель отладки для Android, но также подписывает apk с ключом освобождения.

<target name="build-debug" depends="-set-debug-files, -do-debug, -release-sign, -post-build" />

Единственная подзадача, которую нужно добавить, это "-release-sign" перед "-post-build", а затем запускать "bulid-debug" вместо целевой "отладки" android.

Или вы можете просто "-release-sign" отлаживать зависимость следующим образом:

<target name="build-debug" depends="debug, -release-sign" />

но это не работает для меня, потому что я делаю некоторые дополнительные вещи в "-stost-build" и вам нужно подписать пакет до "-post-build".

Ответ 6

Попробуйте установить флаг debuggable в true в манифесте Android.

 <application
        android:debuggable="true"

Отладочный флаг