Почему не может быть сформирован пример выставления счетов в Google Market в выпуске подписанной версии?

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

Сначала я выполнил инструкции для Конфигурирование и создание примера приложения для In-app Billing, заменив ключ безопасности на открытый ключ из Учетная запись разработчика Google и изменение имени пакета от com.example до com.billtheape.

Затем я построил версию без релиза и проверил "проверку работоспособности" на моем телефоне Android. Все прошло хорошо (за исключением доступа к серверу Android Market, конечно, поскольку по дизайну он работает только с подписанной версией).

Затем я попытался создать подписанную версию выпуска, но получил ошибку:

[2012-01-03 20:52:45 - Dex Loader] Unable to execute dex: 
  Multiple dex files define Lcom/android/vending/billing/IMarketBillingService;

[2012-01-03 20:52:45 - Dungeons] Conversion to Dalvik format failed: 
  Unable to execute dex: Multiple dex files define Lcom/android/vending/billing/IMarketBillingService;

Теперь проблема в том, что даже создание "отладочной версии" создало ту же ошибку, независимо от того, сколько раз я пытался очистить проект.

Это не выглядело так, как проблема с путями сборки в том смысле, что описанный ответ (я тоже это проверил, но не нашел ничего подозрительного). Поэтому я попробовал что-то еще:

  • Выход из Eclipse
  • Пятнистые три подкаталога в %ANDROID_HOME%\extras\google\market_billing\gen\com: (1) андроид (2) пример (3) billtheape
  • Удален подкаталог example.
  • Запустил Eclipse и очистил проект.

Теперь отладочная версия создается правильно, но подписанная версия по-прежнему генерирует ту же ошибку. Оказывается, удаление этого постороннего подкаталога было не тем, что делало магия, а скорее перезапуском Eclipse, а затем очисткой проекта.

ОК, так что, по крайней мере, я получил отладочную версию, но подписанный выпуск Export продолжает терпеть неудачу с той же ошибкой.

Любая идея, что означает эта ошибка, почему это происходит и как ее исправить?

Ответ 1

Короткий ответ: Потому что Eclipse + ADT отстой. Вот почему.

Более длинный ответ: Я просто импортировал тот же точный проект на другую машину с немного другой конфигурацией: Eclipse 3.6.2 (вместо 3.6.1 в проблемной системе, описанной выше) и SDK R13 (вместо R9 в проблемной системе).

Затем я попытался экспортировать его, используя те же самые точные шаги, описанные выше. Работает как шарм!

Что это? Voodoo?

Что случилось со днями, когда IDE вела себя более предсказуемо, чем программное обеспечение, которое я пытался разработать?

Следующий шаг: Обновите Eclipse (до 3.6.2) только, в проблемной системе и посмотрите, разрешает ли это проблема в этой системе.

Обновление: Я только что закончил обновление Eclipse 3.6.1 до 3.6.2 в системе оскорблений. Оказывается, невозможно установить Eclipse и сохранить существующий ADT. https://dl-ssl.google.com/android/eclipse/ заставляет вас устанавливать "самую последнюю и самую большую", даже если вы хотите иначе (например, для управления конфигурацией и отслеживания). Итак, с новым Eclipse 3.6.2 я получил ADT 16.0.0.v201112150204-238534. Работает как шарм!

Коренной причиной и объяснением нечетного поведения комбинации Eclipse 3.6.1 + ADT 9.0.1.v201101191456-93220 никогда не будет известно... и это комбо, с которым разработчики должны (и сделали) выпускать коммерческие приложения на Android Market на некоторых момент времени. Удивительно.

Ответ 2

У меня тоже была такая же проблема, и я решил ее:

  • Удалить папку bin и gen
  • Удалите библиотеки зависимостей (если есть) и добавьте их обратно
  • Наконец, очистите проект и снова постройте его.

Готово!