自定义博客皮肤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的博客

研究总结与进步

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

原创 rk3586开发版新增系统调用(Android13)

最近想学一下kernel和hal,所以买了一块板子,带了个摄像头和屏幕,1100+,学习投资了。这个Android内核定一个系统应用感觉是真的麻烦,主要是有一层bionic C,一开始不熟悉的时候还是花了点时间去配置。

2025-03-31 16:34:33 864

原创 Lineageos 22.1(Android 15)制定应用强制横屏

有时候需要系统的某个应用强制衡平显示,不管他是如何配置的。我们只需要简单的拿到top的Task下面的ActivityRecord,并判断包名来强制实现。

2025-03-22 18:40:30 360

原创 Lineageos 22.1(Android 15)应用双开

应用双开简单说就是创建一个用户然后将已经存在的APP安装到制定的userId中,下面新建一个系统应用来实现功能。

2025-03-20 17:03:48 388

原创 Lineageos 22.1(Android 15)实现负一屏

方案是参考的这位大佬的,大家可以去付费订阅支持一波。我大概理一下Android15的修改。大佬的方案代码。

2025-03-19 15:21:11 446

原创 Lineageos 22.1(Android 15)通知栏添加截图开关

通知栏添加截图要注意一个问题,就是截图的时候要关闭通知栏,不然就直接截图通知栏了,然后就没有意义了。在下面的路径下添加开关,使用dagger注解注入即可。lineageos/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/加上finishi方法的回调lineageos/frameworks/base/packages/SystemUI/src/com/android/systemui/shade/Notificat

2025-03-10 00:16:55 472

原创 Lineageos 22.1(Android 15)Launcer打开Taskbar

Taskbar是Android高版本给大屏幕设备定制的快捷导航条,屏幕宽度或者高度达到一定程度,就会判断为平板而显示taskbar。/***/

2025-02-21 15:54:20 397

原创 Lineageos 22.1(Android 15)Launcer简单调整初始化配置

Launcer的初始化配置主要在如下的xml文件夹下,默认读取的5x5这里我们把device_profiles调整一下,然后新建一个default_workspace_my.xml作为我们自己的配置就行。注意Lineageos 的Launcer是在lineageos/packages/apps/Trebuchet这个目录下面,和原生aosp有点差别。简单调整device_profiles.xml,就调整了两行代码然后是 default_workspace_my.xml这里也调整了几个地方,把时

2025-02-20 22:03:43 1124

原创 Lineageos 22.1(Android 15) 开机向导制作

开机向导原理其实就是将特定的category的Activity加入ComponentResolver,如下然后我们开机启动的时候,FallbackHome结束,然后启动Launcher的时候,就会找到对应的开机向导Activity页面。所以我们现定制我们自己的应用。

2025-02-18 16:48:22 607

原创 Lineageos 22.1(Android 15) 编译隐藏API的 android.jar

有时候会我们开发系统应用需要一些系统的方法或者属性之类的,但是被隐藏导致无法正常显示,因为SDK提供的android.jar被隐藏了,所以只能看到sourcecode,实际上编译是会报错的,比如:一般这种无法是两种,直接添加一个类,同包名同类名,或者依赖framework.jar,可以骗过编译器编译成功.但是都是无法解决这个爆红的问题,我查了很多修改iml的方法,但是高版本的android studio实际上iml已经没啥东西了,所以目前的修改Iml的方法我测试基本实效,现在只能替换sdk目录下的an

2025-02-17 22:14:09 534

原创 Lineageos 22.1(Android 15) Winscope编译使用

winsocpe对于一些dump的分析还是很有用的,但是Lienageos编译之后的winscope用不了,很坑。记录一下使用的时候遇到的问题。首先我们进入lineageos/development/tools/winscope/ 目录下,默认已经安装好了nodejs环境。编译命令这里需要开vpn或者切换一下源,不然可能失败。然后直接提示require xxx version什么的,我们需要更新一下nodejs版本,我这里提示需要16.10.0接下来执行2.编译问题我这里可能vpn还是不太好,执行

