调试版和发布版apk的区别

53

我对安卓和Android Studio都很陌生。通过我的Visual Studio经验,我们在另一台机器上测试.exe文件时,会复制release文件夹和.exe文件。

但是在Android Studio中,我看到我的同事通过将debug APK复制到USB驱动器并部署到其他系统来测试它。看起来也可以正常工作。

请问部署该版本的后果是什么?Release版本只针对Play Store使用吗?

除了debug版本包含调试信息可能会使其速度变慢或更大之外,技术上还有什么区别/后果?


正如其名称所示,调试 APK 可以在我们的 IDE 中进行调试。这使得解决应用程序中的问题更加容易。此外,发布 APK 使用开发人员自己创建并带有他/她密码的密钥库进行签名,因此更加安全。 - Sunil Sunny
4个回答

23

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

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

  • 对于发布版本,您需要显式指定要使用的签名密钥,并关闭调试标志,以防止进行调试。

  • 可以为发布版本开启Proguard。(也可以为调试版本开启,但不建议这样做)。这一步需要明确执行,默认情况下为false。

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


根据以上所有答案,我可以得出结论:调试版本实际上是一个完全自包含的 APK 版本,甚至可以在生产环境中部署,但缺少一些代码压缩/优化/缩小以及开发者身份验证的限制。如果我的结论有误,请指正。谢谢。 - UB_Roy
2
是的,APK签名是我认为在生产环境中发布时最重要的。其他东西可以应用于两种构建类型。 - Viral Patel
"并且调试标志将被关闭,以便无法进行调试" ... 这是否意味着其他人可以调试“调试构建”,并访问应用程序的代码? - Shafizadeh
4
@Shafizadeh 发布的 APK 必须被解压并手动修改和重新压缩+由调试证书签名,才能被其他人以 debuggable 的方式进行调试。代码访问始终对每个用户都可用,发布时是“混淆”的,而不是“阻止”的。你无法向用户隐藏代码,用户必须能够运行代码,在某个阶段,代码必须对用户可用,此时熟练的用户可以复制代码并探索/反向工程。 “混淆”只是使这个过程更加困难。 - Ped7g
所以,如果我手动使用我的签名(像我一直在测试中做的那样)对调试 APK 进行签名,并手动启用 ProGuard 等功能,那么它基本上就是一个生产就绪的 APK,与实际发布 APK 之间唯一的区别是它可以进行调试 - 我是对的吗?还是我误解了? - Edw590

15
重要的一点区别是,发布APK通常已经运行了ProGuard(代码缩减),以便检测和删除未使用的代码,从而减小APK大小。
来自缩减代码和资源
请注意,代码缩减会降低构建时间,因此如果可能的话,应避免在调试版本上使用它。然而,对于用于测试的最终APK,您必须启用代码缩减,因为如果不充分定制要保留的代码,则可能引入错误。
您的同事们可能会在调试构建类型上进行测试,以节省时间,因为与调试APK相比,构建发布APK需要更长时间。

10
你可以在调试版本中启用ProGuard。 - Viral Patel

9
以上所有答案都是正确的,但主要区别在于如果我们使用debug.apk将应用程序安装到设备/模拟器上,则可以执行以下操作:
* 使用调试器进行调试 * 使用Android Studio分析器对CPU、内存和网络进行分析 * 在Logcat中查看日志 * 使用布局检查器调试布局
如果使用release.apk,则无法使用上述功能,并且我们需要配置某些功能/库以在特定输出类型中工作(例如,我们只能在调试apk中使用leakCanary)。

5
< p >如果在< code >build.gradle< /code >中没有特别指定,调试版本和发布版本之间的主要区别就是签名的密钥。大多数应用程序分发渠道都希望使用发布密钥来验证开发人员,否则将不会接受应用程序。除此以外,这两个版本没有其他区别。

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

然而,这两个版本之间可能会有许多变化。如果有任何变化,应在您的< code >build.gradle< /code >文件中进行指定。因此,您应该注意这个文件。


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