自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lin20080410的专栏

从站在巨人的肩上,向成为巨人迈进... 互相学习!

  • 博客(307)
  • 资源 (10)
  • 收藏
  • 关注

转载 FDbus

FDBus旨在为client-server之间提供面向连接,伸缩性强,安全可靠的IPC机制,进而发展成一套中间件开发框架,用于开发跨平台(Windows,QNX,Linux),多线程/多进程协同工作的中间件层

2022-10-20 08:25:25 2233 1

原创 binder传输大数据分析

分析在android中传递大数据的方式,及实现原理。

2022-05-29 07:26:08 1941

转载 Android Display架构分析

android display

2022-03-27 17:56:31 5627

转载 Android硬件加速

深度好文:理解Android硬件加速原理转 https://baijiahao.baidu.com/s?id=1709178794607037191&wfr=spider&for=pc教育专家雷教授发布时间: 2021-08-27 01:45工具主管,教育领域创作者关注硬件加速,直观上说就是依赖GPU实现图形绘制加速,软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在Android中也是如此,不过相对于普通的软件绘

2022-03-21 16:42:55 634

原创 java调用栈中行号

java 调用栈 行号 getLineNumber,,

2021-12-30 20:07:48 395

原创 android studio 应用的插件存放位置

apply plugin: ‘’/.gradle/caches/modules-2/files-2.1/com.tencent.matrix/matrix-gradle-plugin/2.0.2/aaa931ed5755a3770abbc11951acb6b99b9411c8

2021-11-18 10:01:45 2471

原创 Sublime Text编辑器 过滤所有符合条件的查找行

Sublime Text编辑器 过滤所有符合条件的查找行习惯了windows,第一次用Mac,好多工具的不熟悉,一,1,输入、选中要查找的字符串2,⌃ ⌘ G 快速查找所有的 (⌃ 这个是control, 不是数字6上的符号)3,⌘ L 选择行(匹配查找到关键字的每一行)5,⌘ C 复制6,⌘ N 新打开窗口7,⌘ V 粘贴二,1,输入、选中要查找的字符串2,⌘ f 查找3,⌥ ↩ 查找所有的4,⌘ L 选择行(匹配查找到关键字的每一行)5,⌘ C 复制6,⌘ N 新打开窗

2021-09-12 08:20:43 5624

原创 mediapipe 编译用于android的aar包

简要记录下,怎么编译mediapipe用于android aar包。一,mediapipe的介绍:参考博客 https://www.it610.com/article/1290670846662221824.htm参考官网,https://google.github.io/mediapipe/,本篇笔记以运动检测的使用为例:https://google.github.io/mediapipe/solutions/instant_motion_tracking二,我尝试了在windows环境下编译,

2021-06-18 21:49:00 2397 4

原创 通过gradle动态更改AndroidManifest.xml

记录下,通过通过gradle动态更改AndroidManifest.xml属性:使用场景,有些功能用到的Application,Activity类需要动态开关,在不打开这个功能时,相关的Application,activity,都不要被编译。1,先再gradle.peoperties中定义开关,APP_FEATURES=false2,然后修改app下的build.gradle,替换原mainfest中application,activity类。//update android:nam

2021-05-17 08:40:07 2122 3

原创 RecyclerView分隔条

因为没能找到直接的控件,给RecyclerView添加item间隔,及定义分隔条颜色,所以自定义RecyclerView分隔条,方便自定义分隔条颜色,item间隔,package com.custom.views;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.gra

2021-04-26 08:51:10 160 1

原创 Windows 平台下使用ffmepg

本文记录下windows平台下测试ffmpeg的过程。项目源码已上传github,https://github.com/whcx/FFmpegPrj/tree/master1,首先ffmpeg库的编译,可以从ffmepg官网下载编译好的库。2,Visual studio中创建window 项目。 引用第三方头文件、库文件的配置,可以在项目属性中配置头文件、库文件的路径,这种方式不利于项目的合作开发,这里使用cmake的形式做编译配置。cmake_minimum_required...

2020-12-30 19:32:35 310

原创 Ubuntu环境下编译FFmpeg的流程

Ubuntu环境下编译FFmpeg的流程在Windows10系统下,安装Ubuntu系统不需要安装虚拟机,使用Window10自带的ubuntu引导程序安装ubuntu系统。安装步骤:,控制面板->程序->启用或关闭Windows功能 打开 适用于Linux的Windows子系统 选项。在Microsoft Store中搜索ubuntu,如果有多个版本,建议选择**.04的版本是最稳定的,除了**.04版本,可能还会有**.10版本。选择之后,就进...

