- 博客(109)
- 资源 (12)
- 收藏
- 关注
原创 Android Camera预览实现方案总结
无论哪种预览方案,都离不开Surface这个对象,App将Surface传递给CameraServer,CameraServer拿到GraphicBuffer对应的buffer_handle,继续传给HAL,HAL再对buffer_handle进行映射,拿到buffer地址,往该地址上填充数据。生产者就是surface(对相机而言,本质的生产者就是camera),消费者就是所有onFrameAvailable实现的地方(以上各个组件有的不一样,有的实质上一样的)。哪些场景用哪些好一点?
2024-08-14 15:26:22 1040
原创 关于JNI里面的一点疑惑
网上也搜索过问题的答案,都说jobject是java对象,但是我打jobject的地址发现,即使 同一个线程,不同的方法打印的jobject地址都是不一样的。可以看到,大部分情况jobject是互不相同的,既然它是java对象,而JNI native方法所在的java对象就一个,为啥每次不一样呢?后来使用 env->IsSameObject 比较了一下发下是一样的,具体原理也不清楚,希望懂的朋友指点一下。最近在复习JNI的使用,之前也用过,都是边学边用,里面很多东西没有仔细理解过。
2024-08-13 16:30:45 604
原创 对于SurfaceView的理解
所以SurfaceView又是什么?作为app开发,SurfaceView当成View使用其实很简单,但其背后是基于生产者消费者模型的GraphicBuffer运转,BLASTBufferQueue作为GraphicBuffer的管理者统筹所有流程。
2024-08-06 16:55:00 113
原创 CameraServer 散碎知识点理解
它是在openCamera()时,在camera3Device::initialize()时,根据ANDROID_INFO_SUPPORT_MANAGEMENT_VERSION来决定的,只有这个TAG的值为:ANDROID_INFO_SUPPORT_MANAGEMENT_VERSION_HIDL_DEVICE_3_X时才会将mUseHalBufManager置为true。正常流程buffer是和request一起下发到hal, mUseHalBufManager是Hal在自己需要的时候去申请buffer。
2024-07-29 16:49:52 345
转载 Android11快速编译并替换framework.jar
可以看到framework变为了framework-minus-apex,通过stem属性使编译出来的模块还叫framework.jar,这样修改的目的一个是为了向后兼容以前的jar名称,一个也是为了表示现在framework是减去了apex的模块,所以带个minus-apex的后缀。三个目录(不删除会一直卡在开机动画),最后再运行下面的命令重启zygote,这样新替换的framework.jar就生效了。然后把framework.jar push到system/framework/下面,同时还要。
2024-07-23 16:49:00 115
原创 startActivity启动流程
从桌面点击应用图标开始到Activity创建并执行onCreate,activity的启动涉及到两个进程system_server(AMS所在进程)和Zygote(如果进程没有创建需要先创建)如下是创建进程的流程,Socket服务端未贴出,app进程的创建可参考 (如下是应用进程已经创建,一直到Activity的onCreate被调起。realStartActivityLocked: 应用进程已经创建。startProcessAsync:应用进程还未创建。
2024-06-20 13:41:47 299
原创 Zygote进程的理解
Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。
2024-06-17 14:31:39 322
原创 CameraProvider启动流程
从Android 8.0之后,Android 引入Treble机制,主要是为了解决目前Android 版本之间升级麻烦的问题,将OEM适配的部分vendor与google 对android 大框架升级的部分system部分做了分离,一旦适配了一个版本的vendor信息之后,之后的版本再进行升级时,直接升级system即可,这个就不会给OEM厂商升级带来太大的工作量,直接升级最新功能,可以解决目前市面上Android版本过来凌乱的问题。 首先Treble机制在Vendor分区中有两种模式,一个编译成so库,
2024-05-31 19:38:18 229
转载 Native内存泄露分析---perfetto
或者参考如下,修改tools/heap_profile 中 curl 下载方式。这里只能抓到一次内存的快照,如果想连续记录多次内存的数据需要能Root手机。如果下载失败,Windows系统请 从连接下载 并参考里面说明放文件。抓取一次某个应用的内存命令如下,注意提前关闭其它adb程序,如AS。可以看到第一个大块有内存一直上升,结合其中的栈堆,分析并解决即可。有时很小泄露,不容易看出,可以反复很多次操作应用后,对比前后数据。通过点击方块,对比不用时刻的内存。每执行一次,上一步会记录一次。
2024-05-27 10:46:17 268
转载 Android build.gradle配置教程 史上最全的Android build.gradle配置教程
从Android Studio3.0后compile引入库不在使用,而是通过api和implementation,api完全等同于以前的compile,用api引入的库整个项目都可以使用,用implementation引入的库只有对应的Module能使用,其他Module不能使用,由于之前的项目统一用compile依赖,导致的情况就是模块耦合性太高,不利于项目拆解,使用implementation之后虽然使用起来复杂了但是做到降低偶合兴提高安全性。如果这样,Gradle在打包时就会提示错误(警告)。
2024-01-24 14:59:14 2641
原创 GLES学习笔记---OpenGL绘制到ImageReader
ImageReader 之前经常使用在camera应用里面,创建一个ImageReader,然后获取surface,配流和下发request时候将surface下发给framework,中间具体对ImageReader做了什么没有具体研究过,等到Hal层camera回帧的时候,ImageReader的onFrameAvailable就会回调上来,通过reader就可以获取图片了。虽然使用上很简单,但是其实ImageReader里面要学习的东西还是很多的。
2023-12-25 09:23:28 973
原创 GLES学习笔记---EGLImage绑定纹理
为啥需要glFinish暂时还不清楚,没有glFinish的话ptrReader里面的像素值还是输入的inBuffer的值。还有就是不清楚为啥绘制完了,绘制的结果就到了HardwareBuffer里面了,HardwareBuffer是输入啊。绘制完了glFinish一下,AHardwareBuffer_lock就能将绘制好的内容读出来。离屏渲染,绘制到fbo对应的纹理上(不是屏幕)绑定EGLImage到纹理。创建EGLImage。
2023-12-21 20:45:35 1574 1
原创 GLES学习笔记--glReadpixels 读取数据全是0
textureId 和 bitmap绑定,offTexture和fbo绑定,通过绑定fbo实现离屏渲染,将textureId对应的纹理渲染到offTexture上,最后将offTexture绘制到屏幕。所有流程都正常,最后也绘制到屏幕了 ,但是当我想通过glReadPixel读取一下buffer看看的时候,发现buffer内容是0,找了半天没找到问题所在。通过循环遍历看看buffer里面有没有非0的,然后重这非0的地方开始输出像素看看,发现确实和传入的一样,所以猜想是对的。
2023-12-20 09:50:15 581
原创 Android Camera FW 里的requestId和frameId
安卓相机frameworks里面经常出现requestId和frameId,最近简单看了一下代码,发现相关流程还是很复杂的,总结来看requestId 就是上层(java)发送的repeating(capture)请求的id,是从0开始递增的。所以综上看 requestId就是一个标记上层下发request的作用,回调metadta的时候方便找到对应的回调接口,所以requestId的作用仅仅是联系APP和FW的,对于HAL来说没有作用。
2023-10-07 17:35:08 416
原创 Android 监听当前网络状态是否可以访问Internet
import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Hand...
2019-11-14 17:42:26 234
原创 copy DB to sdcard
public static void copyDB(){ File dbFile = new File(Environment.getDataDirectory().getAbsolutePath()+"/data/com.hozo.easypanorama/databases/easypano.db"); FileInputStream fis = null; File...
2019-09-23 15:00:38 161
转载 JNI_OnLoad简介
一、JNI_OnLoad简介Java JNI有两种方法,一种是通过javah,获取一组带签名函数,然后实现这些函数。这种方法很常用,也是官方推荐的方法。还有一种就是JNI_OnLoad方法。当Android的VM(Virtual Machine)执行到C组件(即*so档)里的System.loadLibrary()函数时,首先会去执行C组件里的JNI_OnLoad()函数。它的...
2019-08-15 15:21:55 897
转载 Android Studio 3.0 JNI的实现
https://blog.csdn.net/ziyoutiankoong/article/details/79696279
2019-08-15 14:47:54 112
转载 Android touch 事件分发
1. 效果图下面布局中用到的控件都是自定义的,我们可以通过对自定义控件的相关事件方法添加log。练习图2.主要代码Activity @Override public boolean onTouchEvent(MotionEvent event) { Log.i(TAG,"Activity's onTouchEvent returns su...
2019-08-08 11:40:03 146
原创 camera api2 open camera
CameraManager 属于 App 进程CamseraService CameraDeviceClient Camera3Device CameraProviderManager 属于 cameraserver 进程CameraProvider CameraDevice 属于 camera hal 进程...
2019-07-30 14:41:02 277
转载 Android自定义控件三部曲文章索引
https://blog.csdn.net/harvic880925/article/details/50995268
2019-04-28 15:03:23 146
转载 Android ImageView 的scaleType 属性图解
ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性。该属性指定了你想让ImageView如何显示图片,包括是否进行缩放、等比缩放、缩放后展示位置等。Android 提供了八种scaleType的属性值,每种都对应了一种展示方式,下面就对每一种scaleType属性值进行图文解释。首先,这个是测试放到ImageV...
2019-04-12 10:09:50 169
原创 dispatchTouchEvent onInterceptTouchEvent onTouchEvent
https://blog.csdn.net/qq_30379689/article/details/53967177dispatchTouchEvent 事件分发onInterceptTouchEvent 事件处理onTouchEvent 事件响应1、 如果所有都返回 superdispatchTouchEvent (Activity)dispatchTou...
2019-03-22 16:39:22 288
原创 StatusBar 和 NavigationBar 的 隐藏与浸透式
/** * View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。 * View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住。 * * View.SYSTEM_UI_FLAG_HIDE_NAVIGATI...
2019-02-28 17:42:58 425
转载 invalidate和requestLayout
总述:View有两个很重要的方法:invalidate和requestLayout,常用于View重绘和更新。Invalidate:To farce a view to draw,call invalidate().——摘自View类源码从上面这句话看出,invalidate方法会执行draw过程,重绘View树。当View的appearance发生改变,比如状态改变(en...
2019-02-28 11:48:44 447
转载 android布局中几个距离单位的区别:px、dp、sp
一、px像素,我们经常说的400*800这种的就是像素,这个比较好理解。二、dp要理解dp,首先要先引入dpi这个概念,dpi全称是dots per inch,对角线每英寸的像素点的个数,所以,它的计算公式如下:比如height和width即为长宽的像素,平方和即为对角线的像素个数,size即我们常说的5寸手机、4寸手机中的5和4,即对角线的长度。显然,一样是5寸的手机...
2019-02-28 11:46:50 511
转载 Thread.currentThread()与this的区别
转载自: https://blog.csdn.net/yezis/article/details/57513130 希望博主见谅在自定义线程类时,如果线程类是继承java.lang.Thread的话,那么线程类就可以使用this关键字去调用继承自父类Thread的方法,this就是当前的对象。另一方面,Thread.currentThread()可以获取当前线程的引用,一般都是在没有线程...
2018-12-18 19:52:10 247
原创 Android Studio 中的个人习惯设置
1、方法参数名提示的取消方法默认情况下 Android Studio 中字符串前面有个 hint,看着不习惯2、设置默认展开方法3、默认文件编码建议使用 utf-8,中国的 Windows电脑,默认的字符编码为 GBK。Settings--> File Encodings。建议将 IDE Encoding、 Project Encoding、 Properties F...
2018-12-11 10:29:38 545
原创 Activity传递的Parcelable并不是同一个对象
网上清一色的说Activity之间通过parcel传递对象,但是其实这并不是同一个对象。我不知道是我理解错了还是怎么回事?希望看到文章的人点评一下class MyParcelable implements Parcelable { private static final String TAG = "TestActivity"; private String userna...
2018-10-24 15:07:30 503 1
Linux 下的 Wireshark
2013-05-05
打开perfetto网站报错
2023-10-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人