- 博客(42)
- 资源 (15)
- 收藏
- 关注
转载 file:// scheme is now not allowed to be attached with Intent on targetSdkVersion 24 (Android Nougat)
Android Nougat is almost be publicly released. And as an Android developer, we need to prepare ourself to adjust targetSdkVersion to the latest one, 24, to let everything works perfectly on the newest...
2019-06-10 21:33:22 277
原创 C语言解析域名
C语言解析域名#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <netdb.h>#include <sys/types.h>#include <netinet/in.h>#include <arpa/inet.h>
2019-01-16 14:05:53 1240
原创 minicap二次开发之minicap over WebSockets
minicap二次开发之TCP直连模式(不需adb forward)修改 minicap源码,实现局域网内与设备直连,获取设备实时屏幕数据GitHub地址: https://github.com/guowee/minicap-AF_INETExample: minicap over WebSocketsA quick and dirty example to show how mini...
2018-11-27 09:42:27 2323 1
转载 ContentProvider插件化
ContentProvider插件化目前为止我们已经完成了Android四大组件中Activity,Service以及BroadcastReceiver的插件化,这几个组件各不相同,我们根据它们的特点定制了不同的插件化方案;那么对于ContentProvider,它又有什么特点?应该如何实现它的插件化?与Activity,BroadcastReceiver等频繁被使用的组件不同,我们接触和使用...
2018-11-26 20:29:53 208
转载 Service插件化
Service插件化在 Activity生命周期管理 以及 广播的管理 中我们详细探讨了Android系统中的Activity、BroadcastReceiver组件的工作原理以及它们的插件化方案,相信读者已经对Android Framework和插件化技术有了一定的了解;本文将探讨Android四大组件之一——Service组件的插件化方式。与Activity, BroadcastRecei...
2018-11-26 20:28:31 184
转载 BroadcastReceiver插件化
BroadcastReceiver插件化在Activity生命周期管理 以及 插件加载机制 中我们详细讲述了插件化过程中对于Activity组件的处理方式,为了实现Activity的插件化我们付出了相当多的努力;那么Android系统的其他组件,比如BroadcastReceiver,Service还有ContentProvider,它们又该如何处理呢?相比Activity,Broadcast...
2018-11-26 20:27:35 178
转载 Activity生命周期管理
Activity生命周期管理之前的 Android插件化原理解析 系列文章揭开了Hook机制的神秘面纱,现在我们手握倚天屠龙,那么如何通过这种技术完成插件化方案呢?具体来说,插件中的Activity,Service等组件如何在Android系统上运行起来?在Java平台要做到动态运行模块、热插拔可以使用ClassLoader技术进行动态类加载,比如广泛使用的OSGi技术。在Android上当然...
2018-11-26 20:26:18 214
转载 插件加载机制
插件加载机制上文 Activity生命周期管理 中我们地完成了『启动没有在AndroidManifest.xml中显式声明的Activity』的任务;通过Hook AMS和拦截ActivityThread中H类对于组件调度我们成功地绕过了AndroidMAnifest.xml的限制。但是我们启动的『没有在AndroidManifet.xml中显式声明』的Activity和宿主程序存在于同一个A...
2018-11-26 20:25:11 211
转载 Hook机制之AMS&PMS
Hook机制之AMS&PMS在前面的文章中我们介绍了DroidPlugin的Hook机制,也就是代理方式和Binder Hook;插件框架通过AOP实现了插件使用和开发的透明性。在讲述DroidPlugin如何实现四大组件的插件化之前,有必要说明一下它对ActivityManagerServiche以及PackageManagerService的Hook方式(以下简称AMS,PMS)。...
2018-11-26 20:24:00 193
转载 Hook机制之Binder-Hook
Hook机制之Binder-HookAndroid系统通过Binder机制给应用程序提供了一系列的系统服务,诸如ActivityManagerService,ClipboardManager, AudioManager等;这些广泛存在系统服务给应用程序提供了诸如任务管理,音频,视频等异常强大的功能。插件框架作为各个插件的管理者,为了使得插件能够无缝地使用这些系统服务,自然会对这些系统服务做出一...
2018-11-26 20:22:06 495
转载 Hook机制之动态代理
Hook机制之动态代理使用代理机制进行API Hook进而达到方法增强是框架的常用手段,比如J2EE框架Spring通过动态代理优雅地实现了AOP编程,极大地提升了Web开发效率;同样,插件框架也广泛使用了代理机制来增强系统API从而达到插件化的目的。本文将带你了解基于动态代理的Hook机制。阅读本文之前,可以先clone一份 understand-plugin-framework,参考此项目...
2018-11-26 20:20:42 225
转载 Android插件化概述
概要2015年是Android插件化技术突飞猛进的一年,随着业务的发展各大厂商都碰到了Android Native平台的瓶颈:从技术上讲,业务逻辑的复杂导致代码量急剧膨胀,各大厂商陆续出到65535方法数的天花板;同时,运营为王的时代对于模块热更新提出了更高的要求。在业务层面上,功能模块的解耦以及维护团队的分离也是大势所趋;各个团队维护着同一个App的不同模块,如果每个模块升级新功能都需要...
2018-11-26 20:19:00 162
原创 STF框架之Minicap工具的使用
Minicap介绍minicap工具分为两部分,一部分是动态链接库.so文件,另一部分是minicap可执行文件。但是不通用,根据CPU架构的不同分为不同的版本文件。minicap可执行文件分为4种,分别针对arm64-v8a,armeabi-v7a, x86,x86_64 架构。而minicap.so文件在这个基础上还要分为不同的sdk版本。Minicap使用获取设备的CPU版本和系统版本在使用...
2018-05-04 11:00:13 4317 3
原创 Android View 的滑动冲突
滑动冲突是如何产生的呢? 其实在界面中只要内外层同时可以滑动,这个时候就产生滑动冲突。一、滑动冲突常见场景常见的滑动冲突场景可以简单分为以下三种。场景1:外部滑动方向和内部滑动方向不一致; 外层的ViewGroup可以横向滑动,内层的View可以竖向滑动,如ViewPager内每个页面是ListView (ViewPager 已经处理了滑动冲突,所以在使用中并没有出现滑动冲突)场景2:外部滑动方向...
2018-04-16 20:05:05 214
原创 Android View的工作原理
一、ViewRoot 和 DecorViewViewRoot 1.ViewRoot的实现类: ViewRootImpl 类2.作用:连接WindowManager 和 DecorView 的纽带,View 三大流程均是通过ViewRoot来完成的。当Activity对象被创建完毕后,会将DecorView 添加到Window中,同时会创建ViewRootImpl 对象,并将ViewRootImpl...
2018-03-29 21:38:26 113
原创 Android View的事件分发机制
一、点击事件的传递规则所谓点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生以后,系统需要把这个时间传递给一个具体的View,而这个传递过程就是分发过程。点击事件的分发过程由三个方法共同完成:dispatchTouchEvent, onInterceptTouchEvent 和 onTouchEvent.dispatchTouchEvent用来进...
2018-03-29 21:37:17 197
原创 ThreadLocal基本原理及应用
一、ThreadLocal是什么?关于ThreadLocal是什么,先来看看官方对它的解释.ThreadLocal并不是一个Thread,而是Thread的局部变量。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每个线程都可以独立地改变自己的副本,而不影响其他线程所对应的副本。ThreadLocal并不是用来并发控制访问一个共同对象,而...
2018-03-28 21:54:11 1037
转载 详解UML类图
本文转自:深入浅出UML类图在UML 2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition》(《UML精粹:标准对象建模语言简明指南(第3版)》)中有这么一段:“If someone were...
2018-03-26 16:18:29 787
原创 淘宝vlayout框架的使用及源码分析(二)
上一篇文章主要讲解了vlayout在应用中该如何使用,接下里就从源码的分析一下vlayout到底是怎么实现的吧。vlayout的源码分析在前面说过,使用RecyclerView时,需要绑定一个Adapter和LayoutManager. vlayout并没有改变RecyclerView,而是增加了一些辅助。 它自定义了一个VirtualLayoutAdapter 和 一个VirtualLayout...
2018-03-25 14:32:25 475
原创 ButterKnife的使用介绍及原理探究(六)
前面分析了ButterKnife的源码,了解其实现原理,那么就将原理运用于实践吧。github地址: 点击打开链接一、自定义注解这里为了便于理解,只提供BindView注解。@Target(ElementType.FIELD)@Retention(RetentionPolicy.CLASS)public @interface BindView { int value();...
2018-03-23 20:16:39 143
原创 ButterKnife的使用介绍及原理探究(五)
本篇文章我们来看看ButterKnife对外提供的API。经过前面的分析,我们已经生成了java代码,那么这些方法怎样调用呢?实际上就是通过ButterKnife.bind()调用;那就来看看这个方法。bind() /** * BindView annotated fields and methods in the specified {@link Activity}. The curren...
2018-03-23 20:01:31 276
原创 淘宝vlayout框架的使用及源码分析(一)
VLayout是阿里开源的一个用于辅助RecyclerView的LayoutManager扩展库,通过使用LayoutHelper,可以实现一些负责的页面布局,这在阿里系的一些应用中都有体现。由于之前就针对VLayout做过研究,今天就写一篇文章做个总结吧。一、vlayout如何使用?(一)、 导入依赖库compile ('com.alibaba.android:vlayout:1.2.8@aar...
2018-03-23 15:49:48 963
原创 Android Handler机制浅析
本文是在读《Android开发艺术探索》这本书中关于“Android的消息机制”时所作记录,以便加深对Android的消息机制的理解。一、概述Android的消息机制主要是指Handler的运行机制,Handler的运行需要底层的MessageQueue 和 Looper的支撑。MessageQueue以队列的形式对外提供插入和删除的工作,虽然叫Queue,但实际上它是采用单链表的数据结构来存储消...
2018-03-22 21:49:41 195
转载 Android系统 Binder机制浅析(一)
Binder是Android系统中最重要的特征之一,它是系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种极其方便的跨进程通信机制。理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder 挂钩;要深入Android,Binder是必须迈出的一步。问题: 为什么需要跨进程通信(IPC)?怎么...
2018-03-22 21:41:06 283
原创 Android 6.0版本以上运行时权限解析(二)
上一篇文章我们主要介绍了在Android 6.0版本以上运行时权限的相关知识,并将使用方式进行了封装。但目前使用了Java注解+反射的方式实现,考虑到反射会影响到性能,下面将使用Java Annotation Processor处理(在此假设已经对Annotation Processor有了一些了解并会使用)。对外暴露的接口还是和原来一样, 先上一段源码吧。@AutoService(Process...
2018-03-22 21:34:44 193
原创 ButterKnife的使用介绍及原理探究(四)
上几篇文章主要分析了process方法收集信息的功能,接下来看生成代码,先看源码。@Override public boolean process(Set<? extends TypeElement> elements, RoundEnvironment env) { Map<TypeElement, BindingSet> bindingMap = findAnd...
2018-03-22 21:25:37 198
原创 ButterKnife的使用介绍及原理探究(三)
一、 检查合法性接着上一篇文章,继续对process()方法进行分析。在parseBindView方法中,先做了一次检查,如下: // Start by verifying common generated code restrictions. boolean hasError = isInaccessibleViaGeneratedCode(BindView.class, "fields", ...
2018-03-21 21:29:12 348
原创 Android Studio 3.0 导入项目报Error:Unable to resolve dependency for ':@debug/compileClasspath'错误的解决方案
之前使用Cordova CLI 生成的android 项目模板,在升级Android Studio 至3.0版本后,导入项目报如下错误:Android Studio 升级到3.0版本,gradle 会升级到4.1版本,导致了以上问题。在com.android.tools.build:gradle 3.x 以下版本依赖在gradle 中的声明写法compile fileTree(dir: 'libs...
2018-03-21 14:30:03 4497
转载 android-apt 切换到 annotationProcessor
为了使用 annotationProcessor 功能代替 android-apt,首先需要把你的 Android 工程所用的 Gradle 插件版本升级到 2.2 及以上,也就是修改工程根目录的 build.gradle 中的插件版本,修改如下:buildscript { repositories { jcenter() } dependencies {...
2018-03-21 13:35:50 189
原创 Android Studio 关于jar包、so库的问题
添加时so库的路径要设置正确,Android Studio 默认的so文件路径是app/src/main/jniLibs/armeabi,和eclipse是不一样的,这个一定要注意!使用Android Studio 添加jar包,和使用eclipse 添加jar包的方式相同;添加so库,如果没有jniLibs这个文件夹,创建一个,然后把so库放入文件夹中。当然,这个so文件的目录是可以指定的,比如...
2018-03-21 13:32:37 273
原创 Git SSH Key 生成步骤
Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置。github的SSH配置如下:一 、设置Git的user name和email:$ git config --global user.name "your name"$ git config --global user.email "yourname@gmail.com"二、生成SSH密钥过程:1...
2018-03-21 13:29:37 123
原创 Android 中的Service解析
在Android系统中,到处可见service服务,service作为一个后台进程,执行一些特定的任务。在Android 应用开发过程中,不免也需要开发一些service来完成一些功能,而这种应用层的service只是整个Android Service这一概念的一部分而已,接下来将从Android系统平台的角度,详细剖析Android中的Service.下面,举几个例子来看一下Android平台中...
2018-03-21 13:22:23 188
原创 ButterKnife的使用介绍及原理探究(二)
一、预备知识通过上篇文章的介绍,相信已经对ButterKnife的使用熟悉了,网上也有很多讲解其使用的文章。 本篇主要探究一下ButterKnife的实现原理。但是在开始分析之前,可能还需要了解一下Java注解器Annotation Processor.推荐一篇文章: Java注解处理器读完这篇文章,相信你肯定会对Java注解处理器有了比较深的了解。二、原理 如果让我们实现一些注解的框...
2018-03-21 13:08:47 316
原创 ButterKnife的使用介绍及原理探究(一)
一、ButterKnife 是什么?Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.Eliminate findViewById calls by using @BindView on fields.Group multi...
2018-03-21 13:02:50 878
原创 Android 6.0版本以上运行时权限解析(一)
一、概述随着Android 6.0发布以及普及,作为开发者所要应对的主要是新版本SDK带来的一些变化;首先关注的就是权限机制的变化,Android 6.0以后增加了运行时权限(Runtime Permissions)。本篇文章的目的就是对运行时权限处理做一个简单的介绍,并实现在应用开发过程中对权限管理的封装。GitHub地址: 点击打开链接 二、运行时权限在Android 6.0以前,在安装应用的...
2018-03-13 21:38:35 328
原创 Java中的static静态代码块的使用
静态方法注意事项 使用类的静态方法时,注意: a.在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 b.静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引...
2014-06-25 19:52:12 807
转载 二叉树的递归,层次,以及非递归遍历
/***************************************************************二叉树的遍历操作:对于先序、中序、后序的非递归遍历来说,是借助于栈来存储,而对于层次遍历来说是借助于队列来存储具有代表性的实例:在控制台上输入:ABD00E00C00 A / \ B C / \ D E
2012-03-29 12:08:41 594
原创 二叉树的递归遍历以及层次遍历
#include #include #define ERROR 0#define OK 1typedef char TElemType;typedef int Status;//二叉树的二叉链表存储表示typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild;
2012-03-29 12:06:32 544
原创 用链式结构实现单链队列的入队与出对
#includeusing namespace std;#include#define MAXSIZE 100#define OK 1#define ERROR 0typedef int QElemType ;typedef struct QNode{QElemType data;struct QNode *next;}QNode,*QueuePtr;
2012-03-21 20:34:45 586
基于MQTT的实时消息推送系统
2018-08-29
RabbitMQ for Android
2018-08-08
Linear Algebra and Its Applications
2018-08-03
android studio fataar-plugin
2018-08-03
Mastering Machine Learning with scikit-learn
2018-08-03
中国金融集成电路(IC)规范pboc3.0
2016-07-22
android 5.0新特性的使用
2015-11-12
Rtsp 源代码
2015-10-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人