为什么Google的市场计费示例不能在已签名的发布版本中构建?

8

我尝试查看类似问题,但那里提供的解决方案似乎不适合我的特定情况:

我最初按照配置和构建应用内计费示例应用程序的说明进行操作,将安全密钥替换为来自Google开发者帐户的公钥,并将包名称从com.example更改为com.billtheape

然后,我构建了一个非发布版本,并在我的Android手机上运行了“健全性检查”。一切都很好(当然,除了访问Android市场服务器之外,因为根据设计它仅与已签名的发布版本一起使用)。

然后我尝试构建已签名的发布版本,但是收到了错误消息:

[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;

现在的问题是即使生成了“调试版本”构建,也会产生相同的错误,无论我尝试多少次清理项目。

对我来说,这看起来不像是Build Path问题,就像接受的答案所描述的那样(我也检查过了,但没有发现任何可疑的东西)。所以我尝试了其他方法:

  1. 退出Eclipse
  2. %ANDROID_HOME%\extras\google\market_billing\gen\com下发现了三个子目录:(1) android (2) example (3) billtheape
  3. 删除子目录example
  4. 启动Eclipse并清理项目。

现在调试版本可以正确构建,但签名版本仍然生成相同的错误。事实证明,删除那个多余的子目录并不是做魔术的关键,而是重新启动Eclipse,然后清理项目。

好吧,至少我已经把“调试版本”修复好了,但签名发布仍然失败并显示相同的错误。

您有什么想法,这个错误是什么意思,为什么会出现,如何解决?

2个回答

11

简单回答: 因为Eclipse + ADT太烂了。 这就是原因。

详细回答: 我刚刚将完全相同的项目导入到另一台机器上,该机器配置略有不同: Eclipse 3.6.2(而非上述问题系统中的3.6.1)和SDK R13(而非问题系统中的R9)。

然后我尝试使用上述完全相同的步骤导出它。 像魅力一样运行!

这是什么? 巫术吗?

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
这个问题对大家来说解决了吗?我正在使用带有ADT r17的Eclipse 4.3,并且第一次遇到这个问题。我找不到任何适当的解决方案。 - lbrendanl

3

我之前也遇到了同样的问题,我通过以下步骤解决了它:

  1. 删除 bin 和 gen 文件夹
  2. 移除依赖库(如果有),然后重新添加它们
  3. 最后清理项目并重新构建

完成!


你又遇到这个问题了吗? - user2805663

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接