自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

JabamiYu的博客

研究总结与进步

  • 博客(82)
  • 资源 (2)
  • 收藏
  • 关注

原创 WSL2编译安卓11源码,,刷入pixel设备,并使用asfp查看源码

wsl2使用asfp导入源码以及刷入pixel

2023-09-26 21:11:10 517

转载 Android系统zygote启动到Launcher

以上第6点其实还是不太理解,理论上跨进程通信不需要通过servicemanger,直接binder驱动是可以直接实现的,如果说是为了统一管理,动态注册或者取消注册之类的,那这个好处是可以解释。5.ServiceManager的addService也是跨进程通信,这个是与servicemanager进程进行通信的,该进程是init进程孵化的。2.SystemServer进程管理了很多服务,比如AMS PMS等逻辑,都是运行在SystemServer中的,不是单独的进程。这里总结一下学习的几个容易混淆的点。

2023-06-28 12:08:32 121

原创 WSL2编译安卓8.1源码,直接运行模拟器

学习Android Framework开发,需要linux。但是不管是vmware虚拟机,还是双系统,都或多或少有点麻烦。vmware性能不咋样,双系统切换器了麻烦,如果要玩个游戏,碰到微星啥的自检时间长的主板,重启就很费时间。WSL2就是个很方便的选择,性能接近原生linux系统,配置之后也能直接运行编译之后的模拟器,如果只是编译开发,推荐选择。

2023-05-27 15:08:29 1575 2

原创 Glide 使用Transformation 时保持 placeholder、error统一的一种方式

有时候我们碰到某个需求,有一个默认的error图片,大部分地方都用这个图片。但是有的地方我们用圆角,有的地方我们用圆形,如果用Glide的transform变换的话,error将不会跟随实际的图片变换,但是我们又不想不同的地方取更换图片,或者直接把ImageView弄成CircleImageView之类的,这里提供一种跟随实际图片转换的方法。比如上图的图片,我们要全局应用,适配圆角和圆形变换。调用的时候,注意必须在写的扩展方法的作用域调用。这样就保证error和实际图片都可以应用转换。

2022-11-09 22:33:25 620

原创 安卓智能Pos开发简单入门总结

银联规范、智能POS开发

2022-04-04 22:56:27 4343

原创 Vue组件之间的两种常用通信方式

最近都一直学习Vue的知识,看了不少视频,之前完全不了解前端知识,所以还是遇到很多困难。总结一下Vue中的传值问题。这里使用的demo直接vue init webpack-simple **** 命令初始化的。父子组件1、父组件传递给子组件...

2019-10-31 17:21:26 318

原创 Mac mojave 10.14.6 安装brew碰到的小问题

