【问题标题】:Testing Android app release build variant测试 Android 应用发布构建变体
【发布时间】:2017-11-28 04:28:54
【问题描述】:

我为我的 Android 应用编写了许多单元测试和仪器测试。到目前为止,我只针对调试构建变体运行这些。是否有必要针对发布版本变体运行测试?有什么不同可能会产生不同的测试结果?我能想到的主要是启用 ProGuard 时,我还没有这样做。 ProGuard 会做什么来使我有必要运行我的测试套件?我还应该注意哪些需要测试发布版本变体的问题?

【问题讨论】:

    标签: android testing android-proguard


    【解决方案1】:

    是否有必要针对发布版本变体运行测试?

    我认为你应该这样做。

    有什么不同会导致测试结果不同?

    几个例子:

    • 您的代码可能使用BuildConfig 类的字段来启用/禁用某些工作流。一些库也可能使用它,尤其是BuildConfig.BUILD_TYPE。这样做很常见:

      if (BuildConfig.BUILD_TYPE.equals("debug") {
         ACRA.init(...);
         Stetho.init(...);
         ...
      }
      

      但由于尝试使用未正确初始化的组件/库而导致发布版本中的代码失败。

    • 正如您所提到的,ProGuard 可能会丢弃您的一些类,除非它配置正确(例如,假设您忘记为某些 3rd 方库添加规则)。针对发布变体运行测试可确保 ProGuard 配置正确。

    ProGuard 会做什么来使我有必要运行我的测试套件?

    ProGuard 可能会删除例如通过反射加载的类/方法/字段,除非您向它们添加 @Keep 注释。它还可能重命名 Realm、Retrofit、Gson 或 Volley 等库使用的类,导致所有单元和集成测试在调试版本(未启用 ProGuard)上通过,但在发布版本上失败。在发布我们的新 APK 之前,您肯定想测试这些。

    我还应该注意哪些需要测试发布版本变体的问题?

    发布版本还可能应用 PNG 处理、通过 Gradle 中的 buildConfigField 方法指定不同的参数、按 ABI 或密度应用拆分或启用/禁用 multidex 等。所有这些都可能对您的应用的工作方式产生影响,所以为什么不采取安全措施也对其进行测试。

    使用这些可以发现的另一个常见问题是确保您没有不小心将代码放在错误的位置(例如/src/debug/java/),而这些代码恰好在调试版本中加载,但在其他变体中没有。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多