android开发
文章平均质量分 92
徐福记456
生命不息,奋斗不止,热爱音视频,努力维护开源社区,记录自己成长之路。
展开
-
Android端极致画质体验之HDR播放
高动态范围HDR视频通过扩大亮度分量的动态范围(从100cd/m2到1000cd/m2),以及采用更宽的色彩空间BT2020,提供极致画质体验。从Android10开始,支持HDR视频播放。原创 2023-11-29 21:40:54 · 3143 阅读 · 0 评论 -
Android的JNI开发全面介绍与最佳实践
JNI全称是Java Native Interface,为Java本地接口,是连接Java层与Native层的桥梁。在Android进行JNI开发时,可能会遇到couldn't find "xxx.so"问题,或者内存泄漏问题,或者令人头疼的JNI底层崩溃问题。Java层如何调用Native方法?Java方法的参数如何传递给Native层?而Native层又如何反射调用Java方法?这些问题在本文将得到答案,带着问题去阅读会事半功倍,接下来我们开始全方位介绍与最佳代码实践。原创 2022-04-14 20:51:51 · 28429 阅读 · 7 评论 -
Android音视频全面介绍与代码实践之音效(四)
Android在应用层提供丰富的多媒体接口,本文主要介绍音效处理:均衡器风格、预设混响、重低音调节、音量增强、可视化动态频谱,这些音效都使用audioSessionId进行绑定。让用户可选择/设置自己喜欢的风格,身临其境地感受不同歌曲的跳动旋律。方便开发者进行二次开发,打造出酷炫的音乐播放器。原创 2020-10-21 09:00:28 · 21886 阅读 · 2 评论 -
Android音视频全面介绍与代码实践之CameraX(三)
Android在应用层提供丰富的音视频多媒体接口,本文主要介绍CameraX,背景是在Camera2基础上,提供Lifecycler生命周期管理,提供更加简洁易用接口,包括摄像头预览、拍照、录像、图片分析,另外支持扩展接口:自动切换弱光模式、焦外成像、HDR拍摄等。原创 2022-04-02 15:32:45 · 22112 阅读 · 4 评论 -
Android音视频全面介绍与代码实践(二)
Android在应用层提供丰富的音视频多媒体接口,第一篇文章已经探讨:MediaPlayer、MediaCodec、AudioTrack、MediaMuxer、MediaExtractor。本文主要介绍MediaRecorder、MediaMetadataRetriever、AudioRecord、AudioManager,并且结合代码实例,希望能让大家对Android多媒体有深刻认识。...原创 2022-03-29 21:04:01 · 7230 阅读 · 0 评论 -
Android音视频全面介绍与代码实践(一)
Android在应用层提供丰富的音视频多媒体接口,包括MediaPlayer、MediaCodec、AudioTrack、MediaMuxer、MediaExtractor、MediaRecorder、MediaMetadataRetriever、AudioRecord、AudioManager、Camera/Camera2/CameraX等。本文对咱们常用的多媒体API进行介绍,并且结合代码实例,希望能让大家对Android多媒体有深刻认识。原创 2022-03-24 20:35:33 · 10086 阅读 · 1 评论 -
Vulkan与OpenGL对比——Vulkan的全新渲染架构
OpenGL是Khronos Group组织发布的跨平台图像渲染引擎。在这里科普一下Khronos组织,由Intel、Nvidia等公司共同创立,致力于创建开放标准的应用程序API。大名鼎鼎的OpenGL、OpenGL ES、WebGL、Vulkan都是来自Khronos。而vulkan称为“下一版本的OpenGL”,旨在提供更低的CPU开销和更多GPU控制。Android API 24以后支持vulkan,iOS在WWDC2014也推出Metal图像渲染。本文主要探讨Vulkan的全新渲染架构。原创 2022-02-14 10:05:50 · 33976 阅读 · 6 评论 -
Android端使用AAduio实现高性能音频
AAudio 是在 Android O 版本中引入的全新 Android C API,与AAudio类似的是oboe库。此 API 专为需要低延迟的高性能音频应用而设计。应用通过读取数据并将数据写入流来与 AAudio 进行通信。AAudio 在应用与 Android 设备的音频输入端及输出端之间传输音频数据。应用通过读取和写入以 AAudioStream 结构表示的音频流来传入和传出数据。这些读写操作可以是阻塞式调用或非阻塞式调用。原创 2022-02-09 15:31:59 · 6489 阅读 · 0 评论 -
Android图形渲染框架
Android图形渲染框架包括:Gralloc分配缓冲区,BufferQueue作为缓冲队列连接生产者与消费者,可以使用TextureView、SurfaceView和GlSurfaceView原创 2021-06-20 17:17:24 · 26169 阅读 · 2 评论 -
2020Google开发者大会总结
今年比较特殊,由于疫情原因,Google开发者大会改为线上形式。但是依然如期举办,热情不减,今年核心主题是“代码不止”,分为6场线上科技盛会。11月16日,主题演讲,由Google大中华区总裁陈俊廷作主题报告;17日,主题是“更卓越的开发体验”,包括Android、Google Play、Chrome OS的性能改进;18日,主题是“高效的前端开发”,包括Flutter、Web.dev、Material Design高效的跨平台渲染;19日,主题是“机器学习技术”,包括TensorFlow与Google女性原创 2020-11-23 00:54:59 · 12258 阅读 · 6 评论 -
android端使用openCV与深度学习实现车牌识别
车牌识别的应用场景随处可见:高速公路上超速抓拍、小区门口关卡、车库入口关卡,甚至出现在车载设备上。它的工作原理大致这样:使用摄像头充当“眼睛”,使用openCV与深度学习充当“大脑”。实时车牌识别工作步骤:摄像头抓拍—>openCV初步定位车牌位置—>二次确认车牌位置的左右上下边界—>车牌倾斜校正—>车牌字符切割—>车牌字符识别。其中,车牌检测是车牌识......原创 2018-01-11 01:30:54 · 49420 阅读 · 183 评论 -
五种方案实现视频镜像
视频镜像一般是指,以视频x轴中心点为对称轴,左右内容互相交换。实现视频镜像功能,可以从解码层、渲染层、显示层这三个层次入手。解码层需要对解码出来的每一帧进行镜像处理,以FFmpeg软解处理为例,比较耗时,也占用更多内存空间,从性能效率角度考虑不太可取。但是,可以同时添加滤镜、模糊效果、文字与动画贴纸等等。当然,渲染层使用openGL也可以实现这些功能,同时也可以做镜像。显示层如果使用TextureView,可以通过设置旋转实现镜像,用法最为简单。一、显示层视频播放一般使用SurfaceView、GL原创 2020-08-28 00:44:40 · 30743 阅读 · 11 评论 -
NDK编译脚本:Android.mk or CMakeLists.txt
Android NDK以前默认使用Android.mk与Application.mk进行构建,但是在Android Studio2.2之后推荐使用CMake进行编译。Cmake是跨平台编译工具,全称为cross platform make,内建c、c++、java自动相依性分析功能,关于Cmake更多详情请参考官网:https://cmake.org/documentation/。下面我们对比下Android.mk与CmakeLists.txt的语法。一、Android.mk语法以动态库编译hell原创 2020-05-31 23:10:00 · 33059 阅读 · 0 评论 -
三大 JS 框架的较量:Angular.js 与 React.js 与 Ember.js
通过选择合适的JavaScript框架来更好适配你的项目需求,这有利于提高你的开发能力与web apps的竞争力。然后,你可以为基于JavaScript的应用或者网站想个极佳的主意。选择合适框架应该对你项目的成功有显著效果。它可以推到你及时完成项目,并且有助于你将来维护代码。JavaScript框架,比如Angular.js,Ember.js,或者React.js,能提供很好的代码框架,并且保持代码的组织性,从而使得你的app更具灵活性与可扩展性,开发过程更加容易。翻译 2016-11-07 21:38:50 · 40418 阅读 · 0 评论 -
Android播放器拖动进度条的小图预览
播放器拖动预览,让用户提前了解视频的波澜迭起情节,先走马观花看一遍精彩部分,满足一下好奇心,这就是拖动预览的意义所在。那么我们该如何打造高性能、高效率、高可靠的拖动预览呢?首先,小图预览强调足够小,因为预览画面分辨率没必要高清,分辨率越小解码速度越快、占用内存与CPU资源越低;其次,硬解优先,绑定Surface,解码后直接渲染到Surface上;另外,不必要解码音频,视频帧也可以选择性解码,比如只...原创 2019-11-19 01:51:32 · 38350 阅读 · 0 评论 -
JNI开发规范——从细节开始
JNI是Java本地接口。它定义了Android从托管代码(以Java或kotlin编程语言编写)到本地代码(C/C++编写)交互编译成字节码的一种方式。JNI是厂商中立的,支持从动态共享库加载,虽然有时繁琐,但是合理高效。如果你还不够熟悉它,可以阅读Java Native Interface Specification来更好理解JNI是如何工作的,以及它有哪些可用接口。刚开始阅读时,可能部...原创 2018-08-18 21:01:08 · 39178 阅读 · 0 评论 -
Android 9的神经网络API
前几天Google发布了Android 9,给广大开发者带来许多新特性,最令人振奋的是Android Neural Network API。神经网络结合TensorFlow,让Android移动设备更加智能,拥抱人工智能时代!Android神经网络API,基于Android C开发,在移动设备运行密集型计算的机器学习。NNAPI为高级的机器学习框架的构建与训练神经网络(比如Tensor...原创 2018-08-16 01:06:40 · 32435 阅读 · 0 评论 -
带大家熟悉Android全新的Room数据库框架
最近Android推出全新的数据库框架Room,它与GreenDAO相似,基于ORM对象关系映射,属于轻量级且快速的数据库。对SQLite语句封装成了对象,也就意味着我们可以直接操作对象,是我们熟悉的对象。Room基于SQLite,提供一个抽象层,可以快速访问SQLite的所有功能。应用程序处理特殊的结构化数据,可以极大程度受益于本地数据的持久化。大多数使用场景是缓存关联的数据块。那样,尽管设...原创 2018-09-24 01:51:46 · 29737 阅读 · 0 评论 -
全面认识Android的WorkManager
WorkManager是一个管理work的库,保证在满足约束条件时执行。WorkManager允许观察work的状态,可以创建复杂的work链。所有work都必须保持与Worker通信,以执行计算。另外,work在后台线程运行。WorkManager支持两种类型的work:OneTimeWorkRequest和PeriodicWorkRequest。我们可以这样使用WorkManager请求入...原创 2018-09-24 22:01:01 · 36667 阅读 · 0 评论 -
Android三种方式截取任意界面屏幕
一、使用MediaProjectionManagerAndroid5.0之后,开放截取屏幕的API,也就是利用MediaProjectionManager创建VirtualDisplay,传入与ImageReader关联的Surface,这样就可以从ImageReader中获取到Image,然后把Image的像素数组拷贝到Bitmap,如果要保存为图片,就用得到的Bitmap压缩为JPEG格式...原创 2018-11-07 19:18:34 · 49678 阅读 · 10 评论 -
Android系统定制的导航侧边栏
Android手机的导航栏一般都放在底部,导航按键包括返回键、home键、最近任务键。而有些Android设备希望把导航栏放在左右两边,也就是改成侧边栏,这时候就需要二次定制开发。首先,把原生的底部导航栏屏蔽掉。然后,通过WindowManager添加悬浮的侧边栏,组合按键除了返回键、home键、最近任务键,还可以自定义添加其他按键。为了响应按键点击事件,我们需要重写自定义View的onTou...原创 2018-11-16 11:06:06 · 39350 阅读 · 0 评论 -
Android系统定制的完整升级流程
Android系统升级分为:全量升级和增量升级。全量升级一般是首次安装,需要打全量OTA升级包;而增量升级,可以打增量OTA升级包,也可以通过静默安装来实现升级。这里主要介绍增量升级的全流程:获取升级包—>验证升级包—>版本对比—>压缩包解压—>升级—>进度监听—>重启系统。一、获取升级包获取升级包一般有两种方式:从网络下载和SD卡读取。这里介绍的是从S...原创 2018-11-23 01:24:49 · 37317 阅读 · 0 评论 -
Android Jetpack的分页库
Android Jetpack最近推出分页库:Paging Library,它结合RecyclerView来加载大量数据与分页显示。这意味着我们不用再手动去分页请求,也不用担心加载大量数据导致而页面ANR。分页库可以帮助我们应用程序观察和每次加载合理的数据,这样带来的优势包括:数据请求占用更少带宽、更少系统资源;在数据更新或者刷新的同时,应用程序可以快速响应用户交互。分页库的关键组件是Page...原创 2019-01-01 01:45:57 · 37242 阅读 · 0 评论 -
Android Jetpack之ViewModel详解
ViewModel类设计用于,以存在生命周期的方式来存储和管理UI相关的数据。ViewModel允许数据保存于配置发生变化的情况,例如屏幕旋转。ViewModel优点在于:共享数据、保存临时数据、视图解耦、利于UI更新。Android框架管理UI控制器的生命周期,例如activities、fragments。框架可能会销毁或者重新创建UI控制器,为了响应用户动作事件,或者设备事件已经不受控制了...原创 2019-01-01 20:14:25 · 37260 阅读 · 0 评论 -
Android开发中Bitmap的全面总结
Bitmap称为位图,内部结构是像素矩阵排列。它由A、R、G、B通道组成,其中A代表Alpha,R代表Red,G代表Green。我们在开发中,通常把图片转为Bitmap来处理。一、Bitmap结构类型Bitmap按照内部结构,分为6种类型Config:ALPHA_8、RGB_565、ARGB_4444、ARGB_8888、RGBA_F16、HARDWARE。常用类型是RGB_565和ARG...原创 2019-03-20 17:31:41 · 43231 阅读 · 1 评论 -
Android Q的全新特性与隐私权限
在前几天的Google I/O 2019大会上,发布了Android Q版本(Android 10)。Android Q带来了许多新特性,也增强安全隐私保护,包括支持折叠屏、非SDK接口限制、共享内存、分区存储、系统二进制文件映射到只执行内存、WLAN直连广播、全屏Intent的权限变更、夜间主题模式等等。1、非SDK接口限制为了确保应用稳定性与兼容性,Android平台开始限制我们的应用...原创 2019-05-10 23:50:53 · 37474 阅读 · 1 评论 -
Android Q沙盒机制之分区存储
为了让用户更好地控制自己的文件,Android Q更改了应用访问设备外部存储空间中文件的方式。Android Q用更精细的媒体特定权限来替换READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,并且无需特定权限,应用即可访问自己在外部存储设备的文件。1、针对应用私有文件的隔离存储沙盒对于每个应用,Android Q 都会创建一个“隔离存储沙盒”,以限...原创 2019-05-11 12:56:48 · 43062 阅读 · 3 评论 -
Android Q之气泡弹窗
在Android Q中,用户可以借助气泡,轻松地在设备上任何位置进行多任务处理。气泡内置于“通知”系统中,它会浮动在其他应用的上层,并会跟随用户的移动而移动到屏幕的任何位置,用于取代SYSTEM_ALERT_WINDOW。气泡可以展开显示应用功能和信息,并在不使用时折叠起来。当设备处于已锁定状态或始终保持活动状态,气泡会像通知那样显示。气泡弹窗效果如下图:一、气泡配置信息气泡是一种可...原创 2019-05-11 23:51:54 · 39102 阅读 · 0 评论 -
Flutter之我们需要掌握的知识点
Flutter是一套高效的跨平台免费开源SDK,可支持在移动端的Android、iOS进行开发,也支持Web桌面端、嵌入式界面开发。现在已经更新到1.5版本,下面来介绍Flutter概念、Flutter能够做什么、Flutter使用什么语言开发、Flutter框架、Flutter构建原理、Flutter如何在Android与iOS运行等等。一、Flutter是什么Flutter是Googl...原创 2019-05-12 22:31:01 · 35721 阅读 · 0 评论 -
Android悬浮窗播放视频
大家应该很喜欢这样的场景:一边打游戏一边看视频,生活娱乐两不误。这样应该怎么去实现呢?Android有提供悬浮窗API,使用悬浮窗播放视频,可以悬浮在其他应用上。有人可能会说,悬浮窗是不是会遮挡界面,导致用户体验不够好。总是有办法解决的,我们可以设计一个灵活的悬浮窗,窗口可以随时调整大小、任意拖动位置,这样就完美了。让我们看看小窗口播放效果。首先,需要在Manifest.xml里申请权限:...原创 2019-08-02 01:03:18 · 38872 阅读 · 3 评论 -
语音消息以及未读提醒连续播放
微信引入语音聊天后,使得语音聊天非常火。最近做了一个关于语音聊天demo,现在介绍下整个实现过程:包括录音、保存音频文件至SD卡、发送录音文件、接收新语音消息红点提醒、播放暂停、未读语音消息连续播放、播放模式切换。原创 2016-11-10 14:11:33 · 37928 阅读 · 15 评论 -
Android端使用FFmpeg进行视频画面拼接
今天看到抖音上,有人发布水平拼接的短视频。这创意不错,本身是两个不同的短视频,通过视频拼接技术把两短视频拼在一起。除了视频进行水平拼接,音频也混合在一起。前期还需要对那两视频进行预处理:包括时长、分辨率、像素格式等。既然抖音可以做出这样效果,那我们也应该可以做。下面是抖音的视频拼接截图: 我第一时间想到的是FFmpeg,通过查阅FFmpeg文档,发现可以采用overl...原创 2018-06-18 22:52:47 · 44973 阅读 · 37 评论 -
Android端使用TensorFlow进行图像分类
最近一直在看TensorFlow的视频教程,它是Google的一个机器学习的跨平台开源框架,可以移植到Android、ios等移动端设备运行。GitHub上面有许多关于TensorFlow开发demo,这让极客开发者们心情躁动,跃跃欲试。今天主要与大家探讨下运用TensorFlow进行图片分类。 它实现的图片分类效果还是相当准确的,值得点赞,先上一张宠物猫的识别: ...原创 2018-06-30 02:07:51 · 41724 阅读 · 12 评论 -
Android端使用FFmpeg的AVFilter滤镜
现在各种直播平台如雨后春笋般出现,游戏、女主播等直播特受欢迎。开发人员往往会在推流端加上各种滤镜特效,不仅限于美颜美肤。本篇文章探讨使用FFmpeg的AVFilter实现滤镜,它可以实现多种花式特效。更多信息请查看FFmpeg官网文档:https://ffmpeg.org/ffmpeg-filters.html。 AVFilter基本使用流程是:初始化滤波器、传入待滤波的视频...原创 2018-06-07 00:26:44 · 43439 阅读 · 4 评论 -
Android N 多窗口的应用——画中画
Android N 预览版本支持画中画(Picture in Picture)模式进行视频的播放。画中画是多窗口模式的一种特殊类型,主要用于后台播放视频。Android TV设备早已经支持画中画模式。在多窗口模式中,用户仍然可以看到处于暂停状态的应用,而且应用在暂停状态下可能仍需要继续其他操作。例如,处于暂停模式但可见的视频播放应用应该继续显示视频。Android官方建议播放视频的Activity不要在onPause()暂停视频,应在onStop()暂停视频,在onStart()恢复播放。原创 2017-04-02 02:06:24 · 14045 阅读 · 2 评论 -
Android O 开发者预览版新特性
今天,2017年3月26日星期日,负责Android项目的副总裁Dave Burke先生向广大开发者宣布Android O正式发布。看来不仅仅是程序员周末没闲着,就连google副总裁也忙得不可开交,只能在周末推广Android新特性。我怀着好奇心进入Android开发者网站,发现新版本变化不小:后台限制、高质量的蓝牙音频编解码、自适应图标、键盘导航、运行时优化等。翻译 2017-03-27 00:21:46 · 35007 阅读 · 0 评论 -
google迈向IoT的开端——推出Android Things操作系统
上个月Google推出Android Things 嵌入式系统取代“Brillo”,这意味着Google看好IoT(物联网)发展,要与Apple的HomeKit抗衡。我本人是先学51单片机,然后是ARM的stm32嵌入式开发,再到Android客户端开发。因此,对于Android中的嵌入式开发比较感兴趣。其实,Android Things是Android的一个分支版本,类似于可穿戴手表,为开发者提供丰富的API接口,使用java语言开发。原创 2017-01-10 17:14:02 · 37519 阅读 · 0 评论 -
仿微信透明度渐变且带红点提醒的底部栏
微信主页面慢慢水平滑动时,会发现底部栏的图标以及文字有透明度渐变效果。其中,透明度的大小依赖ViewPager的Offset系数。从当前页面切换到下一个页面,当前页面的底部栏颜色会逐渐变淡,而下一个页面的底部栏颜色会逐渐变深。其实底部栏渐变效果已经有其他人写过博客以及发表过开源项目,但是觉得还是缺少点什么。打开微信看看,噢耶,是红点提醒和未读统计。既然有完善空间,那么说做就做。原创 2016-12-15 22:43:02 · 35439 阅读 · 3 评论 -
使用Robolectric做Android单元测试
首先谈谈,为什么要进行单元测试呢?理论上说,多了单元测试这一环节意味着要付出额外时间,如果开发周期不变,那么编写代码的时间必须相应缩短。这岂不是作为程序猿的我们自己给自己找麻烦,吃力不讨好吗?讲真的,我一开始也有这种想法,怀着半信半疑的态度来做单元测试。后来慢慢地发现,单元测试过程帮助自己找出考虑不周或者意料之外的bug,即时修复。这样一来,去到测试人员手中的app瞬间变得高大上,bug出现率有所降低,减少了二次测试验证所浪费的时间。那么,做单元测试的必要性还是存在的,它可以帮助我们快速定位bug,从而修复原创 2016-12-04 18:53:53 · 35808 阅读 · 0 评论 -
细数RxBinding的各种优雅响应式绑定
RxBinding出自Square公司的Jake Wharton大神之手,往往是结合RxJava一起使用。RxBinding的核心是RxView,它包含:attaches、detaches、clicks、drags、draws、focusChanges、globalLayouts、hovers、layoutChanges、longClicks、scrollChangeEvents、systemUiVisibilityChanges、touches、activated、clickable、enabled、pr原创 2016-12-02 14:46:35 · 38355 阅读 · 0 评论