2020-12-30 19:14:46 942

原创 使用mediacodec做视频解码

记录一下做视频解码的demo:github地址:https://github.com/whcx/AudioVideoEncoderDecoder存储权限申请: 当前项目targetSdkVersion 29,按之前方式动态申请权限 Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,无法在sdcard的共有目录创建文件。 可以使用context.getExternalFilesDi

2020-09-01 09:23:36 2369

原创 使用Java代码自定义ConstraintLayout

因为xml格式的布局,在打包成jar时无法使用,所以在需要给合作方提供jar,有需要在jar包提供UI需求时,还是用java代码实现UI组件更合适。相关源码,已经上传到github,https://github.com/whcx/custom-widget基于ConstraintLayout定义组件,仅适用java代码完成布局,方便在jar包中使用。在这里做个笔记记录,方便重用,控件的测试以View + Fragment启动1,图片与文本的叠加 :LuckyView,RedPap..

2020-08-30 09:49:11 1124

原创 Android Native内存分析,systrace,

Google官方的调试本地内存工具:https://source.android.com/devices/tech/debug/native-memory1.malloc debug: adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace\ leak_track\ logwrapper"' adb shell am force-stop com.gritworld.g...

2020-08-09 15:17:29 2703

原创 HeapSnap的使用

github地址:https://github.com/albuer/heapsnapgithub的源码,缺少相关库,所以不能编译出可执行文件,及想要的lib,我补充了缺少的库,可以正常编译出可执行文件,及lib。HeapSnap的使用,在https://github.com/albuer/heapsnap地址有比较详细的说明。这里只是记录下,添加编译依赖库,可以正常编译出在手机上使用的可执行文件,及lib。这是我上传的一个可以在android上正常编译的资源路径:https://git

2020-08-09 14:05:13 479

原创 MonkeyTest脚本

Monkey测试的相关源码:android\development\cmds\monkeyandroid\development\tools\monkeyMonkey的使用,搜一下,有很多博客介绍。下面是monkey测试的脚本,可以直接拿来用,相关参数,通过帮助文档很容易理解:首先是一个批处理文件:Monkey_app.bat,文件名可以改成你自己应用的名字。adb rootadb wait-for-deviceadb shell sleep 3

2020-08-09 11:13:22 312

原创 NativeActivity使用流程

NativeActivity.java的使用中,屏幕绘制的操作是用native代码实现(如C++),显示UI的窗口跟普通的java层app是一样的,也是一个Activity.java,就是NativeActivity.java,

2020-04-21 15:08:00 2117

原创 Camera + opengles,有多级filter的处理(四)

在处理摄像头数据特效前,先说一个概念,离屏渲染.在用opengl绘制视频时,我们是用GLSurfaceView显示预览效果,也即是直接把摄像头数据传给了着色器,然后由着色器通知opengl去绘制,这种方式是直接把摄像头数据绘制到屏幕上,片元找色中的使用的采样器是sampleExternalOES,也就是说摄像头数据是作为opengl的一个外部纹理来使用的.但是实际在camera的应用...

2020-03-27 17:01:14 998

原创 Camera + opengles录制视频,录制快速,慢速视频(三)

视频录制可以使用android提供的api,如MediaRecorder,对视频的编码也有MediaCodec这样的api可以使用。MediaCodec的使用,用到两个缓存队列,一个输入缓存队列,一个是输出缓存队列,只需要使用queueInputBuffer把要编码的数据byte数组提交到输入队列,就可以使用enqueueOutputbuffer从输出队列取出编码完成的数据。这个用法有一个前提,就是要拿到待编码的byte数据。但是,在使用opengl es将摄像头数据绘制到屏幕时,数据的处理是在着色

2020-03-27 14:41:58 1220

原创 Camera + opengl es 使用opengls绘制摄像头数据(二)

实现Camera数据的预览,可以使用TextureView,作为View heirachy的一个硬件加速层,从SurfaceTexture中获取到的纹理数据更新到HardwareLayer中,完成显示;也可以如这篇文章里讨论的,使用opengles完成绘制,相比较与前一种,使用opengles实现绘制,可以更方便的借助opengl的强大api添加特效处理,比如完成美颜的功能等.OpenGL...

2020-03-22 10:45:24 3244 3

原创 Camera直播视频数据的获取,及RTMP推流(一)

通过摄像头直播推流的场景中,需要先从摄像头获取去视频元数据,然后交给x264编码器(加入用的视频编码器是x264)编码,最后经RTMP封包后发送给服务器.我们使用CameraX来获取摄像头数据,对于CameraX的使用,参考官方文档:https://developer.android.google.cn/training/cameraxCameraX 是一个 Jetpack 支持库,旨...

