自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

R.先森的博客

生活在于努力

  • 博客(129)
  • 收藏
  • 关注

原创 Kotlin学习系列(六):委托及其原理

类委托类委托其实对应于Java中的代理模式interface Base{ fun text()}//被委托的类(真实的类)class BaseImpl(val x :String ) : Base{ override fun text() { println(x) }}//委托类(代理类)class Devices (b :Base) :Base by bfun main(){ var b = BaseImpl("我是真实的类")

2021-10-08 10:08:01 453

原创 Kotlin 学习系列(五):数据类和密封类

数据类data class A(var name: String, var age: Int)这就是一个简单的数据类,看下反编译成java代码会是什么样public final class A { @NotNull private String name; private int age; @NotNull public final String getName() { return this.name; } public final voi

2021-09-26 11:31:01 196

原创 Kotlin学习系列(四):扩展

概述Kotlin 可以对一个类的属性和方法进行扩展,扩展不会对原有的类有影响扩展方法扩展方法可以在已有的类添加新的方法,不会对原有的类有影响写法如下:fun receiverType.functionName(params){ body}receiverType:表示函数接收者,也就是要扩展方法的类名functionName:表示扩展函数的名称params:表示扩展函数的参数,可以为null下面是个例子:class A(var name111: String) {}

2021-09-18 17:37:55 309

原创 Kotlin学习系列(三):从java角度理解伴生对象

概述如何反编译kt文件成java文件1 点击Android Studio Tools点击Decompilekt文件反编译后的java文件有了这个操作,就可以很快的理解kotlin中的概念了包级函数,包级属性kotlin和java有个地方不同,就是函数和属性可以不需要定义再类里面kotlin 定义一个包级函数,和包级属性const val name : String = "hahha"var age :Int = 12fun saySome(){ println

2021-09-17 17:10:45 271

原创 Kotlin学习系列(二):继承

继承kotlin中所有的类都有一个共同的超类 Any和java中的object一样的,默认情况下,kotlin类都是public final的不可继承的,如果让一个类可被继承咋需要用open关键字修饰//表示可被继承open class Base {}kotlin 中使用:来表示继承,类似java中的extends如果子类有主构造函数如果子类有主构造函数,那么父类需要在主构造函数中立即初始化open class Base(a :Int) { open fun text(){

2021-09-16 15:34:20 410

原创 Ktolin学习系列(一):基础

概述现在Kotlin很多开源项目都已经开始用了,再不学习就看不懂开源了,开始学起变量定义可变变量定义var 变量名 : 变量类型 = 变量值var name :String = "小明"//相当于javaString name = "小明"var name = "小明" //编译器自动推到类型为String//注意这种写法,只能是局部变量var aa : String //先定义不初始化,必须要有类型aa = "aa"不可变变量定义val 变量名 :变量类型 =

2021-09-16 11:16:05 264

原创 Android 状态机源码解析

概述如果流程围绕失误的状态流转,这时候就要用到状态机,状态机描述一个事务,有多种状态,不同的动作作用再状态上导致抓状态的转换,这里面有三个重点状态 : 睡觉,工作,吃饭事件 : 起床,饥饿,疲惫动作 : 比如说闹铃触发了起床事件导致状态 从睡觉->工作(可以省略)总体就是,首先触发某个事件,导致了状态的改变, 闹铃触发起床事件,导致状态的改变睡觉-->工作而Android中提供了状态机,在frameworks层源码frameworks/base/core/java/com/and

2021-08-13 14:18:21 248

原创 Gradle学习系列(七):Android Gradle Plugin 源码解析

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密Gradle学习系列(三):Gradle插件Gradle学习系列(四):Gradle依赖Gradle学习系列(五):Gradle TransformGradle学习系列(六):Gradle 源码解析Gradle学习系列(七):Android Gradle Plugin 源码解析阅读前准备

2021-06-18 11:02:34 1331 1

原创 Gradle学习系列(六):Gradle 源码解析

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密Gradle学习系列(三):Gradle插件Gradle学习系列(四):Gradle依赖Gradle学习系列(五):Gradle TransformGradle学习系列(六):Gradle 源码解析Gradle 源码解析gradlew首先我们平时打包时用的命令 ./gradlew as

2021-06-10 15:31:59 1257 2

原创 Gradle学习系列(五):Gradle Transform

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密Gradle学习系列(三):Gradle插件Gradle学习系列(四):Gradle依赖Gradle学习系列(五):Gradle Transform简介Google从 Android Gradle 1.5.0开始提供了Transform API,Gradle Transform是Andro

2021-04-12 11:21:56 739

原创 Gradle学习系列(四):Gradle依赖

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密Gradle学习系列(三):Gradle插件Gradle学习系列(四):Gradle依赖简介在平时的使用中依赖是一个逃不过的坎,总是因为各种原因导致编译报错,今天我们就好好的理解下依赖,以及常见问题的解决依赖类型Gradle依赖分别为直接依赖,项目依赖,本地jar arr依赖,传递依赖,

2021-03-19 15:35:00 4915

原创 Gradle学习系列(三):Gradle插件

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密Gradle学习系列(三):Gradle插件简介Gradle本身只是提供了基本的核心功能,其他的特性比如编译Java源码的能力,编译Android工程的能力等等就需要通过插件来实现了。要想应用插件,需要把插件应用到项目中,应用插件通过 Project.apply()方法来完成。在Gradl

2021-03-10 16:45:41 478

原创 Gradle学习系列(二):Gradle核心探索

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习Gradle学习系列(二):Gradle核心解密理解GradleGradle是一个可以构建工具,他可以app的编译打包工作,但是我们学习Gradle不能把它当做一个工具来学,当我们把他当做工具来学的话,我们的目标就是,会写,会配置脚本就就OK了,但是真实的工作中的需求是复杂且多变的,我们除了会用,还要了解为什么这么用,所以我们需要把他当成编程

2021-03-08 18:57:22 440

原创 Gradle学习系列(一):Groovy学习

概述又开始了一个新的系列,这个系列学习Gradle,目标就是彻底理解Gradle,主要还是做下自己理解的笔记,防止忘记Gradle系列(一):Groovy学习配置Groovy环境我这里用的是Mac,所以简单介绍下mac怎么配置Groovy环境,由于Groovy是运行在java虚拟机上的,所以首先要确定你的电脑有java环境首先去这个地址下载Groovy http://www.groovy-lang.org/download.html然后把下载下来的压缩包,解压到你需要的位置最后修改

2021-02-24 19:02:37 434

原创 Android OpenGl Es 学习(八):构建简单物体

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2021-02-22 10:42:28 506

原创 Android OpenGl Es 学习(七):使用纹理

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2021-01-26 10:10:16 631

原创 Android OpenGl Es 学习(六):进入三维

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-11-12 20:13:07 489

原创 Android OpenGl Es 学习(五):调整宽高比

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-10-14 15:31:55 833

原创 Android OpenGl Es 学习(四):增填颜色

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-09-29 17:23:03 633

原创 Android OpenGl Es 学习(三):编译着色器

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-09-24 14:01:09 1391

原创 Android OpenGl Es 学习(二):定义顶点和着色器

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-09-21 18:40:59 778

原创 Android OpenGl Es 学习(一):创建一个OpenGl es程序

概述这是一个新的系列,学习OpengGl Es,其实是《OpenGl Es 应用开发实践指南 Android卷》的学习笔记,感兴趣的可以直接看这本书,当然这个会记录自己的理解,以下只作为笔记,以防以后忘记之后会对本书的前九章依次分析记录Android OpenGl Es 学习(一):创建一个OpenGl es程序Android OpenGl Es 学习(二):定义顶点和着色器Android OpenGl Es 学习(三):编译着色器Android OpenGl Es 学习(四):增填颜色And

2020-09-16 14:28:14 493

原创 Android 音视频学习:MediaCodec录制MP4文件

概述这片博客的目标完成音频的硬编码和硬解码完成视频的硬编码和硬解码完成音视频的录制MP4此篇博客仅作为笔记使用,以防以后忘记MediaCodec介绍在Android 4.1版本提供了MediaCodec来访问设备的编解码器,它采用的是硬件编解码,所以在速度上比软解码更有优势MediaCodec的工作流程俩边的Client分别代表输入端和输出端使用者输入端用MediaCodec请求一个一个空的ByteBuffer,填充数据后将他传递给MediaCodec去处理MediaCodec

2020-06-30 16:35:20 4066 1

原创 Android 音视频学习:MediaExtractor和MediaMuxer学习

概述继续学习MediaExtractor和MediaMuxer,主要作用就是音视频的分离和合成,此篇博客仅作为笔记使用,以防之后忘记MediaExtractor这个类的主要作用是把音频数据和视频数据分离主要的API方法描述setDataSource(String path)设置源文件,既可以是本地文件也可以是网络文件getTrackCount()获取源文件的通道数getTrackFormat(int index)获取指定index的通道格式getSamp

2020-06-10 10:47:52 500

原创 Android JNI和NDK学习(五):JNI调用数组

概述今天我们继续学习JNI数组,此篇文章仅作为笔记,以防以后忘记数组JNI把java类型分为俩类,基本数据类型和引用数据类型,引用数据类型统一用jobject来表示,数组也一样,也分为基本数据类型和引用数据类型,引用数据类型为jobjectarray来表示基本数据类型的数组我们先来分析一下基本数据类型的数组相关的APIGet< PrimitiveType >ArrayElements返回一个基本数据类型的数组,其中PrimitiveType指的是基本数据类型,比如你要获取int的

2020-06-08 15:12:52 563

原创 Android JNI和NDK学习(四):JNI调用Java方法和变量

概述今天继续学习JNI,前几篇学习了一些基本的内容,今天我们全部实践一下,这篇文章仅作为笔记,以防以后忘记JNI访问Java对象的成员先来看下需要用到的Api获取jclassjclass GetObjectClass(JNIEnv *env, jobject obj);jobject:代表java的对象函数返回一个class对象获取jfieldIDjfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, cons

2020-06-05 16:30:27 569 1

原创 Android JNI和NDK学习(三):动态注册

概述当执行java的native方法时,虚拟机怎么知道要调用so中那个方法呢?这个就需要注册,通过注册把java的方法和so的方法绑定在一起,这样就可以找到对应的方法了,此篇文章仅作为笔记,以防以后忘记有俩种注册的方式即 静态注册和动态注册静态注册我们之前自动生成的项目就是静态注册的,我们看下代码extern "C" JNIEXPORT jstring JNICALLJava_com_text_ndk1_MainActivity_stringFromJNI( JNIEnv *en

2020-06-03 17:25:54 156

原创 Android JNI和NDK学习(二):JNIEnv 和 JavaVM

概述上篇学习了NDK相关知识,这篇继续学习JNI相关知识,这篇文章仅作为笔记,以防以后忘记JNI的数据类型和类型描述符在JNI开发中,java的数据类型并不能直接在JNI上直接使用,需要有一定的转化,比如java中的int在JNI中就是jint,下面我们来学习下数据类型基本数据类型Java数据类型jni数据类型描述booleanjboolean无符号char类型bytejbyte带符号8位整形charjchar无符号的16位整形shortjsh

2020-06-03 09:40:43 620 1

原创 Android JNI和NDK学习(一):NDK学习

概述想要学习JNI和NDK,首先要知道JNI和NDK分别是什么,都有什么作用,这样才可以更好的学习和理解JNI和NDK,本篇文章主要作为学习笔记,以防以后忘记JNI介绍定义:JNI即 Java Native Interface java本地接口作用:可以让java和其他类型语言(例如C和C++)进行交互注意:JNI是属于java的,跟 android 没有关系NDK 介绍定义:NDK即 Native Development Kit 是一个android的一个开发工具包作用:快速开发C/C++

2020-06-01 17:39:55 306

原创 Android JNI和NDK学习(基础篇):C++语言基础

概述上篇学习了C语言,这篇继续学习C++,这篇是建立在C基础上的真的是码字如蜗牛,写了好久才写这么多,作为笔记吧,防止以后忘记先写一个Hello world首先打开你的文本编辑器,输入一下内容#include <iostream>using namespace std;int main(){ cout << "Hello, world!!!!!" << endl; return 0;}然后把文件保存为test.cpp,最后编译执行L

2020-05-21 11:35:53 427

原创 Android JNI和NDK学习(基础篇):C语言基础

概述C语言对于Android开发来说还是非常必要的,不管你是要阅读源码,还是想要学习NDK,音视频,性能优化等,都不可避免需要接触到C,而且C语言属于系统级的语言,操作系统内核都有C的身影,所以我今天学习一下C语言,本篇博客作为笔记,以防以后忘记C简介C语言最初适用于系统开发工作的,特别是组成操作系统的程序,由于C语言产生的代码运行速度与汇编编写的代码运行速度几乎相同,所以采用C语言作为系...

2020-04-20 15:08:37 575

原创 Android 插件化原理及实践

概述插件化是一个非常大的话题,他包含很多的知识点,我们今天简单的学习一下他的原理,并且从零开始实现插件化,这里主要用到了Hook技术关联文章Android APK资源加载流程Android 中的ClassLoaderAndroid App启动过程Android 热修复原理实战设计模式 – 代理模式插件化需要解决的问题和技术Hook技术插件的类加载插件的资源加载启动插件Ac...

2019-12-20 10:12:18 335

原创 Android 热修复原理实战

概述关联文章JVM 类加载机制Android 中的ClassLoaderAndroid APK资源加载流程Android 热修复原理解析纸上得来终觉浅,绝知此事要躬行,读了这么多源码是时候实践一下了代码修复首先我们定义一个简单的类public class Text { public static String message(){ return "明天不放...

2019-12-16 11:02:25 327

原创 Android APK资源加载流程

概述我们在Activity中访问资源(图片,字符串,颜色等)是非常方便的,只需要getResources()获取一个Resources对象,然后就可以访问各种资源了,那这些资源到底是怎么被加载的呢?下面我们就分析一下资源加载机制App启动流程首先我们回顾一下App启动流程,还不了解的可以看我之前写的这篇文章首先是点击App图标,此时是运行在Launcher进程,通过ActivityMan...

2019-12-10 16:39:16 852

原创 Android 热修复原理解析

概述关联文章JVM 类加载机制Android 中的ClassLoader假如刚发布的版本出现了bug,我们就需要解决bug,并且重新发布新的版本,这样会浪费很多的人力物力,有没有一种可以不重新发布App,不需要用户覆盖安装,就可以解决bug。热修复就是为了解决上方的问题出现的,热修复主要分为三种修复,分别是代码修复资源修复动态链接库的修复(so修复)我们一次说一下他们的原理...

2019-11-29 17:08:43 196

原创 Android 中的ClassLoader

概述上一篇文章我们了解了Java的ClassLoader,上一篇文章传送门JVM 类加载机制其实Android中的ClassLoader和java中的是不一样的,因为java中的CalssLoader主要加载Class文件,但是Android中的ClassLoader主要加载dex文件Android中的ClassLoaderAndroid中的ClassLoader分为俩种类型,系统类加载器...

2019-11-28 15:58:57 294

原创 JVM 类加载机制

概述Java文件最终会被编译成Class文件,Class文件最终需要加载到JVM中才能运行和使用,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被直接使用的Java类型,这就是虚拟机的类加载机制在java的语言里,类的加载,链接,初始化,都是在运行期间进行的,这样虽然会增加一些性能开销,但是会让Java程序更加的灵活,Java天生可以动态扩展语言的特...

2019-11-21 17:46:35 118

原创 Android 理解Window和WindowManager

概述Window表示窗口的概念,他是一个抽象类,他的真正实现类是PhoneWindow,WindowManager用来对Window进行管理,是外接访问Window的入口,Window操作的具体实现是在WindowManagerService中,WindowMager和WindowManagerService交互是IPC的过程Android中所有的视图都是附加在Window上上呈现的,不管Ac...

2019-11-15 15:25:21 604

原创 Android ContentProvider启动流程

概述ContentProvider的启动其实是在App启动时就自动启动的,还不知道APP启动流程的,推荐看一下Android App启动过程,我们知道当一个App启动时,经历了以下步骤首先是点击App图标,此时是运行在Launcher进程,通过ActivityManagerServiceBinder IPC的形式向system_server进程发起startActivity的请求syste...

2019-11-12 10:55:53 1068

原创 Android 广播启动流程

概述我们从三个方面来分析广播的流程广播的注册广播的发送广播的处理广播的注册广播的注册分为静态注册和动态注册,我们主要分析动态注册首先我们从context.registerReceiver()这个方法开始,看他内部调用了ContextWrapper#registerReceiver方法ContextWrapper.java @Override public Inten...

2019-11-08 17:17:07 699

空空如也

空空如也

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

TA关注的人

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