【问题标题】:Difference between debug and release apks调试和发布 apk 之间的区别
【发布时间】:2016-12-16 07:17:14
【问题描述】:

我是 android 和 android studio 的新手。 根据我在 Visual Studio 中的经验,当我们在另一台机器上测试 .exe 时,我们会复制发布文件夹和 .exe。

但在 android studio 中,我看到我的同事通过使用 USB 驱动器在其他系统中复制和部署来测试调试 apk。似乎也有效。 我可以知道部署该版本的后果是什么吗?发布版本是否仅与 Play 商店相关?

除了调试版本包含可能使其变慢或庞大的调试信息之外,还有什么技术差异/后果?

【问题讨论】:

  • 顾名思义,调试 apk 可以在我们的 IDE 中调试。这使得解决我们应用程序中的问题变得更加容易。此外,发布 apk 使用开发人员自己与他/她制作的密钥库进行签名通过因此更安全。

标签: android apk release


【解决方案1】:

主要区别在于调试标志和签名密钥:

  • 对于调试版本,apk 将使用启用调试标志的默认调试签名密钥进行签名。

  • 对于发布密钥,您必须明确指定要签名的密钥,并且调试标志将被关闭,因此无法对其进行调试。

  • 可以为发布版本打开 Proguard。 (也适用于调试版本,但不建议)。这一步需要显式完成,默认为false。

注意:这些内容可以在您的 build.config 中进行更改,您可以选择您希望的任何排列和组合。

【讨论】:

  • 据我从上述所有答案中了解到,我可以得出结论,调试版本实际上是一个完全自包含的 apk 版本,它甚至可以部署在生产环境中,但缺少一些代码压缩/优化/收缩加上开发者认证。谢谢,如果我的结论有误,请纠正我。
  • 是的,apk 签名是我想说的,在生产中发布时最重要。其他东西可以应用于这两种构建类型。
  • "并且调试标志将被关闭,因此无法调试" ...这是否意味着“调试版本”可以被其他人调试?他们访问应用程序的代码?
  • @Shafizadeh 发布的 apk 必须解压并手动修改并重新压缩+通过调试证书重新签名,才能被其他人调试。访问代码始终可供每个用户使用,发布是“混淆的”,而不是“阻止的”。您不能向用户隐藏代码,用户必须能够运行代码,在某些阶段代码必须对用户可用,此时熟练的用户可以复制代码并进行探索/逆向工程。 “混淆”只会使过程更加困难。
  • 因此,如果我用我的签名手动签署一个调试 APK(正如我一直在做的测试)并手动启用 ProGuard 之类的东西,它基本上是一个生产就绪的 APK,唯一的区别它与实际发布的 APK 之间是可以调试的事实 - 我说的对吗?还是我理解错了?
【解决方案2】:

一个重要的区别是,发布的 APK 通常会在其上运行 ProGuard(代码收缩),它会检测并删除未使用的代码以减小 APK 大小。

来自Shrink Your Code and Resources

请注意,代码缩减会减慢构建时间,因此应尽可能避免在调试构建中使用它。但是,务必在用于测试的最终 APK 上启用代码收缩,因为如果您没有充分自定义要保留的代码,它可能会引入错误。

您的同事可能正在测试调试构建类型以节省时间,因为与调试 APK 相比,构建发布 APK 可能需要更长的时间。

【讨论】:

  • 你也可以为调试版本启用 proguard
【解决方案3】:

以上所有答案都是正确的但是主要区别在于如果我们使用debug.apk在设备/模拟器上安装应用程序,我们可以

*用调试器调试它

*使用 android studio profiler 分析 CPU、内存、网络

*查看logcat中的日志

*使用布局检查器调试布局

如果使用release.apk,我们将无法使用上述功能,并且我们将一些功能/库配置为在特定的输出类型中工作(就像我们只能在调试 apk 中使用leakyCanary)

【讨论】:

    【解决方案4】:

    调试版本和发布版本之间的主要区别(如果在build.gradle 中另有说明)是它们签署的密钥。大多数应用分发渠道 [仅] 需要使用发布密钥签名的应用来验证开发人员的身份。否则,没有区别。

    发布版本还可能触发其他选项,例如代码混淆和拆分,因此请注意这些。

    但是,这两个版本之间可以带来许多变化。这些应该在您的build.gradle 中指定(如果有)。所以,你应该留意那里。

    【讨论】:

      猜你喜欢
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多