- 博客(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
转载 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
原创 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文件
2018-05-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人