Могу ли я создать приложение для 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=").*(")"
replace="\1true\2"/>
</then>
<else>
<replaceregexp
file="AndroidManifest.xml"
match="(android:debuggable=").*(")"
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=").*(")"
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"
Отладочный флаг