Android ART 无法做到动态加载吗
发布网友
发布时间:2023-10-27 11:04
我来回答
共1个回答
热心网友
时间:2024-03-21 20:23
预编译对于VM的class loader而言可以看作是透明的——仍然可以动态下载dex文件,在装入时发生编译连接,再从生成的OAT里装入类,区别只是这个过程会比较慢。
如何获取能够加载的.dex文件
首先我们可以通过JDK的编译命令javac把Java代码编译成.class文件,再使用jar命令把.class文件封装成.jar文件,这与编译普通Java程序的时候完全一样。
之后再用Android SDK的DX工具把.jar文件优化成.dex文件(在“android-sdk\build-tools\具体版本\”路径下)
dx --dex --output=target.dex origin.jar // target.dex就是我们要的了
此外,我们可以现把代码编译成APK文件,再把APK里面的.dex文件解压出来,或者直接把APK文件当成.dex使用(只是APK里面的静态资源文件我们暂时还用不到)。至此我们发现,无论加载.jar,还是.apk,其实都和加载.dex是等价的,Android能加载.jar和.apk,是因为它们都包含有.dex,直接加载.apk文件时,ClassLoader也会自动把.apk里的.dex解压出来。