2020-03-19 23:25:53 4997 1

原创 Android中音频元数据的采集,及RTMP推流

在用手机做直播推流时,不管是录屏直播,还是摄像头直播,都要用到音频的元数据.在Android中,可以借助AudioRecord来采集音频数据,然后通过faac编码库,将编码后的数据交给RTMP去封包后发送给服务器.这篇主要讨论从AudioRecord获取音频数据,然后通过faac编码,经过RTMP封包后发送到直播服务器的过程.一,如果要使用手机的录音功能,需要在AndroidMan...

2020-03-19 21:14:00 2123 1

原创 基于FFmpeg开发视频播放器,音视频同步(四)

为什么需要音视频同步?从前面的代码可以看到,播放的过程有解码线程不断的把解码好的AVFrame数据放入队列,然后播放线程从队列中取出解码后的数据,经过格式转换,分别送给ANativeWindow去绘制,送给OpenSlES去播放声音,这个过程如果不去控制,播放的速度就取决与解码线程,播放线程的处理速度,及系统的性能.这样播放的效果,肯定是不流畅的.为了让播放尽可能流畅,就要把视频播放的帧率...

2020-03-14 12:08:00 929

原创 基于FFmpeg开发视频播放器,音频解码播放(三)

音频的播放,这里用的时OpenSLES,这是一套跨平台,针对嵌入式系统做过优化的api,它为嵌入式移动多媒体设备上的本地应用程序提供标准化, 高性能,低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度.当然Android平台上音频的播放,也可以借助java层AudioTrack接口,但是因为ffmpeg的整个处理流程都是在native层,所以使用NDK提供的...

2020-03-13 22:57:21 478

原创 基于FFmpeg开发视频播放器,视频解码播放(二)

一,从setDataSource开始,设置播放的数据源,可以时本地视频,也可以是网络链接EnjoyPlayer.javaprivate String mPath = "/sdcard/mpeg.mp4"; public void setDataSource(String path) { setDataSource(nativeHandler, path); ...

2020-03-13 22:27:50 995

原创 基于FFmpeg开发视频播放器, 基本流程(一)

刚开始学习FFmpeg,用几篇文章记录下,使用ffmpeg开发一个简单的视频播放器,大概的过程.这里只讨论核心代码,如解封装,音频的解码播放,视频的解码播放,音视频同步,不涉及UI布局.http://ffmpeg.org/一, FFmpeg是一套用来记录,转换数字音频,视频,并能将其转化为流的开源项目,拥有丰富的命令来实现音视频相关的操作,其源码是以模块化的方式进行构建,可以根据需要选择不...

2020-03-13 20:25:18 3397

转载 视频相关概念

转自:http://www.samirchen.com/video-concept/视频相关概念视频文件格式文件格式这个概念应该是我们比较熟悉的,比如我们常见的 Word 文档的文件格式是.doc,JPG 图片的文件格式是.jpg等等。那对于视频来说,我们常见的文件格式则有:.mov、.avi、.mpg、.vob、.mkv、.rm、.rmvb等等。文件格式通常表现为文件在操作系...

2020-03-13 17:13:11 643

转载 FFmpeg 视频处理入门教程

FFmpeg 视频处理入门教程http://www.ruanyifeng.com/blog/2020/01/ffmpeg.html

2020-03-13 11:20:11 252

原创 IOC技术-编译时注入(Butterknife,dagger2的实现原理)

不同于运行时注入的思想,编译时注入主要是借助APT工具,在编译时生成辅助类,来达到解耦,方便编程的目的.编译时注入比较流行的框架有Butterknife,Dagger2,针对android平台有daggerAndroid,实际daggerAndroid是对dagger2的优化,因为dagger2使用过程中有点违反了注入的核心思想(在注入的类里面,能够看到提供注入的类的对象),而daggerAn...

2020-03-07 22:32:10 320

原创 IOC技术-运行时注入(View注入,Event注入的原理)

什么是IOC?官方定义:IOC是原来由程序中主动获取的资源,转变为由第三方提供,并有原来的程序被动接受的方式,已达到解耦的效果.当然,这种以专业名词解释专业名词的方式,看了还是一头雾水.直白点说:Inversionof control ,直接翻译过来就是控制翻转,这个理论主要用于实现对象之间的解耦.也叫依赖注入,就是IOC容器在运行过程中,动态的将某种依赖关系注入到对象之中....

2020-03-02 22:44:25 303

原创 Android中插件化实现的原理,hook Activity(二)

继续分析Android中插件化实现的原理这里的场景是通过Java层的Hook技术,实现Activity插件化,以api29为例,如果其他的api版本,需要根据具体代码做兼容.Hook技术,通常就是用反射,代理模式改变系统的调用流程,或者说拦截事件的传递,做一些特定的处理.这样就可以在应用进程,通过hook技术改变系统进程的执行流程.要实现Hook,就要先找到Hook的点,Hook点的选...

2020-02-29 23:29:16 732

原创 ubuntu下编译ffmpeg的过程

后续一段时间准备音视频相关知识的学习,所以先编译ffmpeg做练习用.以最新版本的android api 29, ndk21, ffmpeg4.2,编译ffmpeg库文件.1,环境配置,1)安装yasm,如果没有安装会报nasm not found的错误.下载http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar....

