【发布时间】: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 的设备上没有任何区别。
- 我说 Gradle 插件版本控制更改会影响构建的 APK 性能是否合理?
- 由于这种单线变化,还有哪些其他因素可能有问题?
- 我还能为您提供哪些其他信息来帮助我指明正确的方向?
谢谢。
编辑:我创建了一个重现此行为的示例应用程序。它由两个活动组成。当我按下按钮时,第一个启动第二个。第二个活动为大量迭代执行虚拟 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