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

时间:2012-01-04 02:57:08

标签: android in-app-billing

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

我最初遵循Configuring and building the sample application针对应用内结算的说明,使用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;

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

在我所接受的答案描述的意义上,这并不像我看起来像构建路径问题(我也检查过,但找不到任何可疑的东西)。所以我尝试了别的东西:

  1. 退出Eclipse
  2. 发现三个子目录 %ANDROID_HOME%\extras\google\market_billing\gen\com :( 1)android (2)例子(3)billtheape
  3. 删除了子目录example
  4. 启动Eclipse并清理项目。
  5. 现在可以正确构建调试版本,但签名版本仍会生成相同的错误。事实证明,删除那个无关的子目录并不是什么魔术,而是重新启动Eclipse然后清理项目。

    好的,所以至少我得到了“调试版本”的工作,但签名版本的导出仍然失败并出现同样的错误。

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

2 个答案:

答案 0 :(得分:11)

简短回答:因为Eclipse + ADT很糟糕。 That's为什么。

更长的回答:我刚刚将同一个完全相同的项目导入到配置略有不同的不同机器上: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发布商业级应用的组合在某个时间点。 Amazing

答案 1 :(得分:3)

我也有同样的问题,我解决了它:

  1. 删除bin& gen文件夹
  2. 删除依赖库(如果有)并将其添加回来
  3. 最后清理项目并重新构建。
  4. 完成!