- 博客(90)
- 资源 (2)
- 收藏
- 关注
原创 移动应用安全和证书相关知识总结
文章目录加密对称加密(AES/DES)非对称加密(RSA等)数字签名数字证书自签名证书和CA证书证书链私钥,公钥和证书如何保存?证书指纹Android & IOS安装包签名参考文献数据在互联网上分发,就会涉及到数据安全问题,主要包括防止数据泄露 - 加密防止数据被篡改 - 数字签名防止数据调包 - CA证书加密对称加密(AES/DES)优点: 算法公开、计算量小、加密速度...
2020-04-01 11:40:22
758
原创 ReactNative-如何引入ReactAndroid源码模块到主工程
文章目录如何集成so冲突解决如何集成以下内容基于RN 0.61.5版本在新建一个RN项目并安装完node模块依赖后,在根目录执行npm run android即可启动编译并安装到目标设备android工程依赖的本地maven库配置 maven { // All of React Native (JS, Obj-C sources, Androi...
2020-04-01 11:16:50
889
原创 Gradle编译时所有Task信息打印
Gradle工程编译的过程,就是执行目标task的过程,如果task存在依赖,则先执行依赖task,如此反复,直到触达无依赖的task就这样,从无依赖task -> 目标task的执行链即建立,接着依次执行task即可,每个task之间数据传输,主要是通过task inputs和outputs描述文件来完成的所以,gradle编译所有task信息的打印,应该包含按task执行顺序打印...
2020-04-01 11:14:44
2250
原创 Android WatchDog介绍
文章目录Android WatchDogWatchDog初始化HandlerChecker介绍WatchDog检测逻辑介绍参考文献WatchDog,在早期的嵌入式系统,设计它是为了防止软件系统跑飞后最后一个挽救措施,就是重启设备,虽然有点暴力,但是一般重启后,对于很多偶现的bug,基本都能临时解决WatchDog的设计基本都需要包含如下三个功能投喂机制dump异常日志异常修复投喂机...
2020-02-12 11:40:50
1077
原创 Android帧率统计及其相关基础知识介绍
文章目录Android帧率统计及其相关基础知识介绍VSync介绍Choreographer的作用Handler同步屏障帧率计算参考文献Android帧率统计及其相关基础知识介绍帧率,在App层面,就是UI界面每秒可重绘的次数,它的上限是运行手机的屏幕刷新率,也就是屏幕每秒刷新的次数,一般来说,刷新率超过60,人眼就感知不到了,所以一般手机的屏幕刷新率都为60,因为超过60一没多大意义,二更耗电...
2020-02-12 11:28:09
3100
原创 Gradle - Android工程结构和编译相关介绍
文章目录Gradle - Android工程结构和编译相关介绍Gradle Wrapper构建流程gradle源码查看Gradle配置脚本介绍init.gradlebuild.gradle - rootsetting.gradlebuild.gradle - module构建变体-Build VariantModule库依赖 - Module Library dependenciesTasks创建...
2019-09-03 19:25:43
489
原创 Android ClassLoader介绍
文章目录Android ClassLoader介绍BaseDexClassLoaderPathClassLoader和DexClassLoader为什么要支持MultiDex?MultiDex打包安装加载Android ClassLoader介绍什么是class loader,对于Android来说,class loader主要做两件事情加载dex文件根据class path加载并返回对...
2019-08-27 15:44:51
505
原创 Android的注解处理器介绍
我们可以在java代码中添加很多的注解, 注解最终会绑定到target element上,每个注解我们都可以配置其retention policyCLASSAnnotations are to be recorded in the class file by the compiler but need not be retained by the VM at run time.RUNTIME...
2019-08-27 15:43:08
1195
原创 Android应用可执行文件的加载介绍(LoadedApk)
Android应用启动后可加载的代码文件有三种,按加载顺序依次如下:androidmanifest内uses-library指定的jarAPK包根目录的dex文件APK包lib目录下的so文件可以在manifest里随便指定想要加载的jar吗?当然不行,这个jar必须是在/etc/permissions/目录下的xml有过配置的,比如://截取/etc/permissions/pla...
2019-08-27 15:42:18
3567
原创 Android插件配置-Android Extension介绍
我们先来看一个普通app的build.grdle的定义apply plugin: 'com.android.application'android { compileSdkVersion 28 buildToolsVersion "28.0.3" defaultConfig { applicationId "com.harish.test.sample...
2019-08-27 15:38:55
2375
原创 Android Context总结
Context是什么?Android应用的上下文,既然是上下文,就说明其所拥有的功能,是要贯穿整个app的生命周期的,比如说APK资源,系统服务等在Android中,对于系统创建的对象,咱们能从其身上拿到Context的主要有5个,四大组件和Application对象Activity,Service,Application都派生自ContextWrapper,说明其本身就是一个代理Conte...
2019-04-21 10:28:02
310
原创 Android插件化之DroidPlugin原理解析
DroidPlugin原理解析从系统设计的角度,组件和窗口的逻辑实体都存在于系统服务,比如Activity创建后,其逻辑控制主体在AMS,对于窗口,其实逻辑控制主体在WMSandroid将逻辑主体放置于系统服务,系统就可以对组件和窗口的生命周期,显示状态进行强掌控,这样就能做到在各种状态变更时能做到及时回调通知所以,创建任何组件,都需要通过RPC通讯到AMS创建 — 第一个hook点那逻辑...
2019-04-19 20:08:34
1950
原创 也来谈谈JavaScript中的闭包
public static final PackageManagerService main(Context context, Installer installer, boolean factoryTest, boolean onlyCore) { PackageManagerService m = new PackageManagerService(co
2017-12-15 18:02:38
256
原创 也来谈谈JavaScript的作用域链
每个编程语言都有作用域的概念,不管是C,C++,Java还是JavaScript,概莫例外!作用域最主要的作用是访问空间的限制,也就是说,作用域内定义的变量或者函数,只对该作用域或者其子子孙孙作用域可见两个不是直系关系的作用域是无法直接访问其内部定义的变量和函数的至于作用域是全局的,还是局部的,这个其实不是绝对的,因为任一作用域内定义的变量或函数对于其自身来说,都是局部的,但是
2017-12-15 17:22:17
235
原创 JavaScript原型和原型链新解
为什么说是新解呢?因为我看了网上很多描述JS原型的文章,很多都是这样描述的,JS对象分为两种,一个是普通对象,另外一个则是原型对象,其中原型对象包含prototype属性,普通对象则没有,还有就是,二者都包含__proto__来实现原型链等等我相信很多人看完后,都是死记硬背的记住了上面的内容,至于为什么JS要分两种对象,原因是什么?估计都不是很清楚,因为大家都是基于结果来分析的这里我尝
2017-12-15 12:30:37
246
原创 深入浅出正则表达式
正则表达式其实还是蛮简单的,因为它没有很强的逻辑在里头,我们只需要按照它的规则从头开始依次去读就好了话虽这么说,我相信很多人一开始接触正则,当看到那一连串“乱七八糟”的字符时,都会一脸懵逼,这是啥玩意?然后就自然而然的认为这东西很复杂,接着打心底就抵触使用正则,然后开始在网上搜看是否有现成的表达式可用,或者直接写代码来实现字符匹配。我自己就是这样最近终于花时间把这块东西看了下,下面是学...
2017-12-12 17:54:53
600
原创 Activity的launchMode和taskAffinity介绍
我们都知道Android对Activity是通过分组来管理的,也就是说,每一个Activity都会存在于某一个分组,即Task内系统在启动Activity的时候,需要根据Activity的相关配置参数来决定将Activity置放于哪个Task中(CreateNew or Chose An Existing One)本文只是做一些重点总结,详细的可阅读SDK文档Launch Mode:...
2017-03-10 18:13:59
648
原创 浅谈Android之Activity触摸事件传输机制介绍
8 Activity触摸事件传输机制介绍当我们触摸屏幕的时候,程序会收到对应的触摸事件,这个事件是在app端去读取的吗?肯定不是,如果app能读取,那会乱套的,所以app不会有这个权限,系统按键的读取以及分发都是通过WindowManagerService来完成 在WMS中,它的管理单位是WindowState,当你点击屏幕时,它会根据Z-Order顺序找到top & focus Wi
2017-02-14 11:49:42
1643
原创 浅谈Android之Activity 窗口显示流程介绍(二)
7.3 Activity Décorview布局(layout)Measure确定Décor View以及child views的大小,layout则是确定child view在其parent view中的显示区域,只有layout结束,view的left,right,top,bottom值才会被设置,getWidth和getHeight两个函数才会返回view最终的宽高值 对Fram
2017-02-14 11:47:31
477
原创 浅谈Android之Activity 窗口显示流程介绍(一)
7 Activity 窗口显示流程介绍Activity 窗口显示,其实就是Décor View绘制并显示的过程,但是在绘制之前,Décor View需要先做下面两件事情:1) 确定Décor View的大小2) 对Décor View进行布局操作,也就是确定DécorView所有child views的显示位置 由于Décor View的LayoutParams中宽高默认设
2017-02-14 11:45:43
3188
原创 浅谈Android之Activity Decor View创建流程介绍
6 Activity DecorView创建流程介绍上头已经完整的介绍了Activity的启动流程,Activity是如何绑定Window,Window的décor view是如何通过ViewRootImpl与WMS建立关联的,也就是说,整个框架已经有了,唯一缺的就是Activity如何初始化创建DecorView了。 接下去通过相对不是那么复杂的LinearLayout,来完整的介绍
2017-02-14 11:40:19
2713
原创 浅谈Android之App窗口视图管理
5 App窗口视图管理WindowManagerGlobal负责管理App所有要添加到WMS的窗口,接口即为上头的addView 首先,对于App本地窗口来说,其最核心的数据无非就两个,一个是Window Parameters,另一个就是窗口的DécorView,一个负责描述窗口属性,另外一个描述窗口视图 窗口有很多种类型,比如Activity关联Window,PopupWin
2017-02-14 11:34:28
1525
原创 浅谈Android之Activity相关介绍
4 Activity相关介绍Activity是android四大组件之一,主要用于显示用户界面,通过上面的章节我们已经知道,App Client如果要向系统屏幕输出图形数据,需要通过Surface来实现,那在开发过程中,调用Activity的setContentView来设置自定义视图,这个视图的图形数据是如何关联到Surface的呢?接下去就对相关内容做简单介绍。 Android通过
2017-02-14 11:28:54
732
原创 浅谈Android之SurfaceFlinger相关介绍(三)
3.3 Surface Java层相关封装主要介绍三个类,对应如下:JavaC++SurfaceSession.javaSurfaceComposeClient对应JNI文件为:android_view_surfacesession.cppSurfaceControl.javaSurface
2017-02-14 11:18:06
983
原创 浅谈Android之SurfaceFlinger相关介绍(二)
3.2 绘图表面相关(Surface& Layer & BufferQueue)App和SurfaceFlinger连接后,接下去就可以调用mClient->createSurface创建Surface, 然后SurfaceFlinger会对应的创建Layer,然后Layer内部会创建BufferQueueProducer和BufferQueueConsumer,一个负责生产graphic
2017-02-14 11:15:04
3407
原创 浅谈Android之SurfaceFlinger相关介绍(一)
SurfaceFlinger是GUI的核心,以系统服务的形式存在,负责将所有App的图形数据按照Z Order顺序混合并输出到FrameBuffer。根据图中描述,从下到上依次介绍:1) 这里的FrameBuffer指显示设备驱动和Gralloc帧缓冲区管理2) 面向SurfaceFlinger的Native Window3) 通过OpenGl ES图形库来处理图
2017-02-14 11:08:02
4014
原创 浅谈Android之Binder原理介绍(三)
2.4 C++层传输数据封装使用ProcessState和IPCThreadState建立好binder运行环境后,后续要做的,就是对发送和接收数据的封装,先从基础接口和类开始:1:IBinder binder发送和接收基础功能接口,最终要的接口函数是transact,对应数据传输2:BpBinder 实现IBinder,对应于binder proxy,主要用于binder数据的发送,
2017-02-14 11:00:25
985
原创 浅谈Android之Binder原理介绍(二)
2.2 ServiceManagerBinder Kernel提供命令BINDER_SET_CONTEXT_MGR来设置bindercontext manager:1) BINDER_SET_CONTEXT_MGR在binder kernel对应一个特殊的binder node,说其特殊,是因为这个bindernode没有binder对象相关数据(它本来就没有),只有设置进程(servi
2017-02-14 10:56:11
780
原创 浅谈Android之Binder原理介绍(一)
Linux的进程间通讯进制(IPC)很多,比如管道,socket,共享内存等等,但是Android为什么不直接使用这些方式,主要原因是传统的IPC方式要么效率无法满足,要么设计理念不够现代,无法满足Android系统设计的要求; 比如管道和socket,会存在内存数据多次拷贝,这如果在APP级别,或许是够用的,但是如果上升到系统级别,系统内部通信频次是极高的,如果效率不够,用户体验肯定会很
2017-02-14 10:51:53
3405
1
原创 浅谈Android之系统概述
先来看下Android SDK第一篇文章 What is android中一张描述Android系统结构的图:基于这张图,可以很清晰的看出android的框架结构,最顶上是各种各样的应用,应用需要framework中各种各样的服务做支撑,然后就是各种各样的库文件(.so)被framework代码所引用,用来跟低层的各种Drivers做数据通信,从而实现对应的功能。相信很多人
2017-02-14 10:37:24
2402
原创 Android PackageManager Service详解(5.1源码)(四)
2.4 APP执行代码APP运行时可执行的代码,主要有三部分:1) 虚拟机初始化时加载的系统jar包,主要包含framework.jar和libcore.jar,分别对应android framework代码和jdk代码2) APP自身程序代码,也就是打包入APK的dex文件3) APP程序运行需要额外加载的library,对应manifest里配置的uses-library
2016-09-02 11:27:35
1577
原创 Android PackageManager Service详解(5.1源码)(三)
2:PackageManagerServiceAndroid既然基于linux,那我们能不能将c/c++代码交叉编译成可执行文件然后放到目标机器上跑呢?当然可以,不过前提你得有执行权限,事实上,android有一部分后台服务是纯linux程序(不需要davik虚拟机资源),比如service manager和media server等。Android应用没有权限启动linux程序,同样的也
2016-09-02 11:24:54
2598
原创 Android PackageManager Service详解(5.1源码)(二)
1.2.3 APK数据读取和校验 之前说过,APK其实就是一个ZIP格式的压缩包,由于读取APK数据时要做完整性验证和签名数据的提取,android修改了java标准SDK中的JarFile,JarEntry等文件的实现。 下面是android第一次读取APK内数据文件的交互图:介绍相关类以及成员变量1) JarFile,这个类大家都很熟悉,它内部跟校验相关的有如下两个变量
2016-09-02 11:20:54
942
原创 Android PackageManager Service详解 (5.1源码) (一)
android基于linux,所以当设备上电后,初期的启动流程跟linux系统并无二致,uboot引导,接着载入kernel代码,加载各种驱动,结束后,启动第一个用户级进程init,init接着解析init.rc后,按照配置启动各种linux后台进程。 整个linux系统底层已经Ready后,接着要干嘛,当然是启动android引导进程,装载android运行环境所需的代码和资源。
2016-09-02 11:14:31
1670
原创 Android Sensor系统剖析(4.0)(下)
Author:Harish_hu@qq.com 由于现在电脑上只有4.0的代码,考虑到代码差别也不大,所以下部分,就基于4.0来分析。 3:SensorManager 上一部分说过,开机后,system server启动时,就会初始化sensor service,也就是说,开机后她一直都在后台运行着,客户端部分,直接connect就行了。至于怎么connect,这一切都被封
2013-07-19 17:52:07
10276
5
转载 Android平台和java平台 DES加密解密互通程序及其不能互通的原因
网上的demo一搜一大堆,但是,基本上都是一知半解(包括我)。为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DES 加密和java DES加密的程序不能互通。就是加密的结果不一样,更不要说Android平台的加密输入作为java DES的解密输出了。这样的话,客户端和服务器端就不能进行通信了。我网上之前也发帖子问了不少人,但是回答都不满意。今天部门的另外一个同事跟我说
2013-07-04 14:00:07
1117
1
原创 android代码共享(so和jar)
我们在开发过程中,肯定要碰到复用已有代码的情况,最简单的方法是直接拷贝源代码但是个人认为这样有如下几个缺点:1:如果源代码很多,会给代码管理造成很大的不便2:代码对使用者来说,不是隐藏的所以最好有方法,将我们的代码打包成一个文件供使用者调用,然后我们只需要提供接口文档供他人查阅即可。这种打包后的文件,在linux c++层,就叫库,在android java层就叫jar
2013-03-12 16:06:20
4677
原创 URI和URL的区别
其实很简单URI是统一资源标示符,它用于标识互联网上的所有资源,包括网页,视频,文件等URL是统一资源定位符,它用于定位互联网上的网页也就是说,一个用于标示互联网上的所有内容,一个只用于标示网页内容,当然,前者是包含后者的。
2013-03-07 09:59:51
745
原创 Android Sensor系统剖析(2.3.5)(上)
Author:Harish_hu@qq.com本文希望通过对androidsensor系统的介绍,使大家在了解android sensor系统架构的同时,会对大家阅读和分析其他同类型代码框架有所帮助。1:概览首先看下应用层如何获取sensor数据:public class SensorActivity extends Activity, implements SensorE
2013-02-22 09:23:32
6069
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人