2020-02-27 19:44:47 929

原创 MMKV的原理-如何实现跨进程(2)

接上一篇:https://blog.csdn.net/lin20044140410/article/details/104450727在mmkv的使用中,肯定是有多线程,多进程的同步问题,有同步问题就肯定会用到锁,所以先从mmkv中锁的使用说起,mmkv处理线程的同步使用了mutex互斥锁, 处理进程间的同步时使用了flock文件锁.以下锁的使用都是在native层.先看下互斥锁是怎么...

2020-02-24 21:32:37 3223

原创 腾讯开源组件MMKV的使用及原理(1)

https://github.com/Tencent/MMKV/blob/master/readme_cn.md在需要持久化保存key-value这样的键值对时,通常考虑使用的是SharedPreference,SP最终以xml文件的形式保存数据,并且是直接IO的方式读写数据,在使用中会概率性碰到ANR的问题,不管是使用异步的方法apply,还是阻塞式的commit提交数据,都看会因为IO的瓶...

2020-02-23 19:50:19 3233

原创 Android中减小apk大小的方式

减小APK空间的方式:一,矢量图,不会因为缩放而让图片质量下降,又可以减小apk的大小,但是有个限制,通常矢量图常应用于小图标,比如200*200以下的.除去美工给出,还可以从Android studio中直接使用默认的一些资源.用法是,在资源上点右键 ->新建 -> Vector assert,其中有很多预制的矢量图,标准的矢量图是<svg>为根节点的,and...

2020-02-14 10:21:56 839

原创 ViewPager + Fragment的懒汉加载模式

ViewPager + Fragment的懒汉加载模式首先,说下viewpager的使用场景下为什么需要懒汉式加载.ViewPager本身是带有缓存机制的,对缓存页数的设置可以通过public void setOffscreenPageLimit(int limit) {}实现,但是这个函数的实现中,有默认缓存页数DEFAULT_OFFSCREEN_PAGES 值为1,就是说即使你调用...

2020-02-13 14:11:39 317

原创 ViewPager中的高度属性设置后为什么不符合预期

分析一个Viewpager中设置高度属性wrap_content为什么不是预期的内容给大小,而是充满整个屏幕高度.截图:先说下简单的布局:<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

2020-02-11 16:08:37 348

原创 Android中插件化实现的原理,宿主app运行插件中的类 (一)

分析下Android中插件化实现的原理这里的场景是通过Java层的Hook技术,实现Activity插件化,以api29为例,如果其他的api版本,需要根据具体代码做兼容.Hook技术,通常就是用反射,代理模式改变系统的调用流程,或者说拦截事件的传递,做一些特定的处理.这样就可以在应用进程,通过hook技术改变系统进程的执行流程.要实现Hook,就要先找到Hook的点,Hook点的选择...

2020-02-06 23:48:11 1100

原创 Android序列化Serializable,Parcelable接口的应用,及可能的坑

什么是序列化?简单说就是将数据结构或者对象,转换成可以存储或者传输的数据格式的一个过程,也即是把数据结构,对象转成二进制串的过程.序列化的是对象,确切说是对象中的变量,不是方法,不是类.为什么需要序列化?在操作系统底层,数据是以字节序列传递,所以如果要传递对象,就需要序列化,反序列化操作.所以,进程间通信,本地数据存储,网络数据传输都需要序列化的支持.序列化的实...

2020-02-05 15:23:02 444

simple-ffmpeg-player.zip

基于ffmpge实现的简单的播放器.仅包含音视频处理相关代码,不涉及UI.主要作为学习ffmpeg的笔记记录.适合小白,大牛请绕行哈...

2020-03-13

simplePlayer.zip

基于ffmpge实现的简单的播放器.仅包含音视频处理相关代码,不涉及UI.主要作为学习ffmpeg的笔记记录.适合小白,大牛请绕行哈...

