gpt4 book ai didi

java - 从相同的源代码构建可以产生功能不同的可执行文件吗?

转载 作者:IT老高 更新时间:2023-10-28 11:21:19 26 4
gpt4 key购买 nike

最近,我的一位同事说过这样的话:“构建服务器从相同源代码生成的连续 APK(可执行文件)可能不一样”。本次讨论的上下文是在构建 X 上执行的 QA 是否也适用于构建 Y,这是由相同的构建服务器(以相同的方式配置)从相同的源代码执行的。

我认为由于各种因素(例如不同的时间戳),生成的可执行文件可能并不相同,但问题是它们是否可以在功能上不同。

我能想到的唯一一种情况是,相同的源代码可能产生不同的功能是多线程问题:如果多线程代码同步不正确,则执行不同的重新排序/优化操作在编译时可能会影响这种不同步的代码并改变其功能行为。

我的问题是:

  1. 同一构建服务器从同一源代码执行的连续构建是否会在功能上有所不同?
  2. 如果 #1 为真,这些差异是否仅限于不正确同步的多线程代码?
  3. 如果#2 为假,其他可以改变的部分是什么?

任何相关 Material 的链接将不胜感激。

最佳答案

在某些情况下当然是可能的。我假设您正在使用 Gradle 构建您的 Android 应用。

案例 1:您正在使用包含在版本通配符中的第 3 方依赖项,例如:

编译 somelib.1+

在这种情况下,依赖项可能会发生变化,这就是强烈建议使用显式依赖项版本的原因。

案例 2: 您正在使用 Gradle 的 buildConfigFields 将环境信息注入(inject)您的应用程序。这些值将被注入(inject)到您应用的 BuildConfig 类中。根据您使用这些值的方式,应用行为可能会因连续构建而有所不同。

案例 3: 在连续构建之间更新 CI 上的 JDK。尽管我认为极不可能,但您的应用程序行为可能会根据其编译方式而改变。例如,您可能在 JDK 中遇到了一个边缘情况,该情况在以后的版本中得到修复,导致以前工作的代码表现不同。

我认为这回答了你的第一个问题和第二个问题。

编辑:抱歉,我想我错过了您的 OP 中的一些重要信息。我的案例 2 是您的 示例,例如不同的时间戳和case 3违反了你的配置相同的方式。不过我会在这里留下答案。

关于java - 从相同的源代码构建可以产生功能不同的可执行文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35527794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com