自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吓成一坨兔子

都是学习笔记,都是学习笔记,都是学习笔记,都是学习笔记,都是学习笔记

  • 博客(31)
  • 资源 (4)
  • 收藏
  • 关注

转载 OkHttp学习(一) OSI七层模型和TCP四层模型

一文读懂OSI七层模型与TCP/IP四层的区别/联系

2019-12-31 17:09:45 367

原创 数据库架构(二) 修改、删除、查询

修改IBaseDao接口public interface IBaseDao<T> { long insert(T entity); long update(T entity,T where); int delete(T where); List<T> query(T where); List<T> query(T...

2019-12-31 15:38:41 186

原创 数据库架构(一) 插入数据库

数据库设计的三大范式第一范式:原子性比如地址:省市区小区门牌号,分成多个字段,省字段,市字段,区字段,街道小区详情字段第二范式:唯一性比如多条数据总要用id这样唯一的主键字段第三范式:避免冗余性比如订单中包含商品信息, 但是商品信息是以外键的方式放在订单表中的。Web数据库与Android数据库Web数据库:该类型数据库在设计的时候基于三范式进行,由于web数据库面向广大网络用户,...

2019-12-31 15:23:24 341 1

原创 EventBus(三)手写EventBus3.1.1

EventBus的不足发布粘性事件:触发了所有同类型订阅方法(粘性和非粘性)粘性事件订阅方法无法第2次消费(很难满足复杂项目要求)多次调用和移除粘性事件时,post会执行多次粘性事件订阅方法(非粘性正常)本文章的解决方案优化索引方法,让api更简单直接重写注解处理器,方式: apt + javapoet (官方是传统写法)弱化了线程池,使用缓存线程池替代去除了对象池概念,考虑rec...

2019-12-31 11:22:38 314

原创 EventBus(二)使用反射的方式的原理

提要按照官网的配置方式,默认就是走的反射的方式实现的,所有有必要将使用反射实现的方式详细学习一下。思路注册的时候,将注册的对象object传入,通过反射获取到此对象object所在Class的所有方法, 遍历所有方法,找到@Subscribe注解的方法,经过判断保护,然后将每个有@Subscribe注解的方法分别封装成一个JavaBean对象,此JavaBean对象的字段包括方法的参数类型,...

2019-12-30 20:17:24 535

原创 EventBus(一) 简单使用,不使用反射,使用注解处理器

导入依赖 // 依赖第三方库:EventBus implementation 'org.greenrobot:eventbus:3.1.1' annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'给EventBus注解处理器传参 // 给注解处理器传参 javaComp...

2019-12-30 19:52:27 587

原创 HOOK技术七-版本适配及总结

因为不同版本之间的源码差距,所以再Hook的时候, 往往会遇到版本兼容问题。兼容的绕过AMS检查 /** * TODO 注意:此方法 适用于 21以下的版本 以及 21_22_23_24_25 26_27_28 等系统版本 * @param mContext * @throws ClassNotFoundException * @throws NoSu...

2019-12-30 19:04:42 930 1

原创 HOOK技术六-LoadedApk式插件化代码实现

/** * 自己创造一个LoadedApk.ClassLoader 添加到 mPackages,此LoadedApk 专门用来加载插件里面的 class */ private void customLoadedApkAction() throws Exception { File file = new File(Environment.getExter...

2019-12-30 16:57:03 724 1

原创 HOOK技术五-使用LoadedApk式插件化的理论分析

占位式 插件化 —>(stander标准) 在插件中必须使用 宿主的环境 appActivity 宿主context —> 插件Hook式 (宿主 和 插件 element 进行融合) 在插件中可以随意使用this,既然式融合一起,插件可以使用到宿主的环境插件越多 内存中的 newDexElements 就会越大LoadedApk式 插件化框架的手写,我们控制 ClassL...

2019-12-28 15:04:13 506

原创 HOOK技术四-插件中Activity启动实战

说明上篇文章中,我们已经分析了, 如果要启动插件中的Activity, 就需要将插件的element与宿主的element融合成一个整的element,然后设置给BaseDexClassLoader。这里还有有一个问题,虽然说Activity的class可以通过这样的方式加载,但是资源文件却不行,资源文件的加载是靠AssetManager和Resource加载的,所以插件中使用AssetMana...

2019-12-28 14:39:20 341

原创 HOOK技术三-插件Activity启动前提分析

现象用宿主跳转插件里面的Activity 会抛异常Caused by: java.lang.ClassNotFoundException: Didn't find class "com.netease.plugin_package.PluginActivity" on path: DexPathList[[zip file "/data/app/com.netease.hookproject...

2019-12-28 10:53:03 279

原创 HOOK技术二-未注册Activity的启动

流程梳理如果Activity并未在AndroidManifest.xml文件中注册, 则启动该Activity会抛出异常。为了能启动未注册的Activity,需要将系统欺骗,使用一个ProxyActivity,在AndroidManifest.xml文件中注册了, 在系统检查之前,将未注册的Activity替换为ProxyActivity,检查完成之后,再讲ProxyActivity还原为未注册...

2019-12-27 14:17:19 497 2

原创 HOOK技术一-HOOK技术初探

HOOK技术的实现原理图原本方法A调用了方法B,方法B有调用了方法C通过HOOK技术, 在执行发放B之前,再做一部分的逻辑,那么方法A在调用的时候,就不是直接调用方法B,而是调用了方法D。然后执行方法B,方法B到方法C还是原来的流程。代码实现public class MainActivity extends AppCompatActivity { @Override p...

2019-12-27 10:57:45 587 1

原创 占位式插件化四静态BroadcastReceiver的注册

静态广播接收器在AndroidManifest.xml声明的广播接收器, 即为静态广播接收器。静态广播接收器的注册时机因为静态广播接收器是在AndroidManifest.xml文件中配置的,所以是在安装apk的时候注册的。具体来说是在PackageManagerService扫描apk文件的时候做的。扫描apk文件的操作最后交由PackageParser来做。思路使用反射调用Packa...

2019-12-26 16:50:21 165

原创 占位式插件化三BroadcastReceive的注册与接收

系列文章占位式插件化一Activity的跳转占位式插件化二Service的启动经过以上两篇文章,我发现了规律了。 宿主APP的代理类,负责与系统交互,提供上下文,接收系统的回调等。插件APP的类作为普通的类处理业务逻辑。协议接口public interface ReceiverInterface { void insertAppReceiver(BroadcastReceiver...

2019-12-25 19:55:29 135

原创 占位式插件化二Service的启动

系列文章占位式插件化一Activity的跳转占位式插件化的本质,就是用代理Activity或者Service使用插件app中的资源或者方法,从而达到执行插件APP的目的。仿照Activity的跳转,可以知道启动插件APP中的Service,需要新增以下几个类,ServiceInterface做协议支持,BaseService实现ServiceInterface接口,ProxyService在...

2019-12-25 19:08:19 168

原创 占位式插件化一Activity的跳转

原理宿主APP安装在手机中的APP,并且通过该APP加载插件中的Activity插件APP没有安装的apk,通过宿主直接打开其内部Activity标准(协议)宿主APP和插件APP通信的桥梁。宿主APP通过一个空壳Activity(代理Activity)加载插件app中的Activity,实际上插件app中的Activity并没有入栈,也没法入栈,因为插件app没有安装,没有上下文和...

2019-12-25 17:41:20 366

原创 动态换肤

思路分析AppCompatActivity在setContentView的时候, 会解析xml文件,用xml文件的每个节点信息创建与之对应的View对象。跟一下setContentView的代码会走到AppCompatDelegate的setContentView方法。这个方法是个抽象方法, 其实现为AppCompatDelegateImpl的setContentViewpublic vo...

2019-12-24 20:05:01 425

原创 组件化开发

为什么要组件化开发如何组件化通过一个config.gradle文件,配置是否开启组件化, 并且统一控制版本。ext { // 定义一个项目全局变量isRelease,用于动态切换:组件化模式 / 集成化模式 // false: 组件化模式(子模块可以独立运行),true :集成化模式(打包整个项目apk,子模块不可独立运行) isRelease = true...

2019-12-24 16:17:39 473

原创 ActivityManagerService相关

总体架构由图可以知道ActivityManagerService的体系实现也是一个Binder机制的实现。因为ActivityManagerService与应用程序运行在不同的进程,所以需要跨进程通信。 ActivityManagerService的作用是管理四大组件的创建,销毁以及生命周期的管理。管理,记录,查询。启动service的流程ContextWrapper 与Con...

2019-12-21 16:29:30 192

原创 Android 安装流程梳理

源码版本9.0源码信息可以在这里查看安装的原理分析APK核心安装步骤从AndroidManifest中解析出应用信息、各组件信息、权限信息,代码索引为PackageParser.parseBaseApkCommon()为应用程序分配UID,并让PMS记录个组件信息,代码索引为PMS.scanPackageDirtyLI()、Setting.addUserIdLPw()更新应用程序权限...

2019-12-17 11:46:48 814

原创 Android跨进程通信二

1. Binder是什么从机制上来说: Binder是Android中一种跨进程通信的方式从Binder机制实现来说: Binder是一种虚拟的物理设备驱动从Java层面来说: Binder是一个类,实现了IBinder接口。2. Binder机制2.1 背景知识2.1.1 进程空间划分一个进程空间分为 用户空间 & 内核空间(Kernel),即把进程内 用户 & 内...

2019-12-14 16:39:45 2740

原创 Android跨进程通信一

进程与线程的区别进程一般是指执行单元,在PC和移动设备上指一个程序或一个应用线程是CPU调度的最小单元,同时线程是一种有限的系统资源一个进程可以包含多个线程Android中单应用使用多进程一般是在AndroidMenifest.xml注册四大组件时,指定android:process属性多进程造成的问题静态成员和单例模式完全失效线程同步机制完全失效SharedPreference...

2019-12-11 10:33:44 130

原创 Handler机制分析三

手写Handler流程Looperpublic class Looper { public static final ThreadLocal<Looper> mThreadLocal = new ThreadLocal<>(); /** * 消息队列 */ public MessageQueue mQueue; pr...

2019-12-08 12:48:04 147

原创 Handler机制分析二

整体架构创建Looper在应用创建时,调用了ActivityThread的main方法,这个方法里面调用了Looper.prepareMainLooper(); public static void prepareMainLooper() { prepare(false); synchronized (Looper.class) { ...

2019-12-07 16:25:46 431

原创 Handler机制分析一

什么是Handlerhandler主要用于异步消息的处理:当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回,而另外一部分在消息队列中逐一将消息取出,然后对消息进行处理。Handler 简单使用 private Handler handler2 = new Handler() { @Override public void handleM...

2019-12-07 14:29:31 187

原创 Android端基于WebRTC的音视频通话小demo

版本信息AndroidStudio :3.5.2org.webrtc:google-webrtc:1.0.28513WebRTC简介WebRTC是什么WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持...

2019-12-06 11:38:42 6522 2

原创 基于WebRTC的音视频通话服务器搭建

Webrtc服务器搭建后台项目地址java项目:https://github.com/androidtencent/WebRtcJavaWebNodeJs项目 : https://github.com/ddssingsong/webrtc_server本搭建是基于centos 7.6 64位系统,系统恢复原始状态,重新装系统,确保人人都能搭建成功如果系统安装了基础软件 如git ...

2019-12-03 17:33:13 2733 1

原创 基于OpenCV和OpenGL 的简易美颜相机

版本信息AndroidStudio 3.5.2OpenCV 4.1.2OpenGL 2OpenCV是什么维基百科在本Demo中,OpenCV实现面部识别功能OpenGL是什么维基百科在本Demo中,OpenGL实现美颜功能配置OpenCV环境在AndroidStudio中新建C++项目下载OpenCV Android版下载OpenCV Windo...

2019-12-03 17:21:39 4146 1

原创 基于FFmpeg的音视频播放器

版本信息AndroidStudio 3.5.2FFmpeg 4.0.2背景AndroidStudio3.5.1下搭建FFmpeg环境Android使用FFmpeg动态库播放视频Android基于OpenSL ES的音频播放播放器架构关键代码梳理视频解封装,将音视频流逐帧分成Packet放到相应的队列// 解码操作void NativeP...

2019-12-03 14:21:55 690

原创 Android基于OpenSL ES的音频播放

什么是OpenSL ESOpenSL ES 全称是:Open Sound Library for Embedded Systems,是一套无授权费、 跨平台、针对嵌入式系统精心优化的硬件音频加速API。它为移动多媒体设备上的本地应用 程序开发者提供标准化, 高性能, 低响应时间的音频功能实现方法,并实现软硬件音频性能 的直接跨平台部署,降低执行难度,促进高级音频市场的发展。一句话:OpenS...

2019-12-02 15:02:10 548

WebRTC音视频通话.zip

WebRTC音视频通话Android端代码

2020-06-19

WebRTC音视频通话Android端代码

WebRTC音视频通话Android端代码

2020-06-19

js中文gbk编码工具

js中文gbk编码工具,

2020-05-27

LiveDemo.zip

博客<Android端实现基于RTMP的音视频推流>的资源文件,博客<Android端实现基于RTMP的音视频推流>的资源文件 直播链接部分需要自己搭建nginx服务器.

2019-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除