之前想安装Flutter的环境,安装brew的时候碰到一个小问题,因为是新装的Mac系统,所以之前的没碰到过,记录一下以示尊重。/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”上面就是安装brew的命令,但是在安装过程中提示:curl: (7...

2019-08-12 18:26:48 1359

原创 Android简单实现嘴唇贴纸功能

大家新年快乐!!过年总是这么短暂,新年新气象,这篇文章本年年前准备发的,过年嘛,总会懒一些,哈哈哈哈。今天我们来简单实现一个嘴唇的贴纸功能,先看看效果。其实大部分APP的完整功能包含脸部,鼻子,眼镜等的完整渲染,不过原理都类似,我就只用一个嘴唇来抛砖引玉了。看这篇文章之前,需要了解NDK、OpenGL ES的基本知识。关于OpenGL ES 3.0的相机渲染相机采集并渲染画面有很多种方式,...

2019-02-12 11:06:23 2599 7

原创 简单移植dlib和opencv到Androd平台进行人脸检测

最近实在是忙于项目,太久都没有写博客了,结果一不小心竟然过了几个月了。既然有空就多写点东西,交流交流经验,总归是没有坏处的。之前一直想做一下人脸检测,网上一大堆SDK全是收费的,而且基本上都不是本地检测。后来总算找到了dlib来进行人脸识别,踩了不少坑之后,总算是集成了上去。但是官方的demo速度实在太慢,后面有空会去学习一些优化经验,这篇文章直接从编译开始讲起集成,并且使用官方demo以及机器...

2018-12-05 09:48:30 2225 3

原创 Android关于H.264的软编和硬编

第六章的最后一篇分析了,之前分析摄像头预览画面的流程https://blog.csdn.net/a568478312/article/details/80725180。这里主要就是分析编码方面的核心代码。软编创建编码器,并开启编码和下载线程。我们在得到相机纹理,并且经过一系列的处理之后,绘制到屏幕上。并且将最终处理后的纹理id以及EGLContext传入编码器,这样通过共享EGLC...

2018-07-12 21:18:20 2959 1

原创 ARM NEON指令集总结

ARM的NEON是类似于X86的SSE2的一种优化的指令集,主要就是为了实现SIMD全称Single Instruction Multiple Data,单指令多数据流,能够复制多个操作数,并把它们打包在大型寄存器的一组指令集。简单来说就是处理一些算法的时候,可以并行处理,大大提高了效率。在Android手机上大部分都是ARM架构的,我们开启NEON后就可以使用这些指令集了,当然可以使用汇编,...

2018-07-11 14:29:28 17827

原创 Android OpenGL ES 3.0 Pixel Buffer Object使用

关于PBO,找了很多资料,然而google了很久,大部分的PBO资料都和这个类似https://blog.csdn.net/panda1234lee/article/details/51546502 。在上传texture的过程中,我分别试了1、2、3个PBO来进行上传,然而效率并没有增加,反而下低了,有点无法理解。然而在读取数据时候,使用两个PBO是可以提高效率,所以总的来说还是有一定研究价值...

2018-07-04 00:49:58 2380 2

原创 Android端PCM编码AAC的软编和硬编

第六章的内容有点多,现在学习一下音视频的软编和硬编。使用libfdk_aac进行编码书上的源码是采用ffmpeg的api进行编码的,当然你也可单独编译libfdk_aac来进行编码。首先我们还是需要配置采样率,声道,码率等参数进行初始化。 接着我们探测输出文件,让ffmpeg自动根据文件名探测格式。 int ret; av_register_all(); avFor...

2018-06-24 00:59:37 3228

原创 Android从源码分析ScrollView自动滑动的焦点问题以及解决方案

大家做项目开放应该都碰到过类似于这种界面 这时候我们做Fragment切换的时候,如果Fragment带有像ListView和RecyclerView之类的列表,在切换的时候ScrollView会自动滑动到列表的顶部。虽然做手机app开发的时候,焦点处理比较少,但是我们可以从源码来分析一下焦点是如何传递的。源码分析我们两个Fragment切换的时候,最终其实还是一个View隐藏,一个...

2018-06-22 12:58:16 4453

原创 使用Android Studio3.1.2断点调试Android 6.0源码(无需编译)

调试源码有时候很有用,毕竟原来里的各种标志位,变量多的一匹,当时看明白了过不了多久就忘了,又重新看很是难受。要是和普通应用一样断点调试就方便很多了。基于新版Android Studio来进行源码断点调试配置,使用Windows环境。源码下载完成之后,15分钟之内就能搞定。准备工作因为要下载源码,直接放个地址https://pan.baidu.com/s/1eJFYRoQYBkUaP5hb8...

2018-06-20 17:13:44 3626 4

原创 Android采集并使用OpenGL ES预览摄像头画面

Android的Camera现在有新的api,但是要5.0之后才能用,书上的源码也是用老版本api,简单分析一下预览流程。为了篇幅部分中间的调用流程将会省略,只贴出核心代码。EGL环境初始化首先我们肯定是要初始化egl,Native层使用hanlder的形式来循环处理消息。void MVRecordingPreviewController::prepareEGLContext(ANat...

2018-06-18 22:03:57 2565

原创 Android使用AudioRecord录制pcm裸数据

第六章讲音视频的采集,首先是音频采集。Android录音可以采用MediaRecorder,这个API是比较上层的,直接可以输出通常的音频格式文件,但是相对的就失去了一些灵活性。AudioRecord可以直接录制PCM裸数据,当然也可以用OpenSL ES来进行录制,然而API过于繁琐,对于音频来说,audioRecord其实已经满足大部分需求了。话不多说,直接分析代码,书上的源码我用kotlin...

2018-06-17 22:54:40 3536 3

原创 kotlin 中::class 、class.java、javaClass、javaClass.kotlin区别

这几个有点混,小结一下吧。Kotlin的类class Person { var name: String = "" var age: Int = 0 companion object { }}java类public class Man {}要知道获取的到底是什么,可以利用andorid stuido的类型提示,一目了然。第...

2018-06-17 12:58:06 13829 4

原创 Android使用ffmpeg+opengl+opensles实现播放器

终于到了第5章,前面已经学了音频和视频的渲染知识,这一章讲的是视频播放器的实现,记录一下看源码的一些要点。初始化1、同步模块整体初始化初始化一些参数,minBufferedDuration为0.5f,maxBufferedDuration为1.0f。在调用initMeta()之后变成0.5和0.8,最大的音视频偏差设置为了0.05。bool AVSynchronizer::in...

2018-06-10 17:18:27 2644 2

原创 Android OpenGL ES 帧缓冲FBO

平时我们都是渲染到的默认的屏幕缓冲,通过swapbuffer来渲染到屏幕上,相对的我们可以同样创建一个离屏的帧缓冲来渲染到纹理。创建一个fbo glGenFramebuffers(1,&frame); glBindFramebuffer(GL_FRAMEBUFFER,frame);fbo需要我们为他准备一个至少一个缓冲(颜色、深度或模板缓冲),我们通常使用的是...

2018-06-04 14:11:11 2435

原创 Android使用OpenGL ES 3.0实现随手指旋转3D立方体

OpenGL ES在做普通应用方面3D使用的不多,但有时候实现一些有趣的功能也是蛮不错的。画立方体的的demo网上已经很多了,这次我们就实现一个随手指旋转的立方体,这个demo基本可以了解各个坐标系转换矩阵的使用了。 先看一下最终效果:...

2018-06-02 17:47:49 6579 15

原创 对于OpenGL投影以及相机变换的一些理解

查了很多资料都有点想不明白投影到底干什么的,其实有时候不用想太多,以实际效果来做测试一下就明白了。正交投影首先我们图上先有一个立方体 float vertices[] = { //第一面 -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, ...

2018-05-29 14:27:33 2673

原创 Android基于OpenGL ES 3.0的VBO,VAO,EBO的使用(NDK开发)

有过一点OpenGL开发经验的人就知道每次绘图之前都会绑定顶点数组,每次将一个顶点传到GPU进行绘制。但是从CPU传数据到GPU的效率并不高,所以我们就需要使用VBO顶点缓存对象来一次性传递多个顶点到GPU,而VAO是3.0以后的版本才有的功能,它允许我们保存对于顶点的配置信息,我们配置好之后就只需要绑定对应的VAO,然后直接绘制即可。索引缓冲对象EBO和VBO类似也就是保存下标的缓冲。 - ...

2018-05-27 16:16:21 1558

原创 Android使用OpenGL ES显示纹理(使用NDK开发)

第四章最后开始介绍使用OpenGL来显示一个2D纹理,其实做音视频2D基本满足绝大多数要求了,下面简单分析一下源码中的流程。EGL环境初始化首先我们需要在Java环境中初始化一个SurfaceView,然后在回调中我们传入surface。这里我将AssetsManager也传入Native,因为着色器的文件我是写在Assets中的,我们再Native层进行读取。Android Studio...

2018-05-23 22:02:53 3677 1

原创 Android端在native层初始化OpenGL ES环境流程

之前学习OpenGL的时候,基本上都是使用GLSurfaceView来初始化,然后调用OpenGL的API来进行绘制。然而找OpenGL的教程时,发现基本上的教程都是C,这就很尴尬了呀,Android平台虽然也封装了名字类似的Java 的API,但是总感觉怪怪的。大概看了一下GLSurfaceView的源码,其实就是继承SurfaceView,然后开启一个线程来初始化EGL环境,接着也是使用Ope...

2018-05-18 17:40:41 3673

原创 Andoird使用AudioTrack以及OpenSLES渲染音频

最近学习到了第四章,对于AudioTrack以及OpenSLES相当于又复习了一遍。这一章结合之前的ffmpeg解码来进行mp3文件的播放。主要的难点有linux多线程的同步,生产者消费者模型等等。如果对ffmpeg解码不熟悉的可以看https://blog.csdn.net/a568478312/article/details/80268498,这篇文章的重点在于api的使用以及多线程的控制。...

2018-05-17 17:35:09 3550

原创 c与c++的struct方法兼容调用

之前写jni代码的时候,在jni.h里定义的JNIEnv定义是不同的类,思考了c++与c调用结构体的方法的方式。使用公共的h文件来包含不同的结构体来实现兼容,c++层需要包含c层的结构体指针。各个文件定义test.h#pragma oncestruct classCLay { void(*fun1)(int);};struct classCppLay { ...

2018-05-15 17:58:40 2884

原创 Android使用ffmpeg导出pcm裸数据

其实之前很长一段时间都在研究音视频的知识,只是没有总结知识。后来太忙导致以前学的都忘了好多,最近买了音视频开发的书来系统学习,但是里头的部分代码是eclipse的,现在基本上不用eclipse开发了,所以我还是选择在Android Studio中进行实践,在此记录一下学习中的要点。代码均是参考https://github.com/zhanxiaokai,也就是该书的源码仓库。本文所用环境为Andr...

2018-05-10 17:37:25 1130 3

原创 Android自定义Gradle插件来处理注解

熟悉Java注解处理器的朋友,肯定会了解如butterknife,dagger之类的框架,这类框架都是在编译阶段处理注解来生成辅助类,从而不需要再写很多机械的代码。这里我们换一种思路,不使用Java的注解处理器,直接使用Gradle来处理注解并生成类。注意:这篇文章仅提供一种注解处理的思路,不会考虑太多程序的健壮性。话不多说,直接开始吧。在Android Studio中创建Gradle插件...

2018-05-07 15:30:09 3204 6

原创 Android Studio上传aar到JCenter简单教程

这篇文字主要讲解如何上传到JCenter中央仓库,如果想要看如何上传到私服Maven,可以参考我的上一篇文章https://blog.csdn.net/a568478312/article/details/80166281。百度的很多资料都异常繁琐,其实很多东西都不用管,这篇我将尽量写最简单的过程,适用于有一定经验的Android Studio开发者。注册JCenter账号https://...

2018-05-02 18:08:27 671

原创 Android Studio上传aar到私有maven仓库

自从使用Android Studio来进行项目开发后,gradle就成了新的项目管理工具,对于第三方库或者插件的管理都十分方便,而我们想要自己的库也能像这样使用: implementation 'xxxx:xxxx:1.0.0'我们就需要将自己的库上传到jcenter()或者自己搭建的maven服务器。Win10上传aar到私有maven服务器首先我们下载对应版本的...

2018-05-02 15:30:34 5508 2

原创 Android Gradle Task使用详解

Gradle作为一个构建工具,除了插件给我们带来的task,我们也可以自定义很多变量,task,或者继承某些task来重新指定输入输出文件等。首先我们要明确一下Gradle的周期,简单来说,一个Gradle任务执行的时候会有三个步骤。Gradle会分析构建脚本,通过setting.gradle配置的项目对应生成settings与project类的实例。初始化配置,通过执行各个项目build...

2018-04-27 17:58:16 8255

原创 Android Gradle 3.1常用属性

对于gradle的属性,大家可以自行查看文档,我主要从文档中总结一些常用的。 文档:http://google.github.io/android-gradle-dsl/ 现在的Android Studio 3.0版本以上已经使用了3.0以上的gradle插件,所以直接看最新的文档。注意:本文的属性不管是application还是library都是android{}下的。只有极少数的属性是只在...

2018-04-27 10:53:40 1518 1

原创 Android Gradle DSL 参考配置文档

构建脚本有很多,比如maven,或者ant之类的,但是用xml写的话就略显繁琐,很多繁琐的符号在工程太大的时候不利于维护和管理,而gradle的dsl则未我们带来了更加直观的配置体验。 DSL (Domain Specific Language)领域专用语言。使用DSL,可以扩展Gradle的语义,使用者可以通过DSL完成需要的配置,而不用关心具体的实现。 其实看了官方解释也不是太明白是什么东...

2018-04-23 17:53:00 1149

原创 Groovy语法学习(十)AST的使用

在开发Android项目中,经常会用到AbstractProcessor来构建注解处理器。在编译的时候生成代码,从而减少工作量。使用非常广泛的butterknife就是如此,但是最新版的github貌似是使用gradle插件来尽心生成,不过原理应该都类似,编译的时候通过对应的注解生成一些辅助类,或者主动注入一些方法。Groovy的AST就是类似的用法,由于Groovy的动态性,在AST中能做的事情...

2018-04-20 18:05:28 3129

原创 Groovy语法学习(六)JSON、XML使用

groovy对于json和xml的生成和解析不需要额外导入库了,直接调用api使用。一、JSON(一) JSON字符串创建1.使用JsonBuilder类JsonBuilder有call()方法传入closure,所以可以接像下面这样写,相当于调用call方法。def builder = new JsonBuilder()builder{ name'j...

2018-04-20 10:33:43 1347

原创 部分查看源码的要点总结

最近看了不少源码,然而看源码这种事情当时分析清楚了,下一次再看又感觉不太熟悉,毕竟Read The Fucking Source Code 嘛。所以把我感觉重要的点略微记录一下。一、在onLayout()方法中调用requestLayot()https://blog.csdn.net/litefish/article/details/53645942?utm_source=itdada...

2018-04-19 15:01:18 364

原创 Groovy语法学习(九)MOP探索之方法合成与委托

groovy不仅能方法注入,也可以方法合成,利用之前说的methodMissing方法。我们知道在找不到方法的时候会回调这个方法,然后我通过错误回调的时候进行方法注入。方法合成class Manager { def methodMissing(String name, def args) { println 'missing method' ...

2018-04-18 17:57:38 363

原创 Groovy语法学习(八)MOP探索之动态类与方法注入

groovy作为一门动态语言,使用非常灵活。MOP中提供了动态类与运行时的方法注入,整理了一下使用方法。一、动态类def expando =new Expando(name:"hello",fun1:{println "fun1"})println expando.name//这里这样使用依然会报错,相信也是只生成了方法//println expando.@namee...

2018-04-18 17:56:50 485

原创 Groovy语法学习(七)MOP探索之方法调用流程

groovy是一门具有元对象协议(Meta Object Protocol)或称 MOP的语言。在运行时向一个对象传递方法,或者消息时,这个协议使对象可以作出影响它自己的状态或者行为的特定选择。简单的说我们可以在运行时改变、增减类或者对象的方法、属性等,让其行为在运行时进行改变。这个在java里看起来四虎有些不可思议,但在groovy里可以简单的实现。 我们先看一张图,然后通过例子来理解一下。 ...

2018-04-12 15:56:37 1020

Android端AudioTrack以及OpenSL ES结合ffmpeg播放mp3文件

使用Android端AudioTrack以及OpenSL ES结合ffmpeg播放mp3文件

2018-05-17

Android使用lame编码MP3

使用lame库将pcm编码成mp3文件,使用Android Studio 新版,Cmake管理。

2018-01-31

空空如也

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

TA关注的人

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