2020-03-13

jetty-libs-9.4.zip

jetty-client-9.4.24.v20191120, jetty-continuation-9.4.24.v20191120 jetty-http-9.4.24.v20191120 jetty-io-9.4.24.v20191120 jetty-security-9.4.24.v20191120 jetty-server-9.4.24.v20191120 jetty-servlet-9.4.24.v20191120 jetty-util-9.4.24.v20191120

2019-11-26

Gif文件的解码

Gif图片文件的解码过程

2018-02-14

android studio3.1匹配的gradle版本最新4.4

android studio3.1匹配的gradle版本最新4.4,gradle-4.4-20171031235950+0000-all.zip

2017-12-25

release3.1

cglib/cglib/3.1 Code Generation Library maven依赖 &lt;!-- https://mvnrepository.com/artifact/cglib/cglib --&gt; <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>3.1</version> </dependency>

2017-11-21

android make 介绍

android make 介绍 Make 文件说明 整个 Build 系统的入口文件是源码树根目录下名称为“Makefile”的文件,当在源代码根目录上调用 make 命令 时,make 命令首先将读取该文件。 Makefile 文件的内容只有一行:“include build/core/main.mk”。该行代码的作用很明显:包含 build/core/main.mk 文 件。在 main.mk 文件中又会包含其他的文件,其他文件中又会包含更多的文件,这样就引入了整个 Build 系统。 这些 Make 文件间的包含关系是相当复杂的,图 3 描述了这种关系,该图中黄色标记的文件(且除了 $开头的文件) 都位于 build/core/ 目录下。 Android 源码中包含了许多的模块,模块的类型有很多种,例如:Java 库,C/C++ 库,APK 应用,以及可执行文件 等 。并且,Java 或者 C/C++ 库还可以分为静态的或者动态的,库或可执行文件既可能是针对设备(本文的“设备”指 的是 Android 系统将被安装的设备,例如某个型号的手机或平板)的也可能是针对主机(本文的“主机”指的是开发 Android 系统的机器,例如装有 Ubuntu 操作系统的 PC 机或装有 MacOS 的 iMac 或 Macbook)的。不同类型的模块 的编译步骤和方法是不一样,为了能够一致且方便的执行各种类型模块的编译,在 config.mk 中定义了许多的常量, 这其中的每个常量描述了一种类型模块的编译方式,这些常量有: BUILD_HOST_STATIC_LIBRARY:= $(BUILD_SYSTEM)/host_static_library.mk BUILD_HOST_SHARED_LIBRARY:= $(BUILD_SYSTEM)/host_shared_library.mk BUILD_STATIC_LIBRARY:= $(BUILD_SYSTEM)/static_library.mk BUILD_RAW_STATIC_LIBRARY := $(BUILD_SYSTEM)/raw_static_library.mk BUILD_SHARED_LIBRARY:= $(BUILD_SYSTEM)/shared_library.mk BUILD_EXECUTABLE:= $(BUILD_SYSTEM)/executable.mk BUILD_RAW_EXECUTABLE:= $(BUILD_SYSTEM)/raw_executable.mk BUILD_HOST_EXECUTABLE:= $(BUILD_SYSTEM)/host_executable.mk BUILD_PACKAGE:= $(BUILD_SYSTEM)/package.mk BUILD_PHONY_PACKAGE:= $(BUILD_SYSTEM)/phony_package.mk BUILD_HOST_PREBUILT:= $(BUILD_SYSTEM)/host_prebuilt.mk BUILD_PREBUILT:= $(BUILD_SYSTEM)/prebuilt.mk BUILD_MULTI_PREBUILT:= $(BUILD_SYSTEM)/multi_prebuilt.mk BUILD_JAVA_LIBRARY:= $(BUILD_SYSTEM)/java_library.mk BUILD_STATIC_JAVA_LIBRARY:= $(BUILD_SYSTEM)/static_java_library.mk BUILD_HOST_

2017-11-16

如何分析JAVA crash

如何分析JAVA crash 为什么程序会Crash? 什么是异常? 如何分析JAVA Crash 程序执行时发生了无法处理的异常 崩溃分为 Java Crash 和 Native Crash

2017-11-16

Arm公司培训资料

ARM7总线接口,ARM_THUMB指令,ARM编程技巧,ARM架构,ARM嵌入式开发,ARM处理器内核介绍

2013-12-20

ADB的安装卸载及使用

adb的使用介绍,包括adb的安装,adb的卸载,以及adb的常用的命令

2013-09-27

空空如也

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

TA关注的人

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