Google是从移动Dalvik到ART(Android的运行系统).
我试图了解它是如何改善性能的.
我找到的最好的解释是下面的图像:

其中一个已改变的主要成分是dexopt对dex2oat.
由于我对这些没有太多了解,有谁可以解释这些差异以及这将如何改善性能?
在Android 5.0之前,我能够使用DexClassLoader和调用loadClass()方法动态加载DEX文件,但是使用最新的Android版本,我得到了一个ClassNotFoundException.
这是我在做的事情:
生成DEX文件.
../android-sdk/android-sdk-linux_86/build-tools/21.1.1/dx --dex --output=bin/output.dex bin/output.jar
Run Code Online (Sandbox Code Playgroud)创建一个DexClassLoader.
DexClassLoader cl = new DexClassLoader(
dexFile.getAbsolutePath(),
odexFile.getAbsolutePath(),
null,
mContext.getClassLoader());
Run Code Online (Sandbox Code Playgroud)呼叫 cl.loadClass("myMethod");
我知道ART使用dex2oat来生成一个由ART加载的ELF文件但是在步骤2中我生成了一个ODEX文件,因此我不需要在ART中运行以在运行时加载DEX文件,任何人都可以帮助我 ?
尝试启动CameraApp时被迫关闭:
08-15 15:36:19.807 E/dex2oat (29758): Failed to create oat file: /data/dalvik-cache/arm/system@priv-app@LGCameraApp@LGCameraApp.apk@classes.dex: Permission denied
Run Code Online (Sandbox Code Playgroud)
logcat可以提供启动应用优化日志吗?我应该找哪个关键字?
一段时间后,我重新打开了一个 Android Studio 项目,并且像往常一样看到了快速构建,但现在 Android Studio (3.5) 的“安装”步骤需要几分钟,而过去需要几秒钟。
如果我在安装时打开设备 Logcat,我可以看到大量这些:
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.onSaveInstanceState(android.os.Bundle)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.onViewCreated(android.view.View, android.os.Bundle)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.onViewModelCreated()
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.removeCancelListener(com.package.base.view.BaseDialog$CancelListener)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.removeDismissListener(com.package.base.view.BaseDialog$DismissListener)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.setChildFragmentInjector(dagger.android.DispatchingAndroidInjector)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.setSharedValue(java.lang.String, java.lang.Object)
W/dex2oat: Method processed more than once: void com.package.base.view.BaseDialog.setViewModelFactory(androidx.lifecycle.ViewModelProvider$Factory)
W/dex2oat: Method processed more …Run Code Online (Sandbox Code Playgroud)