【问题标题】:Can a change in Gradle plugin version affect APK performance?Gradle 插件版本的更改会影响 APK 性能吗?
【发布时间】:2018-01-15 19:12:40
【问题描述】:

我最近将我的 Android 应用程序从使用 Gradle 插件 2.2.3 升级到 Gradle 插件 3.0.1。由于这些更改,我的应用程序的性能受到了影响(在1s,但很明显)在启动活动、在 CursorLoader 完成后重新加载视图等时。

例如,在一种情况下,用户执行查询数据库并加载另一个屏幕的操作。这次以毫秒为单位的时间从大约 470 毫秒变为 1200 毫秒。我觉得我应该首先解决为什么延迟会这么大,但我现在主要关注的是 gradle 插件版本更改将如何影响它。

我决定通过仅升级到 2.3.0 来缩小问题范围。性能问题依然存在。这是我重现缓慢行为所必需的项目级 Gradle 文件中的唯一更改:

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.3'
    ...
}

更改为...

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.0'
    ...
}

构建工具的版本始终为 26.0.2。我已经在运行 Marshmallow 的设备和运行 Lollipop 的设备上验证了缓慢。我发现在运行 Nougat 的设备上没有任何区别。

  1. 我说 Gradle 插件版本控制更改会影响构建的 APK 性能是否合理?
  2. 由于这种单线变化,还有哪些其他因素可能有问题?
  3. 我还能为您提供哪些其他信息来帮助我指明正确的方向?

谢谢。

编辑:我创建了一个重现此行为的示例应用程序。它由两个活动组成。当我按下按钮时,第一个启动第二个。第二个活动为大量迭代执行虚拟 for 循环,记录时间戳之前和之后的日志。

主活动:

startActivity(new Intent(MainActivity.this, SecondActivity.class));

第二个活动:

@Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "SecondActivity:onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "Before wait...");
        for (int i = 0; i < 1000000000; i++) {

        }
        Log.i(TAG, "After wait...");
    }

结果:

2.2.3:
01-15 14:23:54.65 I/SecondActivity: SecondActivity:onCreate
01-15 14:23:54.705 I/SecondActivity:等待之前...
01-15 14:23:56.635 I/SecondActivity:等待后...
(2 秒)

2.3.0:
01-15 14:25:25.185 I/SecondActivity: SecondActivity:onCreate
01-15 14:25:25.265 I/SecondActivity:等待之前...
01-15 14:25:55.795 I/SecondActivity:等待后...
(30 秒)

【问题讨论】:

  • 原问题的答案是否定的。 Gradle 是一个构建系统。它编写的apk不会因gradle版本而异,输出不再依赖于gradle。
  • 感谢您的澄清。事后看来,我认为这是罪魁祸首真是愚蠢。

标签: android gradle android-build gradle-plugin


【解决方案1】:

我转到首选项(构建、执行、部署 > 即时运行)并禁用即时运行。我的问题解决了。我想我在旧版本上使用了这么长时间后,不习惯这个功能。

我能找到的最接近的解释是: https://medium.com/google-developers/instant-run-how-does-it-work-294a1633367f

从现在开始,每次调用一个方法 — 在我们的任何地方 app — 注入到我们原始类文件中的工具 与应用服务器通信以查看它们是否已更新。

现在我要停止用头撞墙了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2012-02-04
    • 2011-01-28
    相关资源
    最近更新 更多