当前位置: 首页 > wzjs >正文

专业做网站方案seo站长综合查询

专业做网站方案,seo站长综合查询,做赌博彩票网站吗,怎么优化网站代码1,背景 我们想要在system_server进程里扩展一些我们自己的功能。 考虑到解耦和编译依赖的问题,我们用PRODUCT_SYSTEM_SERVER_JARS预置我们的类,然后用反射jar里面的类的方式来实现代码引用。 2,遇到的问题 在SystemServer.jav…

1,背景

我们想要在system_server进程里扩展一些我们自己的功能。

考虑到解耦和编译依赖的问题,我们用PRODUCT_SYSTEM_SERVER_JARS预置我们的类,然后用反射jar里面的类的方式来实现代码引用。

2,遇到的问题

在SystemServer.java里用Class.forName可以反射到目标类。
在ParsingPackageUtils.java里用Class.forName 无法 反射到目标类。

log如下:
04-24 14:58:43.514 811 811 W PackageParsing: initSystemServerJarDemo, got exception.
04-24 14:58:43.514 811 811 W PackageParsing: at com.android.internal.pm.pkg.parsing.ParsingPackageUtils.initSystemServerJarDemo(ParsingPackageUtils.java:329)
04-24 14:58:46.120 811 811 D SystemServer: initSystemServerJarDemo, result:2

两个java里反射时,使用的是一样的方法:

    private void initSystemServerJarDemo(){String classPath = "com.demo.systemserverdemo.SystemServerDemo";try {Class classObj = Class.forName(classPath);Object obj = classObj.getDeclaredConstructor().newInstance();Method method = obj.getClass().getDeclaredMethod("test");method.setAccessible(true);int result = (int) method.invoke(obj);Slog.d(TAG, "initSystemServerJarDemo, result:"+result);} catch (Throwable ex){Slog.d(TAG, "initSystemServerJarDemo, got exception.", ex);}}

3, 问题分析

3.1,原因猜测

可能是类加载器的双亲委派机制导致的。

ParsingPackageUtils.java在framework.jar里;SystemServer.java在service.jar里。
framework.jar属于bootJar,加载顺序在service.jar之前;
framework.jar的类加载器,有可能是services.jar的父加载器。

类加载器会向当前ClassLoader和父加载器ClassLoader查找目标class;
framework.jar里的ParsingPackageUtils.java不会向子加载器查询SYSTEM_SERVER_JARS里的类;

3.2,验证结论

我们可以打印出来SystemServer.java的ClassLoader及其父加载器。
并打印出来ParsingPackageUtils.java的ClassLoader及其父加载器。
来确认类加载器对象是否存在父子关系。
使用以下方法打印类加载器信息:
private void printClassLoader(){
boolean recycle = true;
ClassLoader loader = getClass().getClassLoader();
while (recycle){
if(loader == null){
recycle = false;
return;
}
Slog.d(TAG, “initSystemServerJarDemo, loader hash:”+loader.hashCode()+“, loader class:”+loader.getClass().getName());
loader = loader.getParent();
}
}
输出如下:
04-24 15:21:27.443 806 806 D PackageParsing: initSystemServerJarDemo, loader hash:3047529, loader class:java.lang.BootClassLoader
04-24 15:21:30.883 806 806 D SystemServer: initSystemServerJarDemo, loader hash:179379372, loader class:dalvik.system.PathClassLoader
04-24 15:21:30.884 806 806 D SystemServer: initSystemServerJarDemo, loader hash:3047529, loader class:java.lang.BootClassLoader

3.3 结论

把类加载器打印出来,发现framework-PackageParsing的ClassLoader hash:3047529,
确实是SystemServer的类加载器(hash:179379372)的父类。

所以父加载器(hash:3047529)里的类,无法拿到子加载器里的东西。

因为Class.forName就是拿当前类加载器去查找类的。

libcore/ojluni/src/main/java/java/lang/Class.java

    public static Class<?> forName(String className)throws ClassNotFoundException {Class<?> caller = Reflection.getCallerClass();//当前类return forName(className, true, ClassLoader.getClassLoader(caller));}

4,改善

我们无法在framework.jar里的java类里,通过当前类加载器拿到目标类。
我们可以创建一个新的类加载器,就可以加载jar里面的类。

DexClassLoader classLoader = new DexClassLoader("/system/framework/**Demo.jar",null, null,this.class.getClassLoader());
Class classObj = classLoader.loadClass("com.demo.systemserverdemo.SystemServerDemo");
Constructor constructor = classObj.getDeclaredConstructor();
constructor.setAccessible(true);
constructor.newInstance();

--------------------------------end-----------------------------------

http://www.dtcms.com/wzjs/145421.html

相关文章:

  • 建站 手机网站cpc广告接单平台
  • 建设网站查询长春网长春关键词排名站设计
  • 地产股最新消息seo营销的概念
  • 邢台做网站动态今日中国新闻
  • 阿里巴巴网站威海哪里做8个公开大数据网站
  • 专业做网站流程东莞网站建设排名
  • 郑州做网站公司+卓美今日足球赛事数据
  • 企业网站建设的基本原则今天最新新闻摘抄
  • frontpage做网站教程百度一下你就知道官网新闻
  • 免费培训学校网站源码百度查询
  • 做网站保存什么格式最好google怎么推广
  • 长沙网站优化外包服务百度大数据
  • 佛山网站建设公司怎么做seo经验
  • 怎么做网站在网上能搜到你网站优化推广怎么做
  • 如何做别人网站镜像自动seo系统
  • 可以做微信小测试的网站北京专门做seo
  • 工程项目编号查询系统seo网络优化师招聘
  • 南宁关键词网站排名西安百度推广客服电话多少
  • 广东省建设厅安全员b证报名网站seoul是啥意思
  • 重庆住房城乡建设委员会官方网站推广app的软文案例
  • 网站开发主管要做什么百度关键词快速排名
  • 信誉好的永州网站建设google海外推广
  • html5网站动效怎么做企业微信管理系统
  • 果蔬网站规划建设方案关键词排名工具有哪些
  • 小程序开发教程百度网盘品牌词优化
  • 深圳网站建设公司建网站教程
  • 用easyui 做的网站网站策划报告
  • 衡水网站制作报价自己做seo网站推广
  • 网站的关于我们页面seo课培训
  • 哈尔滨网站公司小红书网络营销策划方案