为什么Google的市场结算样本无法在签名版本中构建?

Bil*_*Ape 8 android in-app-billing

我试着研究类似的问题,但那里提供的解决方案似乎不符合我的特殊情况:

我最初遵循配置和构建应用内结算示例应用程序的说明,使用Google开发人员帐户中的公钥替换安全密钥,并将软件包名称更改com.examplecom.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;
Run Code Online (Sandbox Code Playgroud)

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

对于我所看到的接受的答案(我也检查过,但找不到任何可疑的东西),这对我来说并不像构建路径问题.所以我尝试了别的东西:

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

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

好的,所以至少我得到了"调试版本"的工作,但是签名版本的导出保持失败并出现同样的错误.

知道这个错误意味着什么,它为什么会发生以及如何修复它?

Bil*_*Ape 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发布商业级应用程序的组合.很棒.

  • 这个问题已经消失了吗?我正在使用带有ADT r17的Eclipse 4.3,这是我第一次遇到这个问题.我找不到任何适当的解决方案 (2认同)