首页 文章 精选 留言 我的

精选列表

搜索[身份验证插件],共10010篇文章
优秀的个人博客,低调大师

Android 插件开发--类加载器

1). Android中类加载器 Android 中常用的类加载器有DexClassLoader和PathClassLoader,其中PathClassLoader是Android应用中的默认加载器。 DexClassLoader可以加载任何路径下的apk/dex/jar/zip PathClassLoader只能加载/data/app中的apk,也就是已经安装在手机中的apk。 2). DexClassLoader 构造方法: public DexClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent) ; 其中: 继承自BaseDexClassLoader dexPath: 加载apk/dex/jar/zip的路径 optimizedDirectory: 是dex的输出路径 librarySearchPath: 加载时候需要用到的lib库,一般不用 parent: DexClassLoader指定的父加载器 3). PathClassLoader 构造方法: public PathClassLoader(String dexPath, ClassLoader parent); public PathClassLoader(String dexPath, String librarySearchPath, ClassLoader parent); 其中 继承自BaseDexClassLoader dexPath: 加载dex路径 librarySearchPath: 加载时候需要用到的lib库 parent: PathClassLoader指定的父加载器 dex释放路径: /data/dalvik-cache 4). 查看各种类加载器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); printMoreClassLoader(); } private static final String TAG = "MainActivity"; /** * 打印各种类加载器 */ private void printMoreClassLoader() { Log.d(TAG, "Context类的类加载器:" + Context.class.getClassLoader()); Log.d(TAG, "ListView类的类加载器:" + ListView.class.getClassLoader()); Log.d(TAG, "应用程序默认的类加载器:" + getClassLoader()); Log.d(TAG, "系统类加载器:" + ClassLoader.getSystemClassLoader()); Log.d(TAG, "系统类加载器和Context类的类加载器是否相等:" + (Context.class.getClassLoader() ==ClassLoader.getSystemClassLoader())); Log.d(TAG, "系统类加载器和应用程序默认加载器是否相等:" + (getClassLoader() == ClassLoader.getSystemClassLoader())); Log.d(TAG, "================================================"); Log.d(TAG, "打印应用程序默认加载器的委派机制:"); ClassLoader classLoader = getClassLoader(); while (null != classLoader) { Log.d(TAG, "类加载器: " + classLoader); classLoader = classLoader.getParent(); } Log.d(TAG, "================================================"); Log.d(TAG, "打印系统加载器的委派机制:"); classLoader = ClassLoader.getSystemClassLoader(); while (null != classLoader) { Log.d(TAG, "类加载器:" + classLoader); classLoader = classLoader.getParent(); } } 打印结果: Context类的类加载器:java.lang.BootClassLoader@8b6e11e ListView类的类加载器:java.lang.BootClassLoader@8b6e11e 应用程序默认的类加载器:dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mazaiting.dynamicjar-2/base.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.mazaiting.dynamicjar-2/lib/arm64, /system/lib64, /vendor/lib64]]] 系统类加载器:dalvik.system.PathClassLoader[DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /vendor/lib64, /system/lib64, /vendor/lib64]]] 系统类加载器和Context类的类加载器是否相等:false 系统类加载器和应用程序默认加载器是否相等:false ================================================ 打印应用程序默认加载器的委派机制: 类加载器: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mazaiting.dynamicjar-2/base.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.mazaiting.dynamicjar-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.mazaiting.dynamicjar-2/lib/arm64, /system/lib64, /vendor/lib64]]] 类加载器: java.lang.BootClassLoader@8b6e11e ================================================ 打印系统加载器的委派机制: 类加载器:dalvik.system.PathClassLoader[DexPathList[[directory "."],nativeLibraryDirectories=[/system/lib64, /vendor/lib64, /system/lib64, /vendor/lib64]]] 类加载器:java.lang.BootClassLoader@8b6e11e

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册