为什么 App 启动延迟 40 秒?
why App is Starting with 40 seconds of delay?
在我的 SplashActivity
中我使用了 retrofit
和 eventbus
.
我必须等待开始改造请求或者可能开始 APP
至少 40 秒 。
之前只是显示一个白页。
每一秒我都会得到两个这样的日志系列:
01-04 09:36:08.104 5217-5217/? W/dex2oat: Unexpected CPU variant for X86 using defaults: x86
01-04 09:36:08.104 5217-5217/? W/dex2oat: Mismatch between dex2oat instruction set features (ISA: X86 Feature string: smp,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) and those of dex2oat executable (ISA: X86 Feature string: smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) for the command line:
01-04 09:36:08.104 5217-5217/? W/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg & --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.106 5217-5217/? I/dex2oat: /system/bin/dex2oat --debuggable --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.618 5217-5217/? I/dex2oat: dex2oat took 514.000ms (threads: 2) arena alloc=259KB (266112B) java alloc=86KB (88464B) native alloc=830KB (850408B) free=1729KB (1771032B)
我该怎么办?
谢谢。
禁用即时 运行,并从文件 -> 设置
禁用即时部署 运行
特别是 Mismatch between dex2oat instruction set features
警告 - 可能 导致延迟,可能是由于配置了 运行ning 模拟器运行 与 ABI(例如 x86,x86_64)相关的 APK 中没有原生库。
例如,模拟器可能 运行 与 x86_64
CPU/ABI 并用,而 APK 仅包含 x86
和(也许) armeabi-v7a
.
使用 Android Studio 可以轻松检查模拟器的 ABI:
(这里的模拟器是x86
).
使用 Android Studio 也可以轻松检查包含哪些本机库的风格。通过在项目文件树视图中双击打开 APK 文件,或从外部拖放它。然后,展开内容树的 'lib' 部分:
(在这里您可以看到所有常见的 ABI 都已包括在内,即 x86_64
、x86
和 armeabi-v7a
)。
因此,为了尝试解决此类问题(这对我有用),您可以尝试重新创建正确的 AVD,或者重新访问您应用的 splits
配置。这是标准的单一口味 APK 的典型配置:
android {
// ...
splits {
abi {
reset()
enable false
universalApk false
include 'armeabi-v7a', 'x86', 'x86_64'
}
}
}
您可以在 include
部分下控制这方面的 APK 内容。但是请注意,如果不拆分 APK,其整体大小会增加。
如果你有更复杂的APK拆分配置,你仍然可以得到这个结果,但最好先参考official documentation。
在我的 SplashActivity
中我使用了 retrofit
和 eventbus
.
我必须等待开始改造请求或者可能开始 APP
至少 40 秒 。
之前只是显示一个白页。
每一秒我都会得到两个这样的日志系列:
01-04 09:36:08.104 5217-5217/? W/dex2oat: Unexpected CPU variant for X86 using defaults: x86
01-04 09:36:08.104 5217-5217/? W/dex2oat: Mismatch between dex2oat instruction set features (ISA: X86 Feature string: smp,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) and those of dex2oat executable (ISA: X86 Feature string: smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt) for the command line:
01-04 09:36:08.104 5217-5217/? W/dex2oat: /system/bin/dex2oat --runtime-arg -classpath --runtime-arg & --debuggable --instruction-set=x86 --instruction-set-features=smp,ssse3,-sse4.1,-sse4.2,-avx,-avx2,-lock_add,-popcnt --runtime-arg -Xrelocate --boot-image=/system/framework/boot.art --runtime-arg -Xms64m --runtime-arg -Xmx512m --instruction-set-variant=x86 --instruction-set-features=default --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.106 5217-5217/? I/dex2oat: /system/bin/dex2oat --debuggable --dex-file=/data/data/com.idek_2.titrefarsi/files/instant-run/dex/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --oat-fd=35 --oat-location=/data/user/0/com.idek_2.titrefarsi/cache/slice-com.android.support-cardview-v7-25.0.1_1baeb40f31cb26daebad20328eaaeda07318001c-classes.dex --compiler-filter=speed
01-04 09:36:08.618 5217-5217/? I/dex2oat: dex2oat took 514.000ms (threads: 2) arena alloc=259KB (266112B) java alloc=86KB (88464B) native alloc=830KB (850408B) free=1729KB (1771032B)
我该怎么办?
谢谢。
禁用即时 运行,并从文件 -> 设置
禁用即时部署 运行特别是 Mismatch between dex2oat instruction set features
警告 - 可能 导致延迟,可能是由于配置了 运行ning 模拟器运行 与 ABI(例如 x86,x86_64)相关的 APK 中没有原生库。
例如,模拟器可能 运行 与 x86_64
CPU/ABI 并用,而 APK 仅包含 x86
和(也许) armeabi-v7a
.
使用 Android Studio 可以轻松检查模拟器的 ABI:
(这里的模拟器是x86
).
使用 Android Studio 也可以轻松检查包含哪些本机库的风格。通过在项目文件树视图中双击打开 APK 文件,或从外部拖放它。然后,展开内容树的 'lib' 部分:
(在这里您可以看到所有常见的 ABI 都已包括在内,即 x86_64
、x86
和 armeabi-v7a
)。
因此,为了尝试解决此类问题(这对我有用),您可以尝试重新创建正确的 AVD,或者重新访问您应用的 splits
配置。这是标准的单一口味 APK 的典型配置:
android {
// ...
splits {
abi {
reset()
enable false
universalApk false
include 'armeabi-v7a', 'x86', 'x86_64'
}
}
}
您可以在 include
部分下控制这方面的 APK 内容。但是请注意,如果不拆分 APK,其整体大小会增加。
如果你有更复杂的APK拆分配置,你仍然可以得到这个结果,但最好先参考official documentation。