Android
文章平均质量分 74
微岩
这个作者很懒,什么都没留下…
展开
-
Android 图形系统结构 中/英 (Android Graphic Architecture)
Graphic Architecture本篇文章是基于谷歌有关Graphic的一篇概览文章的翻译:http://source.android.com/devices/graphics/architecture.html大量文字以及术语的理解基于自身的理解,可能并不准确。文中有部分英文原文我也不能准确理解,对于这种语句,我在翻译的语句后加了(?)符号。This documen转载 2015-06-11 14:48:32 · 4026 阅读 · 0 评论 -
Android Native/Tombstone Crash Log 详细分析
Android 虽然已经有好几年了,但是NDK的开放速度却非常缓慢,所以目前网络上针对对Android NativeCrash的分析说明还比较少,尤其是非常详细的分析方式更难以查询。因此大部分程序员在遇到难以进行addr2line的crashlog时,会一筹莫展。事实上这份log中的其他部分同样提供了非常丰富的信息可供解读,所以在这里总结一下对在这方面的一些经验,在这里以Androidsample转载 2015-09-16 18:23:16 · 3166 阅读 · 0 评论 -
Android 5.0(Lollipop)中的SurfaceTexture,TextureView, SurfaceView和GLSurfaceView
SurfaceView, GLSurfaceView, SurfaceTexture以及TextureView是Android当中名字比较绕,关系又比较密切的几个类。本文基于Android 5.0(Lollipop)的代码理一下它们的基本原理,联系与区别。SurfaceView从Android 1.0(API level 1)时就有 。它继承自类View,因此它本质上是一个View。但转载 2015-11-11 17:39:06 · 1924 阅读 · 1 评论 -
Android C/JAVA 输出CallStack
打印堆栈是调试的常用方法,一般在系统异常时,我们可以将异常情况下的堆栈打印出来,这样十分方便错误查找。实际上还有另外一个非常有用的功能:分析代码的行为。android代码太过庞大复杂了,完全的静态分析经常是无从下手,因此通过打印堆栈的动态分析也十分必要。Android打印堆栈的方法,简单归类一下 1. zygote的堆栈dump实际上这个可以同时dump java线程及nati转载 2015-11-12 09:37:15 · 4733 阅读 · 0 评论 -
Android线程操作类(暂停、重新开启、停止)
场景:在程序中如果需要在后台长时间做一件事情,比如联网获取数据等操作,就要用到线程。但为了提高用户体验,有以下几点需要注意:1、程序可见时线程开始运行;2、程序不可见时线程暂停;3、程序退出时停止线程;以下根据我自己的程序提出一个公用的代码,大家可以把自己的业务逻辑套进去: public class NetUtil2 extends Thread {转载 2015-11-13 15:39:59 · 1949 阅读 · 0 评论 -
Android MediaScannerService源码分析
1. 简介MediaScannerService简称MSS, 是一个运行于后台的Service, 实现了Runnable接口. MediaScannerReceiver接收广播, 然后由MSS具体完成工作. MSS中主要工作在ServiceHandler实现2. 初始化2.1 onCreate()完成2项工作 (1)启动线程 // Start up the thread runni原创 2015-07-03 15:26:56 · 3263 阅读 · 0 评论 -
Android MediaScanner使用简介
1. 执行扫描只有系统开机的时候才会执行MediaScanner,其它情景下需要手动执行扫描(拍摄,下载等)。手动执行扫描的方法是发送MediaScanner广播:1.1 扫描指定文件:Intent.ACTION_MEDIA_SCANNER_SCAN_FILE1.2 扫描指定目录:“android.intent.action.MEDIA_SCANNER_SCAN原创 2015-03-12 16:21:16 · 2680 阅读 · 0 评论 -
OpenGL ES 2.0 Shader总结
自从Android 2.2启用了OpenGL ES 2.0之后,Android上图形开发就进入了GLSL(OpenGL Shader Language)时代;现今Vulkan以无可阻挡的大势将取代OpenGL,本人从PC上OpenGL开发到Android OpenGL ES Shader,和OpenGL已经打了数年交到(虽说中间断断续续,还不务正业搞多媒体),在OpenGL落幕之际,写篇OpenGL原创 2016-03-15 15:54:55 · 5194 阅读 · 0 评论 -
SynchronousQueue学习笔记
1. SynchronousQueue简介SynchronousQueue是无界的,是一种无缓冲的阻塞队列,插入操作必须等待令一个线程取数据,反之亦然(SynchronousQueue是线程安全的,是阻塞的)。同步队列没有任何内部容量,甚至连一个队列的容量都没有。PS:什么是线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果。声明一个SynchronousQueue有两种不同的方式原创 2016-10-21 18:51:30 · 949 阅读 · 0 评论 -
android ffmpeg neno优化
1. 前言最近搞的视频监控项目,需要在android移动端做视频显示。用的是android ndk的开发方式, 利用ffmpeg作为解码库。640*480 分辨率下, 10帧每秒尚可正常播放, 但是15fps就比较吃力了,20fps就几乎不能看了。通过打日志的方式发现: 每显示一帧需要133毫秒,解码的时间占据了64毫秒,很显然, 解码已经成为了最大的瓶颈。 我们在网上搜了一圈之后,发现用转载 2016-11-14 14:37:08 · 1349 阅读 · 0 评论 -
Android MediaScannerJNI源码详解
1.简介MediaScannerJNI的在MediaScanner中的地位可参考 Android MediaScanner 总纲 MediaScanner JNI文件名: android_media_MediaScanner.cpp 位置: frameworks\base\media\jni\android_media_MediaScanner.cpp android原创 2015-07-17 20:05:04 · 1776 阅读 · 0 评论 -
Android MediaScanner 总纲
1. MediaScanner HEAD2. 应用层 MediaProviderpackages\providers\MediaProvider (1) MediaProvider packages\providers\MediaProvider\MediaProvider.java MediaProvider继承于ContentProvider,主要用于创建媒体库的数据库表. 详细内容请查原创 2015-07-02 19:11:16 · 1666 阅读 · 0 评论 -
Android 的OpenGL ES与EGL
1 名词解释 OpenGL ES (OpenGL for Embedded Systems,以下简称OpenGL) OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。该API由Khronos集团定义推广,Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。 EGL EGL™ 是介于诸如OpenGL 或OpenVG的Khro转载 2015-07-08 15:32:49 · 2343 阅读 · 0 评论 -
Android StageFright漏洞攻击
1. 简介网络安全机构Zimperium最近发现一个Android有史以来最为严重的漏洞,该漏洞预计会影响95%的Android设备,攻击者可利用该漏洞远程操控手机的麦克风、窃取文件、查看邮件并获取个人证书等。Android 2.2到5.1的所有版本上均存在此漏洞。2. 漏洞说明该漏洞是由于Android StageFright缓冲以溢出造成。 示例如下:(Nexus 5, Android 5.1原创 2015-07-30 13:59:32 · 3743 阅读 · 0 评论 -
Android StageFrightMediaScanner源代码解析
本文从Android源代码分析MediaScanner扫描文件的最终节点StageFrightMediaScanner。StageFrightMediaScanner中函数比较少,真正处理媒体文件的processFileInternal函数,在此函数中通过调用MediaMetadataRetriever类处理媒体文件,然后把获取到的信息向上传递,最后写入数据库。原创 2015-07-20 14:48:32 · 1826 阅读 · 0 评论 -
Android MediaScanner总结
1. 简介自此Android MediaScanner的源代码分析已经全部写完,前后断断续续写了大半个月的时间,至今刚刚完成。现在对MediaScanner做一下总结。(其实也没啥好总结的,MediaScanner整体架构还是参考Android MediaScanner 总纲 )2. 纲领性文章Android MediaScanner 总纲 此文对MediaScanner架构做了详细描述,包括M原创 2015-07-20 15:18:00 · 1486 阅读 · 0 评论 -
Android MediaExtractor Construction & Destruction
通过源代码分析MediaExtractor的初始化和销毁过程。1. native_init2. native_setup3. native_finalize原创 2015-09-01 15:59:02 · 201 阅读 · 0 评论 -
Android MediaExtractor setDataSource
setDataSource时序图 1. MediaExtractor(java)file: frameworks/base/media/java/android/mediaf/MediaExtractor.java 目前Android 5.0仅支持本地视频 public final void setDataSource(FileDescriptor fd) throws IOExceptio原创 2015-09-01 20:04:04 · 6891 阅读 · 1 评论 -
Android MediaExtractor 浅析
1. JAVA层file: frameworks/base/media/java/android/media/MediaExtractor.java class: MediaExtractorMediaExtractor上层接口。 其中有3个调用JNI的接口: private static native final void native_init(); private nativ原创 2015-09-07 17:27:01 · 6357 阅读 · 0 评论 -
Android MediaScanner源代码解析
1. 简介MediaScanner向上和MediaProvider.MediaScannerService交互, 响应其请求; 向下和JNI交互. MediaScanner主要工作内容: (1)接收MediaScannerService的scanDirectories和scanSingleFile请求 (2)获取各个ContentProvider 环境(Audio,Video,Image,原创 2015-07-14 20:25:34 · 1783 阅读 · 0 评论 -
Android MediaScanner.cpp 源代码解析
1. 简介实现对文件夹的递归扫描 libmedia – libmedia.so frameworks\av\media\libmedia\MediaScanner.cpp 2. 对文件的扫描由JNI调用processDirectory,然后由doProcessDirectory和doProcessDirectoryEntry实现对文件夹的递归扫描。2.1 doProcessDirectory原创 2015-07-17 20:25:00 · 1900 阅读 · 0 评论 -
Android OpenAL编译
1. OpenALOpenAL是一个开源的音频后处理工具包,可以添加各种音效,修改声源空间位置等等。在前面的文章【OpenAL简介】中也有介绍。 IOS上已经集成了OpenAL,android平台暂未集成。但是OpenAL全部用C实现,而且不大,集成起来比较方便。 PS:android平台也有专门的音频后处理模块,但是使用起来感觉不是很好,貌似还不太稳定。2. 下载源代码https://gith原创 2016-11-24 14:20:24 · 5160 阅读 · 1 评论 -
Android Handler内存泄漏
Handler是Android常用的工具,但是使用不当容易引起内存泄漏。泄漏的原因是:当Handler声明为非静态(匿名)内部类,外部引用Activity时,会组织GC回收Activity。原创 2017-01-18 14:58:19 · 552 阅读 · 0 评论 -
Android实现视频硬编码
0. 前言Android视频录制一直是个大问题,之前做一款短视频应用,视频录制采用ffmpeg,虽然做了很多优化,但是画面质量和帧率难以达到要求,至少达不到IOS的水准。所以痛下决心研究Android平台的硬编码方案。硬编码所谓的硬编码就是采用DSP对视频帧进行编码,相对于软编码来说,硬编码的编码效率天差地别。更高的编码效率就意味着在相同帧率下能够获得更高的分辨率,更佳的画面质量。1. Androi原创 2017-02-27 20:19:29 · 12794 阅读 · 1 评论 -
Android OpenGL ES 2.0 与3.0兼容方案
1. 检查系统是否支持GLES3.0检查系统支持的OpenGL版本的方法有一下几种方法:查看EGL版本, 1.4以上EGL 查询Client版本号GL_VERSIONGL_SHADING_LANGUAGE_VERSION1.1 EGL版本检查此方法适用于创建EGLContext阶段。 要支持GLES3.0 要求EGL版本在1.4以上。 EGL初始化的时候会返回EG...原创 2018-06-14 18:06:06 · 8230 阅读 · 2 评论 -
Android MediaCodec参数笔记
1. Supported media formatsSupported Codecs从上表上看编码方面:H264仅支持到Main Profile,H265暂时不支持。 但是平台商的部分高端芯片已经支持H264 HP,H265编码。2. MediaCodecInfo提供MediaCodec在设备上的支持信息。 获取MediaCodecInfo: private...原创 2018-07-05 16:59:46 · 9950 阅读 · 0 评论 -
Android MediaCodec H264编码设置Main Profile & High Profile
1. 为什么要用Main Profile & High Profile在Android上硬编码视频码率远远高于软编码,原因是Android只支持H264 Baseline。MP(Main Profile )& HP(High Profile)可以大幅减少视频的码率。关于H264 Profile参见:H264 Profile。2. Android平台对MP & HP的...原创 2018-09-16 16:30:01 · 12770 阅读 · 0 评论 -
B帧对视频清晰度/码率的影响
0. 前言在H264 Extended Profile中就引入了B帧编码,一直以来同行都对B帧的意义存在争议:正方:B帧能够大幅减少视频码率,并提高运动场景下的清晰度;反方:B帧对码率和清晰度没多大帮助笔者针对这个争议找了一个视频,用x264和Android MediaCodec测试验证B帧到底有没有优化效果。1. 什么是B帧1.1 什么是B帧?B帧法(B fra...原创 2018-09-16 18:18:51 · 16382 阅读 · 10 评论 -
Android Camera API使用指南
虽然前文说道Android在5.0之后就推出了Camera2 API,但是各个厂家的基本未适配,导致目前市场上大部分机型使用的仍然是Camera1 API。PS:Android 9.0 Google强制要求各个平台厂商(高通/MTK/华为等)支持Camera2,不再兼容Camera1。本文简单介绍了Camera是如何使用的。原创 2018-09-27 18:03:54 · 2520 阅读 · 0 评论 -
Android Camera高级特性——手动对焦
对焦可以说是Camera最重要的基本的功能,也是最常用的基本功能。本文介绍Android Camera的几种对焦方式,并介绍手动对焦如何实现的。原创 2018-09-27 18:16:21 · 7177 阅读 · 2 评论 -
Android Camera 高级特性——闪光灯、抗闪烁、场景
Camera除了对焦和测光之外还有还有很多其它特性,如闪光灯、抗闪烁、场景等,这些功能的设置比较简单,只需要在Camera.Parameters中配置一下就可以了,本文就简单介绍下各个Feature中的定义。原创 2018-09-28 21:11:52 · 6062 阅读 · 1 评论 -
解决Android Studio卡顿问题
文章目录1. 修改默认分配内存1.1 配置文件位置:1.2 修改配置默认配置如下:此内存分配过于保守,修改如下:1.3 各字段具体含义为:2. 编辑build.gradle卡顿2.1 原因2.2 解决方案3.参考文献1. 修改默认分配内存1.1 配置文件位置:MAC:/Applications/Android Studio.app/Contents/bin/studio.vmoption...原创 2018-12-23 11:23:55 · 3738 阅读 · 1 评论 -
Android NDK 编译优化:浮点数计算优化
1. 浮点数计算优化1.1 float-ab-mfloat-abi=hard在编译带有浮点参数的函数时,有三种可能的编译选项:-mfloat-abi=soft/softfp/hard。“soft”选项:表明不使用FPU硬件,而是使用GCC的整数算术运算来模拟浮点运算。“softfp”选项:表明要使用FPU硬件来做浮点运算,只是,函数的参数传递到整数寄存器(r0-r3)中,然...原创 2018-06-14 18:01:19 · 2781 阅读 · 2 评论 -
Android Camera2 拉伸问题
1. 前言Camera2在一些低端机器上出现拉伸问题,当然首先排除不是笔者低级错误设置的分辨率有问题。2. 拉伸问题详细描述Camera2在某些机型上画面拉伸,表象是我们设置16:9的输出(当然是查询到支持的分辨率),但是Camera实际输出的是4:3。 整个过程如下:获取Camera支持的输出分辨率 StreamConfigurationMap st...原创 2018-06-14 16:01:36 · 7576 阅读 · 0 评论 -
Android 编译FFmpeg x264
1. Android FFmpeg开发基本流程(1)X264/FFmpeg + NDK编译 (2)ffmpeg.so + 编解码C代码 (3)Android.mk 编译 (4)JNI (5)JAVA代码调用基本流程如下图所示: 本文涉及FFmpeg,x264编译。2. NDK配置首先需要配置NDK开发环境,略 (1)设置$NDK环境变量# Detect NDKif [[ -z "$N原创 2017-02-22 17:56:58 · 2928 阅读 · 0 评论 -
Android Java调用ffmpeg命令
0. 前言ffmpeg命令很强大,但是在Android工程中无法执行可执行文件ffmpeg,即无法使用ffmpeg。 本文介绍把ffmpeg改造成库文件,然后通过JNI调用它,即可实现在Java中使用ffmpeg命令。PS: 本工程依赖于前文Android 编译FFmpeg x264。1. ffmpeg1.1 main to run(1)ffmpeg.h 进入ffmpeg源代码,修改ffmpe原创 2017-02-23 17:45:19 · 4645 阅读 · 0 评论 -
FFmpeg日志输出到adb logcat
0. 前言在Android中编写的FFmpeg程序,没有经过设置的话是无法在adb logcat中看到ffmpeg的日志,对于NDK程序而言其本身就缺乏适当的调试方法(AndroidStudio可以支持调试,但是很麻烦),如果再不能查看日志,那就算是废了。 本文在此提供一种把ffmpeg日志输出到adb logcat的方法。1. av_log_set_callbackffmpeg中av_log_s原创 2017-02-25 14:48:08 · 3718 阅读 · 0 评论 -
Google你能把Android的多媒体搞得再烂一些吗
搞了几年Android多媒体了,最感受就是Android的多媒体真的非常烂! @Google,你做的再烂一点吗?最近在搞Android视频编码,真是快被折腾疯了,最早用FFmpeg x264编码,虽然做了很多优化,但是效率还是一个问题;最后采用硬编码去搞,在解决了一系列的问题后算是跑通了,但是最后发现画面质量low的让我怀疑是不是我眼瞎!!! 同样的比特率,在Android编出来的和IOS没法比原创 2017-03-09 13:54:03 · 827 阅读 · 1 评论 -
Android gnustl_static VS gnustl_share
0. 前言使用gnustl_static,尽量避免使用gnustl_share。此外gnustl将逐步废弃!1. gnustl1.1 简介gnustl: Android上的GNU C++库,对应GNU/Linux系统中的libstdc++。这个库和GCC仅仅绑定,但是后期不再更新,最新NDK不再支持此库和Clang存在部分冲突 Note: 新版NDK将会删原创 2018-01-31 15:32:46 · 8882 阅读 · 2 评论 -
Android Camera开发指南
0. 前言蓦然回首,笔者从事Android多媒体开发工作已经好多年了,这一年来工作特别忙碌(当然产品上也获得了巨大的成就)文章写的很少了。最近会写一系列的文章,总结下自己在Android多媒体,图像图像,Camera等方面的积累。 因为之前关于Camera方面的文章略少,并且最近也在做Camera2相关的工作,所以笔者将首先从Camera开始完成一个Camera系列的专题。1. 主要...原创 2018-06-05 19:55:53 · 574 阅读 · 0 评论