Android应用程序启动时间太慢检查:JNI

Android应用程序启动时间太慢检查:JNI,android,performance,java-native-interface,startup,Android,Performance,Java Native Interface,Startup,根据ActivityManager我的android应用程序的启动时间约为3.6秒: I/ActivityManager: Displayed app.com.app/.Activity.MainActivity: +3s653ms 我承认我的应用程序可能没有完全优化,因为根布局层次结构和碎片在启动时膨胀,但我不认为代码优化会让我赢2秒,我已经根据需要尽可能多地缩短代码 然后,在logcat中,我发现一些与检查有关的问题:启动时的JNI。 从我的应用程序中,JNI的设置非常长: 2020-04

根据
ActivityManager
我的android应用程序的启动时间约为3.6秒:

I/ActivityManager: Displayed app.com.app/.Activity.MainActivity: +3s653ms
我承认我的应用程序可能没有完全优化,因为根布局层次结构和碎片在启动时膨胀,但我不认为代码优化会让我赢2秒,我已经根据需要尽可能多地缩短代码

然后,在logcat中,我发现一些与检查有关的问题:启动时的JNI。 从我的应用程序中,JNI的设置非常长:

2020-04-12 22:14:04.324 12724-12724/? I/.com.socialtec: Late-enabling -Xcheck:jni
2020-04-12 22:14:04.376 12724-12724/? I/.com.socialtec: report jit thread pid = 12730
2020-04-12 22:14:05.848 12724-12757/socialtech.com.socialtech W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
2020-04-12 22:14:05.890 12724-12759/socialtech.com.socialtech W/DynamiteModule: Local module descriptor class for com.google.firebase.auth not found.
JNI从4.3秒开始,到5.8秒结束,所以大约需要执行1.5秒

为了确保问题不是代码优化或视图膨胀,我从我的
main活动中注释了所有
onCreate()
,以便清空它。没有任何呼叫,应用程序是空的,在2.5秒后启动,但JNI仍然在1.5秒左右

2.5-1.5=1s,这是我的空应用程序的持续时间

所以我假设JNI的运行时间取决于应用程序,但即使应用程序中没有运行代码,它怎么能运行这么长时间呢

JNI到底依赖于什么?有没有办法缩短它的运行速度来加速我的创业

我可以在应用程序中关闭它吗


我希望我的应用程序总启动时间大约为+/-2s,延迟启用-Xcheck:jni
是调试版本的默认设置,请参见

由于JIT编译/调试(否则,您无法设置任何与人类可读的源代码匹配的断点,而只能设置JVM字节代码),调试版本的运行速度通常明显低于完全优化的发布版本。买一台高端电脑(或智能手机,或两者兼而有之)可能会稍微加快速度;这也将提高Gradle和emulator的性能。坦率地说,你会得到你所付出的


仍然可以禁用
debug.checkjni
adb

adb shell setprop debug.checkjni 0
或者在模块的
build.gradle
中禁用JNI调试:

android {
    buildTypes {
        debug {
            jniDebuggable false
        }
    }
}