Android
文章平均质量分 90
wusc'blog
假如生活欺骗了你,不要悲伤,不要心急,忧郁的日子里需要镇静
展开
-
Android OpenGL ES视频渲染(二)EGL+OpenGL
以YUV420P数据为例,介绍EGL+OpenGL渲染方式及使用方法原创 2020-03-07 17:47:31 · 1501 阅读 · 1 评论 -
Android OpenGL ES视频渲染(一)GLSurfaceView
本文将使用GLSurfaceView+MediaPlayer实现播放,并通过OpenGL进行简单的滤镜处理,以此来说明如何使用GLSurfaceView。原创 2020-03-04 22:20:28 · 3451 阅读 · 0 评论 -
Android 播放音频(PCM)的两种方法--AudioTrack/OpenSL ES使用简介
本文主要介绍Android上可以进行音频(PCM)播放的两个组件–AudioTrack/OpenSL ES的简单使用方法。对一个音频文件(如MP3文件),如何使用FFmpeg进行解码获取到PCM,之前的文章已经有相应的说明:https://blog.csdn.net/myvest/article/details/89254452。那么解码后或者mic采集的PCM数据,是如何播放的呢,首先一般...原创 2020-02-18 17:20:40 · 6938 阅读 · 1 评论 -
Android MediaPlayer中的RTSP(三):相关修改总结
背景:前面两章节简单介绍了RTSP协议,FFmpeg中RTSP的简单交互流程。之前提到过,实际应用中,对于不同项目,对FFmpeg需要进行完善,以适应各种特殊情况。之前列的情况如下: 1、SETUP阶段的协议选择:载流协议是UDP还是TCP,是否使用RTP承载,尝试一种载流协议不支持后的切换流程 2、重定向的完善:正常来说,一般在SETUP阶段后,就不会再有重定向了,因为这样需要重新...原创 2018-08-08 17:50:58 · 2285 阅读 · 1 评论 -
Android packageManagerService如何添加安装权限白名单
有些项目不允许所有APK都拥有安装权限,例如apk只能通过应用商城来安装或者升级,只允许某些特定的apk自升级,不允许pm install等。这就需要添加安装权限白名单来控制。1、packageManagerService修改安装肯定绕不开packageManagerService,我们在其中添加几个接口及代码来控制apk安装。1)增加以下函数: /*add for installer原创 2017-01-11 15:34:49 · 14189 阅读 · 17 评论 -
Android 中全局键的处理GlobalKeyManager
如何使用快捷键跳转到指定的页面中,在android中的GlobalKeyManager中可以进行相关处理。frameworks\base\core\res\res\xml\Global_keys.xml指定了按键和对应的ComponentName 如下 <global_keys version="1"> <!-- Example format: keyCode = keycode to h原创 2017-10-09 11:21:02 · 2591 阅读 · 0 评论 -
Android wpa_cli 调试方法
背景:今天想玩一玩wpa_cli,以了解wpa_supplicant的一些流程,结果却一直连接不上。。。记录一下如何使用wpa_cli来进行wifi调试。1、启动WLAN(1)加载驱动 一般来说,android系统里面,打开wifi的时候会加载驱动,关闭则会卸载wifi驱动。手动调试的时候,先调用insmod命令加载指定的wifi驱动。 再调用iwconfig可以看到驱动是否加载成功,如下,可以原创 2017-07-21 16:56:56 · 5783 阅读 · 0 评论 -
Android wifi-framework StateMachine和AsyncChannel 学习
android中,wifi的核心是WPAS(wpa_supplicant),它管理和控制Android平台中的Wi-Fi功能。在整个wifi模块中,其更像是一个一个服务端,实现了连接,认证等工作流程。 而客户端有wpa_cli,和wpa_supplicant之间的通信依靠wpa ctrl接口来实现,而在wifi的framework层,其实主要工作就是向下实现wpa_cli的功能和wpa_suppl原创 2017-07-20 14:25:50 · 815 阅读 · 0 评论 -
Android wifi-framework WifiMonitor和WifiNative学习
WifiStateMachine作为wifi-framework层最核心的类,其他很多wifi的类都是为其服务的,接下来记录下对WifiNative和WifiMonitor这两个类的学习。 两者都是WifiStateMachine在构造函数中创建的,是WifiStateMachine中重要的成员。1、WifiNativeWifiNative是一个接口类,主要是提供一些native方法用于wifi-原创 2017-07-20 19:38:15 · 2061 阅读 · 0 评论 -
Android adbd配置
android中,在/目录下,通常会有一个属性文件default.prop,不同于system/build.prop,这个文件修改后重启就会恢复原本的值,因为他是在boot.img中的。 在源码中,他并不是一个已经存在的文件,而是在编译脚本中来生成的。 通常,他里面的这些属性,是控制着一些安全性的,例如可不可以用adb来进行调试。## ADDITIONAL_DEFAULT_PROPERTIES原创 2016-05-03 16:10:21 · 8106 阅读 · 0 评论 -
Android 获取调用接口的包名
在framework层,有时候,需要获取调用接口的包名,来针对apk做一些不同的处理逻辑。今天遇到通过PID来获取包名,结果不对,写这段代码的同事说这个他测试是正常的。 让我们来看下这段代码 private String getCallerProcessName() { if (null == mContext) { return "";原创 2017-06-27 18:54:34 · 6696 阅读 · 3 评论 -
Android Runtime.exec()文件名带空格不生效
今天遇到一个问题,在想使用Runtime.exec()创建软连接,但是没生效,一开始以为是权限问题,但是发现有的文件可以创建成功,后来才知道是因为文件名带空格不生效。 不止是ln命令,cp这些命令也都一样。使用以下方法解决:String [] commands = { "sh", "-c", " " };commands[2] = "带空格的命令";Runtime.getRuntime().e原创 2017-06-02 11:04:16 · 1606 阅读 · 0 评论 -
Android 故障 开机无法启动
背景:上周遇到一些无法开机的机器,都是卡在开机动画,很是头疼,基本上可以定位到是data分区里的文件出了问题,但是很难进一步分析,只有一点点去看这些文件,做下总结。分析:具体可以分成两种情况:1、其中一种是报无法找到android这个包名无法找到: android.content.pm.PackageManager$NameNotFoundException: android01-02 01:34原创 2017-05-16 13:51:04 · 1911 阅读 · 2 评论 -
Android NTP V4鉴权修改
1、NTP同步时间原理NTP协议是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致。系统时钟同步的工作过程如下:Device A发送一个NTP报文给Device B,该报文带有它离开Device A时的时间戳,该时间戳为10:00:00am(T1)。当此NTP报文到达Device B时,Device B加上自己的时间戳,该时间戳为11:00:01am(T2)。当此NTP报文离开原创 2017-02-18 17:42:19 · 1948 阅读 · 1 评论 -
Android sdk上移植FFmpeg
背景: 最近想把FFmpeg移植到Android SDK上,以便在设备上调试或者自己写写小代码,基于的版本是Android 4.4。1、下载FFmpeg源码这一步没什么好说的,贴上官网路径http://ffmpeg.org/download.html,从这里可以下载到最新的FFmpeg。2、在Android平台上编译将其移到Android源码目录下。FFmpeg的编译分3步骤: ...原创 2018-04-24 11:50:58 · 601 阅读 · 0 评论 -
Android MediaPlayer中的RTSP(一):RTSP简介
背景:最近的项目中,遇到了使用Android的mediaplyer来进行RTSP播放的场景。对于RTSP这种流媒体协议,Android原生的播放器支持的其实并不是很好,所以有许多需要修改的地方,在此做一下记录,并作为一个了解RTSP协议的契机。 这次主要是简单介绍RTSP协议及其在mediaplyer中的层级,后面会记录下项目中遇到的情况及修改。RTSP播放器架构这里介绍下media...原创 2018-06-10 17:25:52 · 17881 阅读 · 4 评论 -
Android 4.4 安装INSTALL_FAILED_SHARED_USER_INCOMPATIBLE后原APK无法使用问题分析
背景:记录最近在项目中遇到的一个问题,先说现象:/system/app/下原本有一个可以正常使用的APK,APK本想下发自升级,APK存在问题无法安装成功,但奇怪的是,原本/system/app/下正常的APK也无法使用了。从pm命令及ps命令都看到/system/app/下的APK没有运行。调试:1、把问题APK拿到后测试,pm installI -r xxx.apk 手动安装,返回...原创 2019-09-26 10:41:21 · 9137 阅读 · 1 评论 -
Android MediaExtractor + MediaCodec构建简单播放器
介绍Android系统中提供的两个播放器模块MediaExtractor 和MediaCodec的简单使用,利用他们来完成一个简易的播放器。其中MediaExtractor完成解复用工作,而MediaCodec则音视频解码工作。原创 2019-09-14 22:09:31 · 3847 阅读 · 1 评论 -
Android native层使用SoftwareRenderer及AudioTrack播放
介绍SoftwareRenderer显示YUV;audioTrack播放PCM流程原创 2019-08-04 19:35:17 · 1989 阅读 · 3 评论 -
Android live555组播拉流客户端
组播拉流客户端,支持RTP及UDP裸流,介绍了live555在Android上的移植及简单实用方法。原创 2019-07-20 21:30:02 · 2170 阅读 · 0 评论 -
Android framework 增加DNS检测功能
背景:在Android framework中增加DNS检测功能,在网络连接后,检测DNS是否有效,并将有效的DNS尽量置前。原创 2019-07-06 15:14:34 · 1776 阅读 · 0 评论 -
Android framework 蓝牙开机连接慢与开机广播
问题:项目需要使用蓝牙外接设备,但每次重启开机到launcher显示后,蓝牙设备均需要等待20秒以上才能操作,体验非常差。分析:蓝牙的回连是由framework层实现。BluetoothManagerService相关代码如下,可以看到,自动打开蓝牙的流程是接收开机广播实现的。 private final BroadcastReceiver mReceiver = new Broad...原创 2019-07-02 16:42:01 · 960 阅读 · 0 评论 -
Android 开发常用方法及命令
1、开发时常用调试命令addr2linegdb配合core dump调试打印堆栈2、系统层面的调试命令dumpsysbugreportcat命令看节点信息top和free查看cpu和内存情况3、APK常用调试命令am命令dumpsys 命令pm命令其他常用命令1、开发时常用调试命令addr2line使用方法:addr2line -e xxx address 可以addr2line --he...原创 2019-06-11 09:39:47 · 1115 阅读 · 0 评论 -
Android FFmpeg YUV转RGB及使用SurfaceView+ANativeWindow显示
1、FFmpeg像素格式转换FFmpeg像素转换一般使用libswscale来进行接口说明1、 获取上下文SwsContext一般我们使用下面两个函数来获取,sws_getCachedContext和sws_getContext略有不同的是,如果输入和输出的宽/高/格式不变,则会返回之前创建的context。参数说明:前三个参数分变为原始宽、高、格式(如RGBA8888,YUV420等...原创 2019-05-31 20:19:02 · 2287 阅读 · 0 评论 -
Android MediaPlayer中的RTSP(二):FFmpeg中RTSP代码流程分析
背景:RTSP在不同FFmpeg版本中可能略有不同,该文档主要介绍FFmpeg RTSP主要的相关代码流程,而涉及FFmpeg的一些结构并不会详细说明,这部分的内容,有兴趣可以可以参考雷霄骅大神的博客https://my.csdn.net/leixiaohua1020。关键结构ff_rtsp_demuxer :AVInputFormat该结构被称为解复用模块,是音视频文件的一个解封...原创 2018-07-06 17:42:15 · 5229 阅读 · 3 评论 -
Android looper和handler
1、LooperLooper用于封装了android线程中的消息循环,并且拥有一个消息队列。 (1)、Looper.prepare()来给线程创建一个消息循环 (2)、Looper.loop()来使消息循环起作用,从消息队列里取消息,处理消息。注意:消息循环完毕后,Looper.loop()内部会结束整个子线程的执行, 所以Looper.loop()之后的语句是不会运行的。注:写在Looper.原创 2016-04-27 15:40:23 · 497 阅读 · 0 评论 -
Android 恢复出厂备份wifi状态
背景:之前遇到有项目需要在恢复出厂设置之后,wifi能保持之前的状态,用户不需要重新输入密码,就可以连接上以前的热点。对于recovery来说,有两种1、只清除data分区;2、清除data分区和cache分区。wifi状态,密码都是保存在data分区的,所以回复出厂后便会被清除掉。要实现这个功能,修改及思路也比较简单,如下: 备份wifi状态->回复出厂->还原wifi状态1、原创 2017-03-21 09:56:59 · 1668 阅读 · 3 评论 -
Android 实现live555 RTSP代理播放器
利用live555 实现RTSP拉流客户端,但想看下播放效果,所以结合Android MediaPlayer实现播放。live555 实现RTSP交互及拉流过程,然后UDP,将数据传递给MediaPlayer播放。也就是相当于live555作为RTSP播放器的代理端。原创 2019-08-11 13:40:06 · 6056 阅读 · 0 评论 -
Android 属性文件build.prop,获取属性以及设置属性
简要分析一下build.prop是如何生成的。Android的build.prop文件是在Android编译时收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product//system/目录下。在Android运行时可以通过property_get()[c/c++域] / SystemProperties_get*(原创 2016-04-29 17:17:12 · 6448 阅读 · 0 评论 -
Android MediaPlayer简介
1、概述Android系统中的MediaPlayer包含了Audio和video的播放功能,我们在应用程序APK中,只要调用MediaPlayer这个类,既可以完成媒体播层放。Android中的MediaPlayer主要包括应用层、Framework层以及HAL层等部分组成。因为我的理解有限,所以下面简单写下我的理解。MediaPlayer整体框架如图所示。2、mediaServe...原创 2016-01-25 22:24:01 · 1550 阅读 · 2 评论 -
Android开机动画bootanimation
android开机动画详细分析可以参见http://blog.csdn.net/luoshengyang/article/details/7691321 引用老罗的文章,写的太好了。以下介绍一些相关的点。 这里的开机动画指的是以bootanimation.zip方式存在,不包括BootVideo这种方式。1、开机动画路径: bootanimation.zip路径有两个: a、”/data/lo原创 2016-03-11 15:11:37 · 39675 阅读 · 6 评论 -
Android待机及延时网路关闭的修改
需求:Android待机的时候,网络延时关闭,即屏幕可以自己黑屏,但是WiFi/eth/ppoe要延时关闭。以下先记录几个点:1、ACTION_SCREEN_OFF这个anction标示待机,我都是跟这个action的2、ppoe和eth的关闭可以使用wakelock来让系统无法待机,等待延时做完工作后,在释放wakelock。wakelock在系统还持有一个wakelock时,系原创 2016-03-15 21:09:53 · 5586 阅读 · 0 评论 -
Android.mk基本语法
我刚开始接触Android系统时,接触了Android的编译命令及Android.mk,因为以前没用过,觉得比较陌生。不过有对Makefile的基本了解的话,还是很好理解的。1、Android编译命令- m: Makes from the top of the tree.- mm: Builds all of the modules in the current d...原创 2016-01-06 21:53:10 · 1168 阅读 · 0 评论 -
recovery的一些开发点滴
之前讲过Android中recovery的基本知识。 在工作中,需要做的经常是对标准recovery做一些定制化,所以这篇文章,记录下这段时间的一些心得:1、增量升级: 在源码根目录下自行make otapackage 会生成升级包,两次编译后包用下面工具: ./build/tools/releasetools/ota_from_target_files -n -i <旧包> <新包> <差分原创 2016-01-05 21:51:44 · 2827 阅读 · 0 评论 -
android recovery
Android recovery原创 2016-01-03 18:00:16 · 1959 阅读 · 0 评论 -
Android 启动流程简介
Android 启动流程简介原创 2016-01-03 16:03:16 · 839 阅读 · 1 评论 -
Android 添加ssh的方法
1、安装条件首先需要root2、使用的工具android源码external下,本身就有两个sshd服务端,dropbear和openssh。dropbear是一个轻量级的ssh,所以我们使用这个(其实另外一个原因是因为openssh一直没配成功,不知道账户密码在android下要怎么设置) 源码中,dropbear默认是没有编译出ssh相关的程序,只编译出库,所以需要修改一下Android.mk原创 2016-11-30 14:42:31 · 14699 阅读 · 1 评论 -
android reboot 流程
写这个的原因是在一个新的方案中,发现reboot recovery无法进入recovery模式。按照以往的理解,我一直以为android到recovery流程是因为在misc分区中写入了boot-recovery字段,但是翻来翻去,也没找到是在哪里写入,所以跟了一下reboot流程,发现好像不是我原来想的那么一回事 。以重启进入recovery来说。1、framework1)RecoverySyst原创 2017-01-10 11:15:35 · 1667 阅读 · 0 评论 -
记录最近面试时遇到的一个问题:Android root的原理
最近去笔试,有一道题目,大概是让我说明Android系统中,像手机这些获取root权限的原理。 我当时的想法是: root的过程其实就是把su文件放到/system/bin/或者是/system/xbin/下 ,然后修改其权限为4755,最后,在需要root权限的时候,然一个apk去用exec来调su就可以了。说是这么简单,但是: 1、/system/目录普通用户应该是没写权限的才对啊 2、原创 2016-02-29 17:26:32 · 910 阅读 · 2 评论 -
Android 应用签名的问题
之前在http://blog.csdn.net/myvest/article/details/53486701一文中, 简介了android 增加自己的应用签名校验的方法,最近遇到一个问题,就是如何给APK多重签名。1、重新签名重新签名是很简单的,如果你的APK本身就有签名,那可以把APK先用rar工具打开,把下面的META-INF文件夹里的东西删掉,再用命令重新签名一次即可。 这种我是没遇到什么原创 2016-12-19 10:42:09 · 937 阅读 · 0 评论