安卓高手之路之java层Binder】的更多相关文章

很多人一提到Binder就说代理模式,人云亦云的多,能理解精髓的少. 本篇文章就从设计角度分析一下java层BInder的设计目标,以及设计思路,设计缺陷,从而驾驭它. 对于[邦德儿]的理解, 从通信的角度来看,就是一种通信方式而已,与socket没有任何区别.客户端transact,服务端onTransact.  但是,从[邦德儿]本身来说,如果客户端和服务端在一个进程,那么再通过底层驱动去把数据转过去就显得多余了.基于这种理论,设计的时候,如果客户端和服务端在一个进程就直接函数调用,而不再通…
我不喜欢那些泛泛而谈的去讲那些形而上学的道理,更不喜欢记那些既定的东西.靠记忆去弥补思考的人,容易陷入人云亦云的境地,最后必定被记忆所围困,而最终消亡的是创造力.希望这个高手之路系列能够记录我学习安卓的点点滴滴总结.从而汇成流,聚为江,成为海. 下面就结合代码分析一下ClassLoader这个东西. 安卓应用程序是一个Dalvik虚拟机,加载的是Dex格式的文件.加载Dex格式的文件从直观上理解就是ClassLoader做的事情.那么,我们就从应用程序的启动说起,因为应用程序的启动一定是与Cla…
我不喜欢那些泛泛而谈的去讲那些形而上学的道理,更不喜欢记那些既定的东西.靠记忆去弥补思考的人,容易陷入人云亦云的境地,最后必定被记忆所围困,而最终消亡的是创造力.希望这个高手之路系列能够记录我学习安卓的点点滴滴.从而汇成流,聚为江,成为海. 下面就结合代码分析一下ClassLoader这个东西. 安卓应用程序是一个Dalvik虚拟机,加载的是Dex格式的文件.加载Dex格式的文件从直观上理解就是ClassLoader做的事情.那么,我们就从应用程序的启动说起,因为应用程序的启动一定是与Class…
安卓中的画面不是纯粹由window组成.而是改成了window+view的组织模式.window是一个顶层窗口的概念.view就相当于在window内的控件.而subwindow则是依附于window的一些对话框.安卓在对window进行管理的时候,将window分为很多层,不同的层又对应于不同的window类型.下面这个图阐释了这种概念: 安卓首先将窗口按照layer分层,然后每一层又有很多window,每一个window又包含了很多的view和sublayer.这些分层的概念对于用户端是透明…
因为ClassLoader一定与虚拟机的启动有关系,那么必须从Zygote的启动开始看代码.下面就分析一下这些代码,行数不多: int main(int argc, const char* const argv[]) { // These are global variables in ProcessState.cpp //ProcessState.cpp中可能要用到一些main函数. mArgC = argc; mArgV = argv; mArgLen = 0; for (int i=0; …
源码位置:frameworks/base/core/java/android/content/pm/PackageParser.java 源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.java 1.PackageManagerService.java 用到一个很重要的工具类,PackageParser.java. 这里面是一些 工具类 和 工具方法,辅助PackageMan…
由于看C++和C代码看得很累,很辛苦.上一章终于解脱到java代码中来了. 第一个getClassLoader发生在main的preload方法中, public static void main(String argv[]) { preload(); } static void preload() { preloadClasses(); preloadResources(); } private static void preloadClasses() { final VMRuntime ru…
1.Service Manager的Java代理对象 在Java层中,Service Manager的代理对象类型为ServiceManagerProxy.它继承并且实现了IServiceManager接口,其中四个成员函数和一个变量如下: getService.checkService:获取Java服务代理对象 addService:注册Java服务 listService:获取已经注册的java服务表mRemote:类型为Ibinder,指向了一个BinderProxy对象.这个对象用来描述…
有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究. 之前的文章末尾部分说过了service call 可以用来调试系统的binder服务. 传送门: Android native进程间通信实例-binder篇之——简单的单工通信 这次可以用到这个命令了! 1. 随机选取一个java层的服务. adb shell 中输入命令 service list,选取一个服务来做研究,这次看中的是 textservices, 注意第一个服务 by…
致谢: 感谢 简行之旅的这篇blog:http://blog.csdn.net/l173864930/article/details/38455951,这篇文章是參考这篇blog的进行一步一步操作的,假设没有这篇好文章的话,貌似我这篇文章的诞生可能就有点难度了. 今天周日,昨天花了一天的时间总算是搞定了.问题还是想相应用程序的行为进行拦截的操作,就是像小米手机一样,哪些应用在获取你什么权限的信息.在之前写过相应用程序的行为进行拦截的方式(C层)实现的博客,在写完这篇之后.本来想是尽快的把Java…
致谢: 感谢 简行之旅的这篇blog:http://blog.csdn.net/l173864930/article/details/38455951,这篇文章是参考这篇blog的进行一步一步操作的,如果没有这篇好文章的话,貌似我这篇文章的诞生可能就有点难度了. 今天周日,昨天花了一天的时间总算是搞定了,问题还是想对应用程序的行为进行拦截的操作,就是像小米手机一样,哪些应用在获取你什么权限的信息.在之前写过对应用程序的行为进行拦截的方式(C层)实现的博客,在写完这篇之后,本来想是尽快的把Java…
基于javascript原型链的层层递进查找规则,以及原型对象(prototype)的共享特性,实现继承是非常简单的事情 一.把父类的实例对象赋给子类的原型对象(prototype),可以实现继承 function Person(){ this.userName = 'ghostwu'; } Person.prototype.showUserName = function(){ return this.userName; } function Teacher (){} Teacher.proto…
转载请注明原创出处,谢谢! 最近没有什么实战,准备把JVM知识梳理一遍,先以开发人员的交流来谈谈jvm这块的知识以及重要性,依稀记得2.3年前用solr的时候老是经常oom,提到oom大家应该都不陌生,那个时候也并没有从根本解决oom,由于对jvm不熟悉,只是去百度,到处都是配置jvm参数的,那个时候啥不懂,直接粘贴,但是并没有解决问题,通过这个就告诉我们作为开发人员也需要对jvm很熟悉才行,问题来了,很多人会说我的代码并没有出现oom啊,不需要关注啊,因为不理解不知道重要性,可以回头看看的我的…
关于promise我在之前的文章已经应用过好几次,如[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist,本文就来讲解下promise的常见用法. 为什么会有promise,他的作用是什么? promise主要是为了解决js中多个异步回调难以维护和控制的问题. 什么是promise? 从图中,我们可以看出,Promise是一个函数,这个函数上有在项目中常用的静态方法:all, race, reject,resolve等,原…
转载请注明原创出处,谢谢! 题目回顾 JVM菜鸟进阶高手之路十三,问题现象就是相同的代码,jvm参数不一样,表现的现象不一样. private static final int _1MB = 1024 * 1024; public static void main(String[] args) throws Exception { byte[] all1 = new byte[2 * _1MB]; byte[] all2 = new byte[2 * _1MB]; byte[] all3 = n…
Agenda: getSystemService(Context.CAMERA_SERVICE) CameraManager.getCameraIdList() ICameraService.aidl ICameraService.cpp camera2中从Java层到C++层,以获取摄像头数目为例. 1.当我们获取摄像头时,会调用 CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_S…
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52420803 前言:在上篇中,分析了MediaPlayer的从创建到setDataSource过程,尽管看了代码,但是没有从MediaPlayer生态上认识各类库之间依赖调用关系,在本篇中将作一个补充整体上的认识.看下今天的Agenda: MediaPlayer各个so库之间关系结构图 MediaPlayer各个具体类之间依赖关系图 prepare…
Spark GraphX宝刀出鞘,图文并茂研习图计算秘笈 大数据的概念与应用,正随着智能手机.平板电脑的快速流行而日渐普及,大数据中图的并行化处理一直是一个非常热门的话题.图计算正在被广泛地应用于社交网络.电子商务,地图等领域.对于图计算的两个核心问题:图存储模式和图计算模型,Spark GraphX给出了近乎完美的答案, 而Spark GraphX作为图计算领域的屠龙宝刀,对Pregel  API的支持更是让Spark GraphX如虎添翼.Spark GraphX可以轻而易举的完成基于度分布…
转自:http://gityuan.com/2015/12/26/handler-message-framework/ 相关源码 framework/base/core/java/andorid/os/Handler.java framework/base/core/java/andorid/os/Looper.java framework/base/core/java/andorid/os/Message.java framework/base/core/java/andorid/os/Mes…
https://mp.weixin.qq.com/s/qD1LFmsOiqZHD8iZX97OfA? 问题现象 代码如下,使用 ParNew + Serial Old 回收器组合与使用 ParNew + CMS 回收器组合时,结果为什么差异如此之大 ? private static final int _1MB = 1024 * 1024;    public static void main(String[] args) throws Exception {        byte[] all…
最近在JNI相关项目中遇到一个问题:在Java层传入多个int类型的参数,在jni层修改参数值或地址之后重新返回到Java层.这应该算是基本知识了,尤其是基本类型的参数往往看似简单,所以在之前学习jni时就一笔带过了,结果现在突然遇到这个问题竟然需要再查找资料学习,因此这周在重新复习一遍基础知识之后将此记录一下.走的再远,也不要忘记脚底的路. 还是用Demo来解释下需求和对应解决方案吧 public class LibraryManager { static{ System.loadLibrar…
杂谈:其实原理并没有很难,本质就是hook Android的框架层中的api将我们想要的key和iv(也可以没有,就打个比方),但是目前的话,很多厂家已经不在直接调用java层的这些加密算法的api了, 很多都是使用自己实现的加密算法,要么就是放在so里面,要么就是java层自己实现一个差不多算法的,这个我主要还是锻炼xposed的使用度,目前感觉挺好上手,甚至对我更友好,毕竟 java老粉丝了,但是也有缺点,就是每次编译完,就需要重启,这点真没frida方便,同时写这个项目,也让我更多去看安卓…
一.概述 在整个Android的源码世界里,有两大利剑,其一是Binder IPC机制,,另一个便是消息机制(由Handler/Looper/MessageQueue等构成的). Android有大量的消息驱动方式来进行交互,比如Android的四剑客Activity, Service, Broadcast, ContentProvider的启动过程的交互,都离不开消息机制,Android某种意义上也可以说成是一个以消息驱动的系统.消息机制涉及MessageQueue/Message/Loope…
paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对这些开源软件进行适当的修改... hibernate的2级缓存... override. 多继承... 多态 Feoye 变量... 自定义高强度的加密法,... UAPI 混搭风... 复用==继承... 善与使用全局变量... 注意性能,,你使用的测试数据应该在一亿条以上.... 注意内存泄露.…
来源 http://www.imooc.com/video/1430 主要内容 Java平台应用 核心概念:JVM,JDK,JRE 搭建Java开发环境 使用工具开发安卓程序 经验技巧分享 Java历史 1995诞生    Sun 1996         JDK1.0 2006         JDK6 2009.4.20被收购--->ORACLE 2011         JDK7 2014.3      JDK8 体系结构 Java SE : 基础核心(面向对象,API,JVM...) J…
这一讲我们主要剖析MapReduce的原理机制和流程. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发布云计算实战性资料,欢迎大家加入! 关于MapReduce,你至少需要知道以下几点: 1,         MapReduce是运行于分布式文件系统之上的,在Hadoop中就是运行于HDFS之上的: 2,         MapReduce主要用于大规模数据的并行运算,这种大数据通过指1TB以上:…
这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试replication具体的工作机制和流程的PDF版本请猛击这里. 王家林的“云计算分布式大数据Hadoop实战高手之路”之完整发布目录 ,每天都会在群中发布云计算实战性资料,欢迎大家加入! 在王家林 第六讲Hadoop图文训练课程:使用HDFS命令行工具操作Hadoop分布式集群初体验中,我们配置了had…
本讲通过实验的方式讲解Hadoop文件系统的操作. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发布云计算实战性资料,欢迎大家加入! 首先我们看一些比较常用的Hadoop文件系统的操作命令: 第一个常用命令:hadoop fs –ls 例如使用以下命令是列出文件系统根目录下的文件和文件夹,具体效果如下图所示: 第二个常用命令:hadoop fs –mkidr 例如使用以下命令是在HDFS中的根目录下…
最近做的Android项目需要调用C代码,进行串口通信及与硬件设备通信,因此要用到JNI,其中本地代码需要向Java层返回三个参数,分别为 参数一:int型: 参数二: 通信指令,本地代码中为unsigned char[]型,返回unsigned char[].int[]都可以,能直接将数据转换为16进制字符串最好(Android界面上要显示的就是数组每一位的16进制值): 参数三:同参数二. 具体的实现方式有两种. 第一种是C代码获取Java属性参数,本地修改参数值. 第二种是将三个参数定义为…
文章摘要: 本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后传递给c++层函数. (2)通过c++函数调用Android的java层函数,显示一个对话框,点击按钮退出程序. 1. 首先来简单学习一下JNI的相关知识,我这篇文章中简单实现了怎么在Android Java层调用c++函数.要想使用JNI,必须得…     本文主要实现两个功能: (1)通过Android sdk的API得到应用程序的包名(PackageName),然后…