
Android进阶
文章平均质量分 85
向往自由美好的孙先森
这个作者很懒,什么都没留下…
展开
-
音视频专题--opengl (3)
创建opengles 环境进行不同控件的渲染原创 2022-06-27 17:27:04 · 1210 阅读 · 1 评论 -
Glide原理剖析,面试就这么答(二)
接上一篇Glide原理剖析,面试就这么答!(一)_BonnySoul的博客-优快云博客_glide原理面试面试官:Glide圆角处理的流程是怎样的?Q:Glide的圆角需要自己去继承BitmapTransformation,实现transform,updateDiskCacheKey。transform方法需要返回一个处理过的bitmap。其实就是通过画笔去画一个圆角的bitmap.RequestOptions().transform(new MyBitmapTransform.原创 2021-11-18 20:34:15 · 2240 阅读 · 0 评论 -
热修复原理
什么是热修复?定义:在我们应用上线后出现bug需要及时修复时,不用再发新的安装包,只需要发布补丁包,在客户无感知下修复掉bug。怎么进行热修复?服务端:补丁包管理用户端:执行热修复开发端:生成补丁包热修复需要解决的问题补丁包是什么?如何生成补丁包?开启混淆后呢?对比改动自动生成补丁包(gradle)?什么时候执行热修复?怎么执行热修复(使用补丁包)?Android版本兼容问题?热补丁方案有很多,其中比较出名..原创 2021-11-04 10:10:37 · 1208 阅读 · 0 评论 -
你需要掌握的插件化知识
1 什么是插件化?插件化技术最初源于免安装运行 apk 的想法,这个免安装的 apk 就可以理解为插件,而支持插件的 app 我们一般叫宿主2 插件化实现思路1 如何加载插件的类?2 如何加载插件的资源?3 如何调用插件类?Q 1, 回答问题之前我们要先了解什么是双亲委托机制类在加载的过程中首先回去 判断当前类是否已经被加载过,如果没有加载过并且自己的父加载器不为空,将会让自己的父加载器去处理,父加载同样会去按照这个逻辑处理。如果没有找到父加载器,才会自己去加载。这样处理原创 2021-11-02 19:08:54 · 1301 阅读 · 0 评论 -
android dex文件改造过程
apk文件的加密在我们的应用上架之前必不可少。通常我们是使用第三方加固软件,比如乐固,360加固宝类似的程序替我们完成。但是了解其原理对我们来说还是非常有用处的。这篇来介绍通过dex 文件加密实现apk 加密的方式。1 总体思路2 对核心代码工程进行加密核心工程中androidManifest 添加的application 是引用壳工程中的application.(1) 在打包过程中,对打包好的apk进行解压到指定路径。(2)对解压包中的dex文件进行加密,这里具体的加密算法..原创 2021-11-01 10:25:54 · 1323 阅读 · 0 评论 -
音视频专题-基础
1 基础扫盲:什么是H264?定义: 对摄像头采集的每一帧视频需要进行编码,由与视频中存在空间和时间的冗余, 需要用算法来去除这些冗余。H264是专门去除这些冗余的算法,我们把这种算法称为H264编码。H264是新一代的编码标准,以高压缩高质量和支持多种网络的流媒体传输著称。应用: 像大多数看到的视频,如rmvb avi mp4 flv 大都是由h264进行编码当然也会有不同的 如 mpeg4 vp9 这样比较冷门的编码。无论是h264 mpeg4...原创 2021-08-20 12:09:31 · 192 阅读 · 0 评论 -
Retrofit 原理梳理
Retrofit的核心原理解密2Retrofit的代理模式动态代理实现在java的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和这个接口可以生成JDK动态代理类和动态代理对象。这个代理对象是存在于内存中的。1、创建一个InvocationHandler对象 InvocationHandler stuHandler = new MyInvocationHandler<Person>(stu);...原创 2021-08-15 21:33:44 · 331 阅读 · 0 评论 -
你所需要掌握的okhttp知识
1.1 介绍:okhttp 是目前Android 使用最广泛的网络框架。从android4.4开始HttpUrlConnection的底层实现采用的是OkHttp。1.2 调用流程OkHttp请求过程中最少只需要接触OkHttpClient、Request、Call、Response,但是框架内部进行大量的逻辑处理。 所有的逻辑大部分集中在拦截器中,但是在进入拦截器之前还需要依靠分发器来调配请求任务。分发器:内部维护队列与线程池,完成请求调配;拦截器:五大默认拦截器完成整个请求过程。..原创 2021-08-14 19:30:40 · 237 阅读 · 0 评论 -
Gradle - 组件化之 build优化
1 组件分层:一般划分3-4层:1 app(壳 入口)2 业务组件层 :application/library3 功能组件层:application/library4 基础组件层:library业务组件层与功能组件层区别:业务层只能用在该项目内,而功能组件层是独立的功能模块可以运用于其他项目,比如推流模块,播放模块等。2 以文件夹的形式去管理module,方便查找代码。2 进行每层核心模块/组件的开发封装基础配置类commmon.gradle每个module依...原创 2021-06-29 17:50:13 · 310 阅读 · 0 评论 -
动态代理原理解析
之前有一篇设计模式的文章说过了代理模式。这一篇是对之前的补充跟深入。1 为什么需要学习动态代理1.动态代理能够增加程序灵活度,如加入 方法执行前后判断2 完美解决解耦问题,动态代理可以将调用层与实现层分离,如Retorfit网络请求3 动态代理不需要接口的实现类,如 适用于 IPC进程通信,将方法调用转成其他逻辑1.动态代理不需要接口的实现类,如 适用于 IPC进程通信,将方法调用转成其他逻辑4 动态代理可以解决 程序执行流程,如今天讲的事件转到activity执行动态代理含义1原创 2021-06-28 19:01:23 · 2112 阅读 · 0 评论 -
android LayoutInflater源码分析以及换肤框架实现原理(2)
上一节了解完布局加载的源码后,这篇就是带大家去实现换肤框架。主题换肤框架的实现思路?原创 2021-06-24 09:54:26 · 299 阅读 · 0 评论 -
android LayoutInflater源码分析以及换肤框架实现原理(1)
不记得是从哪个版本开始,我们最熟悉的新增Activity默认的继承类Activity 变成了AppCompatActivity。显示Activity的布局,我们实现起来很简单,只需要在onCreate()方法中setContentView(R.layout.activity_main)。今天就从源码层去看看到底系统为我们做了什么。点开AppCompatActivity内部@Overridepublic void setContentView(@LayoutRes int layoutRes.原创 2021-06-23 10:46:00 · 256 阅读 · 0 评论 -
Gradle - 本地maven 的使用
我们在项目中使用module,多级依赖打包aar的时候,会出现module中的代码无法打包到aar中,第一种方案我在前面的文章说介绍过使用的是fat-aar 第三方插件,文章链接https://blog.youkuaiyun.com/so1993/article/details/109119825?spm=1001.2014.3001.5501第二种方案就是今天所要介绍的使用本地maven的方式。module的依赖一般我们都使用的是直接依赖project如:implementation project..原创 2021-06-21 12:27:01 · 812 阅读 · 0 评论 -
Android 属性动画从入门到精通
属性动画,顾名思义它是对于对象属性的动画。因此,所有补间动画的内容,都可以通过属性动画实现。属性动画入门private void RotateAnimation() { ObjectAnimator anim = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f); anim.setDuration(1000); anim.start(); } private void Alpa...原创 2021-06-17 20:27:35 · 219 阅读 · 1 评论 -
Gradle - AGP的深入了解
在我们的项目中经常会遇到一种场景,同一套的代码,但是部署很多套环境,提供给不同的客户使用,这个时候每次打包的时候我们都需要去修改服务器地址,如果稍微不注意就会打错环境的apk,今天的学习就可以的很好的jie'ju...原创 2021-06-16 09:42:28 · 1145 阅读 · 0 评论 -
Gradle 依赖管理
前言 :依赖管理 在我们android项目中有非常重要的使用,如果对依赖管理没有清晰的认识,在遇到依赖冲突等问题的时候会碰到很多麻烦。原创 2021-06-15 11:21:31 · 2096 阅读 · 6 评论 -
Gradle -自定义task
1 了解tasktask是gardle中最小的任务单元,任务之间可以进行复杂的操作(如动态创建任务,多任务间依赖调用等等)。gradle的执行其实就是由各种任务组合执行,来对项目进行构建的。原创 2021-06-12 11:48:30 · 2804 阅读 · 3 评论 -
Android 从AIDL来看Binder机制
下面就以图解的方式介绍下Binder机制,相信你看这篇文章,一定有所收获。什么是 Binder?Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一。Android中的四大组件Activity,Service,Broadcast,ContentProvider,不同的App等都运行在不同的进程中,它是这些进程间通讯的桥梁。正如其名“粘合剂”一样,它把系统中各个组件粘合到了一起,是各个组件的桥梁。理解Binder对于理解整个Android系...转载 2021-04-01 10:27:40 · 431 阅读 · 0 评论 -
Android 多依赖module的项目打包成aar
最近客户有一个需求,希望我们把项目打包成sdk提供给他们。刚收到的时候我觉得很简单,这不是很简单嘛。第一步:将app中的build.gradle 的application改为library第二步:修改AndroidManifest中相关配置,该删的删,细节我就不多说了,网上这种文章太多第三步:将项目中所有switch case修改成 if else最后打包 生成aar,以为美滋滋搞定,将aar放在demo中一跑,carsh。从崩溃日志中一看。未找到相关类,其实我心里早有预想,因为我项目.原创 2020-10-16 17:12:40 · 1850 阅读 · 0 评论 -
你所需要知道的jni知识
一、Java 代码 和JNI代码通信Java代码通过JNI接口 调用 C/C++方法1、首先我们需要在Java代码中声明Natvie方法原型public native void helloJNI(String msg);2、其次我们需要在C/C++代码里声明JNI方法的原型如:extern "C"JNIEXPORT void JNICALLJava_com_kgdwbb_jnistudy_MainActivity_helloJNI(JNIEnv* env, jobj..转载 2020-08-05 09:25:23 · 398 阅读 · 0 评论 -
Android AIDL解惑 什么时候使用,该怎么使用?
1 AIDL 什么时候使用?AIDL是Android中IPC(Inter-Process Communication)方式中的一种,AIDL是Android Interface definition language的缩写。作为进程间通信的重要方式之一?什么时候需要用到呢?场景1 现在你的应用需要强制保活,产品经理要求做进程保活,在应用中多开一个进程,用来与主进程进行心跳监听,如果有一个进程挂掉,另外一个进程将它拉起。这种需求常用于定制性设备的主应用。场景2 要求两个应用间可以进行数据传递。原创 2020-07-06 11:26:53 · 1272 阅读 · 0 评论