2025-02-17 01:54:37 919

原创 Lineageos 22.1(Android 15)更换开机动画

我们直接用最简单的替换zip的方式来更换开机动画,首先我们要查看系统代码使用的zip包的路径,可能与aosp原生的代码不一定一样。} else {//**省略后续代码**//看到是使用mZipFileName来判断的,我们看看初始化的地方} else {//查找开机动画的路径通过代码我们可以查找到几个路径,最好验证的方式直接adb shell然后查找几个zip是否存在,也可以看Bootanimation的日志。

2025-02-15 18:41:09 466

原创 Lineageos 22.1(Android 15)预制APK

pixel3设备对应的是/vendor/google/blueline/blueline-vendor.mk。2.Myapp放入预制的Apk文件并且编写Android.bp。1.vender目录下新建apps/Myapp文件夹。3.添加对应的PRODUCT_PACKAGES。编译完成后就可以找到编译之后的apk了。Android.bp文件内容。

2025-02-14 23:16:11 569

原创 Lineageos 22.1 aosp15 定制学习专栏介绍

学习了一段时间的rom开发,需求也大概做了一些,但是一直没有记录下来总结,这个专栏开始会基于如下平台开始尝试做一些常见模块的需求定制,记录学习,如果有错误欢迎指正,大家一起学习!至于pixel编译刷机大家可自行查看官方文档。设备:Google Pixel 3基于aosp:android-15.0.0_r14。

2025-02-14 14:56:31 250

原创 lineageOS22 导入 Android Studio for Platform

lineageOS因为用的是brunch命令,和aosp有一点差别。然后asfp需要导入源码必须要lunch命令支持,但是我直接lunch的时候会碰到找不到target的情况。这时候如果直接导入asfp选择这个target会报错是无法建立代码索引的。

2025-01-13 17:10:29 277

原创 Android 12.0新增自定义HIDL问题记录

在device/generic/goldfish/vender.mk添加一下。我这里用的target就是模拟器的。1.首先最外层的bp不要使用update-makefiles.sh 去生成 ,基本上interface下面的文件夹都会被影响,可能会导致编译问题。最后就是selinux的配置,按照patch来就,由于大佬文章是图片,这里我贴一下新增的文件的内容。修改 system/tools/hidl/build/hidl_interface.go:498。bp使用ir目录下面的直接改一下就行了。

2024-11-27 23:05:57 603

原创 新Activity启动时Task的位置(分屏场景)

可以看到这类型的task是就孩子算是空也不会被移除,Launcher桌面直接启动的时候可以挂载的parent就是TaskDisplayArea了,和这里分屏的情况又有所区别,也就解释了分屏情况或者在桌面都直接启动的情况下,task位置和bound都显示正常。由此可以简单总结,在需要启动新的Task的情况下,会查找organizer创建的task,如果不需要就直接ActivityRecord挂载了,至于organizer创建的task特性可以看注释。那么这个类型的task是什么时候初始化的呢,经过查找。

2024-11-13 14:03:04 416 1

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

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

2023-09-26 21:11:10 840

转载 Android系统zygote启动到Launcher

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

2023-06-28 12:08:32 169

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

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

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

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

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

2022-11-09 22:33:25 774

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

银联规范、智能POS开发

2022-04-04 22:56:27 5227

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

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

2019-10-31 17:21:26 365

原创 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 1437

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

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

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

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

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

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

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

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

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

原创 ARM NEON指令集总结

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

2018-07-11 14:29:28 19641

原创 Android OpenGL ES 3.0 Pixel Buffer Object使用

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

2018-07-04 00:49:58 2486

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

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

2018-06-24 00:59:37 3352

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

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

2018-06-22 12:58:16 4668

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

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

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

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

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

2018-06-18 22:03:57 2679

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

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

2018-06-17 22:54:40 3738 1

原创 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 13969 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 2773 2

原创 Android OpenGL ES 帧缓冲FBO

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

2018-06-04 14:11:11 2518

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

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

2018-06-02 17:47:49 6799 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 2723

原创 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 1658

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

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

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

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关注的人

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