- 博客(90)
- 资源 (1)
- 收藏
- 关注
原创 在Android5.0上Audio Patch和Patch Panel的一些分析
Android5.0上Audio Patch和Patch Panel的一些分析
2015-08-14 14:59:34
13813
9
原创 在Android中使用native程序(非Java)来广播intent
首先在看之前必须确定你已经部分了解广播intent的原理(从Java层到native层)。如果一窍不通的话,请先百度看完。进入正题,广播intent从Java层最终会调用binder机制来触发native层的发送,即发送消息BROADCAST_INTENT_TRANSACTION,而这个消息是通过IActivityManager接口处理的,所以我们在程序中必须先获得这个接口,即如下:
2014-02-07 14:02:50
5226
原创 Android SoundPool 的使用以及原理分析
好吧,我们今天来聊聊SoundPool这东西。据说这个东西是冰激凌(Android4.0)里才引入的一个新东西。按照官方的意思大多数情况下是给游戏开发用的,比如一个游戏10关,它能在游戏开始前一次加载所有10关的背景音乐,这其中也包括了解码操作,当真正要播放时候就直接把音频数据写设配了,大家自己琢磨下到底有什么好处,我自己确实没觉得特别大的好处。 扯淡完了就开始说正题了。老规矩,开撸之
2013-07-25 13:18:52
5179
原创 USB线插拔检测使用UEventObserver检测uevent事件的分析
说实话这玩样儿的代码量真的很少,大家如果能耐得住性子啃一会儿也就能撸懂了。在这之前研究USB线插拔的时候就知道了有这么个东西,当时也就看了看,但没做什么笔记。最近想用起来,却发现就只有个名字在记忆中了。 好了,又扯了这么多,来回到正题。 首先按照技术博客一贯的作风,得先有个入口点,这里我就先从怎么使用这个UEventObserver开始一步步分析。 首先这玩样儿是jav
2013-07-23 23:30:11
4495
原创 Android 4.1 与 4.2 在"强制拍照摄像音"处理上的区别分析
一晃接触Android已经2年多,从上层APK到底层HAL都算是小有了解。有次和领导聊到博客,都觉得这是个锻炼能力的好方法,所以一直都在考虑是不是应该写些自己的原创心得。最近正好碰到了个问题,帮忙看了下,表示有些东西可以写了。大家将就看看就行了。--------------首先我们来看看Android 4.1,(老Jellybean,4.2也是JB,算是小JB了,当然不是那个JB,
2013-07-20 20:01:24
4050
转载 Android WIFI 框架分析
一、Android WIFI模块初始化上文Android讲到在SystemServer中实例化了ConnectivityService,接着的便是WIFI初始化:frameworks/base/services/java/com/android/server/ConnectivityService.javaConnectivityService 的构造函数会创建WifiService,
2011-12-31 01:47:29
3631
转载 Android WIFI 模块分析
一:Wifi介绍概述 WIFI就是一种无线联网的技术,以前通过网线连接电脑,而现在则是通过无线电波来连网;常见的就是一个无线路由器,那么在这个无线路由器的电波覆盖的有效范围都可以采用WIFI连接方式进行联网,如果无线路由器连接了一条ADSL线路或者别的上网线路,则又被称为“热点”。运作原理 Wi-Fi 的设置至少需要一个Access Point(ap)和一个或一个以
2011-12-31 01:39:58
2625
转载 Android Binder 设计与实现 - 理论篇
摘要Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有管道,system V IPC,socket等IPC手段,却还要倚赖Binder来实现进程间通信,说明Binder具有无可比拟的优势。深入了解Binder并将之与传统IPC做对比有助于我们深入领会进程间通信的实现和性能优化。本文将对Binder的设计细节做一个全面的阐述,首先通过介绍Binder通信模型和Bin
2011-12-31 01:21:58
2906
转载 Android 电源管理基础框架图
Android电源管理方面网上资料比较多,这里就梳理下Android源码的线索,关注wake_lock和early_suspend。使一个应用程序不进入睡眠,须在上层申请一个wakelock锁,并对该锁进行持有。在acquire()和release()间,进程保持running状态。持有锁acquire()经过framework层PowerManagerService.java到抽象层
2011-12-31 01:16:46
2516
转载 android recovery 模式启动进入流程
1. 上层应用的设置->隐私权->恢复出厂设置对应的java代码在如下路径文件: packages/apps/Settings/src/com/android/settings/MasterClear.java MasterClear:mFinalClickListener()函数会发送一个广播出去: sendBroadcast(new Intent("android.intent.
2011-12-31 01:15:58
8221
转载 Android在标准linux基础上对休眠唤醒的实现(三)
四、android层源码解析在linux之上经过android的软件堆层层封装,最终在上层的java应用程序中使用。休眠唤醒也是从最上层发出的命令,然后一层一层地将参数解析,往最底层传,最后走上标准linux的休眠唤醒之路。 这一部分将会初略分析休眠唤醒机制上linux之上所走的路线。 在linux之上,存在一个hal层,专门做和linux内核
2011-12-31 01:09:42
2366
转载 Android在标准linux基础上对休眠唤醒的实现(二)
三、kernel层源码解析 - wakelock的重要地位wakelock在android的休眠唤醒机制中扮演着及其重要的角色,主要源码位于文件:kernel/kernel/power/wakelock.c,kernel/include/linux/wakelock.h中。 wakelocks_init()函数所做的工作是整个wakelock可以工作起来的基础,所有这里先说说这个函数。
2011-12-31 01:07:36
2071
转载 Android在标准linux基础上对休眠唤醒的实现(一)
一、新增特性介绍 实际上,android仍然是利用了标准linux的休眠唤醒系统,只不过添加了一些使用上的新特性,early suspend、late resume、wake lock。 Early suspend - 这个机制定义了在suspend的早期,关闭显示屏的时候,一些和显示屏相关的设备,比如背光、重力感应器和触摸屏等设备都应该被关掉,但是此时系统可能还有持有wake l
2011-12-31 01:05:19
2028
转载 Android Camera 系统简单分析
1. Overview1.1 物理架构1.2 Android架构2. CameraService3. HAL4. Overlay5. Video for Linux1. Overview 本文以Freescale IMX为例剖析camera摄像头的系统架构。1.1 物理架构 硬件方面,camera系统分为主控制器和摄像头设备,功能上主要有取景,拍照和摄影
2011-12-31 00:46:02
2302
转载 stagefright与opencore对比+框架图
1引言Android froyo版本多媒体引擎做了变动,新添加了stagefright框架,并且默认情况android选择stagefright,弃用之前的opencore,仅仅对opencore中的omx-component部分做了引用。Stagefright自android2.0后才添加,其稳定性有待商榷,是否存在bug也未知,opencore自android诞生起便存在,稳定性有保障
2011-12-31 00:44:46
2124
转载 stagefright + omx小结
由于stagefright和openmax运行在两个不同的进程上,所以他们之间的通讯要经过openBinder进行处理,对openBinder这一块还没有了解,所以恕stagefright和openmax之间的通信不能做分析,还有就是本小结不考虑音频这一块,假设视频为MP4封装的AVC编码文件.最早看的是opencore,但opencore兼顾了多平台的移植性而过于复杂,后来就改看stagef
2011-12-31 00:43:49
2019
转载 Android应用程序组件Content Provider的共享数据更新通知机制分析
在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的。关于数据共享的另一个话题便是数据更新通知机制了,即如果一个应用程序对共享数据做了修改,它应该如何通知其它正在使用这些共享数据的应用程序呢?本文将分析Content Provider的共享数据更新通知机制,为读者解答这个问题。
2011-12-31 00:41:48
2242
转载 Android应用程序组件Content Provider在应用程序之间共享数据的原理分析
在Android系统中,不同的应用程序是不能直接读写对方的数据文件的,如果它们想共享数据的话,只能通过Content Provider组件来实现。那么,Content Provider组件又是如何突破应用程序边界权限控制来实现在不同的应用程序之间共享数据的呢?在前面的文章中,我们已经简要介绍过它是通过Binder进程间通信机制以及匿名共享内存机制来实现的,在本文中,我们将详细分析它的数据共享原理。
2011-12-31 00:41:40
2857
转载 Android应用程序组件Content Provider的启动过程源代码分析
通过前面的学习,我们知道在Android系统中,Content Provider可以为不同的应用程序访问相同的数据提供统一的入口。Content Provider一般是运行在独立的进程中的,每一个Content Provider在系统中只有一个实例存在,其它应用程序首先要找到这个实例,然后才能访问它的数据。那么,系统中的Content Provider实例是由谁来负责启动的呢?本文将回答这个问题。
2011-12-31 00:41:27
2557
1
转载 Android应用程序组件Content Provider应用实例
上文简要介绍了Android应用程序组件Content Provider在应用程序间共享数据的原理,但是没有进一步研究它的实现。本文将实现两个应用程序,其中一个以Content Provider的形式来提供数据访问入口,另一个通过这个Content Provider来访问这些数据。本文的例子不仅可以为下文分析Content Provider的实现原理准备好使用情景,还可以学习到它的一个未公开接口。
2011-12-31 00:41:16
2798
转载 Android应用程序组件Content Provider简要介绍和学习计划
在Android系统中,Content Provider作为应用程序四大组件之一,它起到在应用程序之间共享数据的作用,同时,它还是标准的数据访问接口。前面的一系列文章已经分析过Android应用程序的其它三大组件(Activity、Service和Broadcast Receiver)了,本文将简要介绍Content Provider组件在Android应用程序设计中的地位,为进一步学习打好基础。
2011-12-31 00:41:05
1074
转载 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行。今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件。因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的。硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序;而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功
2011-12-31 00:40:37
750
转载 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口。实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android的Application Frameworks层提供硬件服务。我们知道,Android系统的应用程序是用Java语言编写的,而硬件驱动程序是用C语言来实现的,那么,Java接口如何去访问
2011-12-31 00:40:34
496
转载 在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序
在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简要介绍了在Android系统为为硬件编写驱动程序的方法。简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中。接着,在Ubuntu上为Android系统编写Linux内核驱动程序一文中举例子说明了如何在Linux内核编写驱动程序。在这一篇文章中,我们将继续介绍Android系统硬件驱动程序的另一
2011-12-31 00:40:31
617
转载 在Ubuntu上为Android系统内置C可执行程序测试Linux内核驱动程序
在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序。在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello、proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val。进一步,还通过cat命令来直接访问/proc/hello和/
2011-12-31 00:40:29
549
转载 在Ubuntu上为Android系统编写Linux内核驱动程序
在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore。随着Android系统逐步扩大市场占有率,终
2011-12-31 00:40:25
703
转载 Android硬件抽象层(HAL)概要介绍和学习计划
Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。也就是说,把对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?从技术实现的角度来看,
2011-12-31 00:40:12
555
转载 Android Camera Framework Stream
现在我们尝试从最开始的启动流程来熟悉android camera的整体framework流程:首先从上图的各个步骤来逐一分析流程,后续会根据具体的一些点进行内容的添加和扩充: ? Camera.javapackages/apps/camera/src/com/android/最上层的应用就是从这个文件开始。该文件集中了整个android上层应用的所有相关内容,当然更多的则为
2011-12-31 00:35:34
922
转载 Android应用程序线程消息循环模型分析
我们知道,Android应用程序是通过消息来驱动的,即在应用程序的主线程(UI线程)中有一个消息循环,负责处理消息队列中的消息。我们也知道,Android应用程序是支持多线程的,即可以创建子线程来执行一些计算型的任务,那么,这些子线程能不能像应用程序的主线程一样具有消息循环呢?这些子线程又能不能往应用程序的主线程中发送消息呢?本文将分析Android应用程序线程消息处理模型,为读者解答这两个问题
2011-12-31 00:30:58
643
转载 V4L2 - 基础知识/附图说明/易于理解
Videofor Linux two(Video4Linux2)简称V4L2,是V4L的改进版。V4L2是linux操作系统下用于采集图片、视频和音频数据的API接口,配合适 当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。在远程会议、可视电话、视频监控系统和嵌入式多媒体终端中都有广泛的应用。 一、Video for Linux two 在Linux下,所有外设都
2011-12-31 00:30:28
876
转载 Android 系统属性 SystemProperties 分析
Android 的系统属性包括两部分:文件保存的持久属性和每次开机导入的cache属性。前者主要保存在下面几个文件中:1.bionic/libc/include/sys/_system_properties.hview plain#define PROP_SERVICE_NAME "property_service" #define PROP_PATH_RAM
2011-12-31 00:30:11
2686
转载 Android应用程序键盘(Keyboard)消息处理机制分析
在Android系统中,键盘按键事件是由WindowManagerService服务来管理的,然后再以消息的形式来分发给应用程序处理,不过和普通消息不一样,它是由硬件中断触发的;在上一篇文章《Android应用程序消息处理机制(Looper、Handler)分析》中,我们分析了Android应用程序的消息处理机制,本文将结合这种消息处理机制来详细分析Android应用程序是如何获得键盘按键消息的。
2011-12-31 00:29:55
2104
1
转载 Android应用程序发送广播(sendBroadcast)的过程分析
前面我们分析了Android应用程序注册广播接收器的过程,这个过程只完成了万里长征的第一步,接下来它还要等待ActivityManagerService将广播分发过来。ActivityManagerService是如何得到广播并把它分发出去的呢?这就是本文要介绍的广播发送过程了。 广播的发送过程比广播接收器的注册过程要复杂得多了,不过这个过程仍然是以ActivityManager
2011-12-31 00:29:15
876
转载 Android应用程序注册广播接收器(registerReceiver)的过程分析
前面我们介绍了Android系统的广播机制,从本质来说,它是一种消息订阅/发布机制,因此,使用这种消息驱动模型的第一步便是订阅消息;而对Android应用程序来说,订阅消息其实就是注册广播接收器,本文将探讨Android应用程序是如何注册广播接收器以及把广播接收器注册到哪里去的。 在Android的广播机制中,ActivityManagerService扮演着广播中心的角色,负责
2011-12-31 00:29:08
643
转载 Android系统中的广播(Broadcast)机制简要介绍和学习计划
在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用;本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备。 在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个
2011-12-31 00:29:03
961
转载 Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享数据的机制:匿名共享内存,它能够辅助内存管理系统来有效地管理内存,它的实现原理我们在前面已经分析过了。为了方便使用匿名共享内存机制,系统还提供了Java调用接口(MemoryFile)和C++调用接口(MemoryHeapBase、MemoryBase),Java接口在前面也已经分析过了,本文中将继续分析它的C++接口。
2011-12-31 00:28:07
1142
1
转载 Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析
在前面一篇文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析中,我们系统地介绍了Android系统匿名共享内存的实现原理,其中着重介绍了它是如何辅助内存管理系统来有效地管理内存的,在再前面一篇文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划中,我们还提到,Android
2011-12-31 00:27:59
936
转载 Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析
在上一文章Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划中,我们简要介绍了Android系统的匿名共享内存机制,其中,简要提到了它具有辅助内存管理系统来有效地管理内存的特点,但是没有进一步去了解它是如何实现的。在本文中,我们将通过分析Android系统的匿名共享内存Ashmem驱动程序的源代码,来深入了解它是如何辅助内存管理系
2011-12-31 00:27:56
1049
转载 Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
在Android系统中,提供了独特的匿名共享内存子系统Ashmem(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。它有两个特点,一是能够辅助内存管理系统来有效地管理不再使用的内存块,二是它通过Binder进程间通信机制来实现进程间的内存共享。本文中,我们将通过实例来简要介绍Android系统的匿名共享内存的使用方法,使得我们对Android系统的匿名共享内存
2011-12-31 00:27:47
630
转载 Android日志系统Logcat源代码简要分析
在前面两篇文章Android日志系统驱动程序Logger源代码分析和Android应用程序框架层和系统运行库层日志系统源代码中,介绍了Android内核空间层、系统运行库层和应用程序框架层日志系统相关的源代码,其中,后一篇文章着重介绍了日志的写入操作。为了描述完整性,这篇文章着重介绍日志的读取操作,这就是我们在开发Android应用程序时,经常要用到日志查看工具Logcat了。
2011-12-31 00:26:56
908
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人