Android底层开发经验】的更多相关文章

最近看到一个博客,他的博文虽然是转载的,但源作者肯定对底层的理解可谓是非常透彻,一副思维导图就可以将整个重要体系建立起来,非常适合大家学习.学习不单单只要有代码,生动有趣更重要.在此推荐一波: http://blog.csdn.net/yuzeze…
我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径.根据前辈的经验,Android底层完全入门需要两年. 先说下我的入门过程:第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的. 第一步,我找到了一本好书<Android的设计与实现 第一卷>它讲了Android框架层的启动,初始化,服务框架初始化,Bin…
对于android开发,实际上大部分工作都是在应用层,但为了体现"技术含量",以及"知其所以然",以便在遇到问题是不至于束手无策.因此有必要了解底层的工作机制. 由于android是开源的系统,因此学习其内部的工作机制是非常容易的,目前也有一些关于android源码分析的书籍. 我一直认为,应用层的开发和底层没什么太大的关系,不过有一次因为应用权限的问题,也算是对android framework层有一些了解了,借助一本源代码分析的书籍了解android的工作原理并…
为了开发linux驱动方便些,我们一般将linux作为Android的开发环境,那么就需要搭建Android的开发环境,下面是一些搭建Android底层时的心得: (1)安装JDK:除了普遍使用的下载压缩安装配置PATH 方法外,Ubuntu linux还提供了更简单的方法: #vim/etc/apt/sources.list后添加deb http://old-releases.ubuntu.com/ubuntu/ hardy multiverse源 # apt-get update # apt…
原文网址:http://blog.csdn.net/louiswangbing/article/details/6616202 Android底层库和程序 1.     本地实现的基本结构 Android的本地实现层次具有基本的库和程序,这些库和程序是Android基本系统运行的基础,主要包含以下内容: l  标准C/C++库Bionic: l  C语言工具库libcutils: l  init进程: l  shell工具: l  C++工具库libutils. 2.     增加本地库的方法…
这个系列的文章一共8篇,我酝酿了很多年,参考了很多资源,查看了很多源码,直到今天把它写出来,也是战战兢兢,生怕什么地方写错了,贻笑大方. (一)引言 早在我还是Android菜鸟的时候,有很多技术我都不太明白,也都找不到答案,比如apk是怎么安装的,比如资源是怎么加载的. 再比如说,每本书都会讲AIDL,但我却从来没用过.四大组件也是这个问题,我只用过Activity,其它三个组件,不但没用过,甚至连它们是做什么的,都不是很清楚. 之所以这样,是因为我一直从事的是电商类App开发工作,对于这类A…
(五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管.估计是Android底层开发人员先写了ActivityManagerService用来管理Activity,后来写Service.Receiver.CP的时候发现代码都差不多,于是就全都用ActivityManagerService,但是却忘记改名字了——我也是猜的,纯属八卦. 由此而说到了插件化…
写在开头 需求方:上传试卷的时候,用户自己拍的照片有很多问题.如:不清晰.图片歪了.错误图片等.我们要是能够对拍摄照片进行识别处理就好了,能够裁切矫正就更好了,最好可以像二维码扫描一样,直接识别处理- 开发:满足你! 一.整体框架逻辑 试卷扫描模块,最核心的逻辑就是数据采集.解码识别.图片裁切,再加上对识别结果和裁切结果的处理,就构成了整个模块的主逻辑(感谢多媒体同事对图片识别与处理提供库的支持).整个逻辑的实现如下图所示: 在模块中,除了UI线程,还开启了一个Deocde线程,用来处理图片的解…
注:将android底层malloc换为mmap来获取内存,可将获取到的内存添加tag,从而再利用meminfo进行分析,可单独查看该tag的内存,从而进行分析. 一. mmap系统调用 1. mmap系统调用 mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零.munmap执行相反的操作,删除特定地址区域的对象映射. 当使用mmap映射文件到进程后,就可以直接操作这段虚拟地址进行文件的读写等操作,不必再调用rea…
1   Android为什么要增加硬件抽象层HAL A    统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B   解决GPL版权问题,因为linux内核基于GPL协议.这个GPL协议须要开源.而Android遵守Apache License2.0协议,这个协议不要求开源.因此google玩了个穿越,将原本位于Linux驱动中的敏感代码(业务逻辑代码)向上移动了一层,这样这些敏感代码就拜托了GPL协议的束缚,那些不想开源的linux驱动作者不想开源如今就能够不用开源了.…
Android底层开发之Linux输入子系统要不要推断系统休眠状态上报键值 题外话:一个问题研究到最后,那边记录文档的前半部分基本上都是没用的,甚至是错误的. 重点在最后,前边不过一些假想猜測. http://blog.csdn.net/kangear/article/details/40072707 在调试一下红外遥控器input驱动时,直接採用的是一个半成品的驱动在上边实现的自己的设备的匹配,但同一时候遇到了一些关于input输入子系统的疑惑. 按键一般有「按下和抬起」两个状态一般使用0和1…
第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache Ant 1.65+,Windows上使用1.7+版本:(单独的JRE是不可以的,必须要有JDK),不兼容Gnu Java编译器(gcj) Java_Home x:\xx\xx\java\JDK1.6.0-17classpath:.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/…
Android潜在的发展耳机插头连接到音频频道切换的例子 因为使用的是耳机 麦克分离式的耳机,所以要分别上报事件.在Android系统层耳机插孔的检測是基于/sys/class/switch/h2w/state的值来推断的(以4.4.4_r2为样例位于WiredAccessoryManager.java). 仅仅要在内核中实现一个「或真或假」的基于switch类的h2w开关.Android系统就能够监听到插拔信息. 在播放音乐的时候插入耳机,使用tinymix(參考:Android音频底层调试-…
(十二)ContentProvider (1)ContentProvider是什么? ContentProvider,简称CP. 做App开发的同学,尤其是电商类App,对CP并不熟悉,对这个概念的最大程度的了解,也仅仅是建立在书本上,它是Android四大组件中的一个. 做系统管理类的App,比如说手机助手这种,有机会频繁使用CP. 而对于应用类App,数据通常存在服务器端,其它应用类App也想使用的时候,一般都是从服务器取数据,所以没机会使用到CP. 有时候我们会在自己的App中读取通信录或…
(十)PMS及App安装过程 PMS,全称PackageManagerService,是用来获取Apk包的信息的. 在前面分析四大组件与AMS通信的时候,我们介绍过,AMS总是会使用PMS加载包的信息,将其封装在LoadedApk这个类对象中,然后我们就可以从中取出在manifest声明的四大组件信息了. (一) 在下载并安装App的过程,会把Apk存放在data/app目录下. Apk是一个zip压缩包,在文件头会记录压缩包的大小,所以后续在文件尾巴就算是追加一部小电影,也不会对解压造成影响—…
一.系统架构: 一).系统分层:(由下向上)[如图] 1.安卓系统分为四层,分别是Linux内核层.Libraries层.FrameWork层,以及Applications层: 其中Linux内核层包含了Linux内核和各种驱动: Libraries层包含各种类库(动态库(也叫共享库).android运行时库.Dalvik虚拟机),编程语言主要为C或C++ FrameWork层大部分使用java语言编写,是android平台上Java世界的基石 Applications层是应用层,我们在这一层进…
LED将为我闪烁:控制发光二极管 对于大多数Linux驱动来说,需要直接与硬件交互,本章主要介绍用Linux驱动来控制二极管的明暗,即通过Linux驱动发送数据控制开发板上LED灯的开关. 第一节介绍了LED驱动的实现原理.Linux驱动不是直接向硬件中的内存写数据,而是与本机的I/O内存交互,Linux内核提供了多个与I/O内存交互的函数,每个连接Linux的硬件在I/O内存中都会有映射首地址,开发板上的LED等也有其映射首地址. 第二节编写LED驱动,步骤如下: (1)测试开发板,打开电源开…
第一个Linux驱动程序:统计单词个数 一.首先了解一下: 打印机驱动写入数据:对于打印机驱动来说,需要接收这些被写入的数据,并将它们通过PC的并口.USB等端口发送给打印机.要实现这一过程就需要Linux驱动可以响应应用程序传递过来的数据.这就是Linux驱动的事件,虽然在C语言里没有事件的概念,但却有与事件类似的概念,这就是回调(callback)函数.因此,编写Linux驱动最重要的一步就是编写回调函数,否则与设备文件交互的数据将无法得到处理.图6-1是应用软件.设备文件.驱动程序.硬件之…
Build fingerprint: 'XXXXXXXXX'pid: 1658, tid: 13086  >>> system_server <<<signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 64696f7e r0 00000000  r1 00000001  r2 ad12d1e8  r3 7373654d r4 64696f72  r5 00000406  r6 00974130  r7 40d1400…
大多数的Android应用开发都会将注意力集中在界面功能上,只有少数应用会需要一个Service,尤其是一个长期运行的Service,去进行后台联网.环境检测.媒体播放等功能.Android环境下的Service有其自身的特点,为了让服务完美地实现预想的功能,首先要解决的一个重要问题就是:如何让你的服务优雅地活着.(太文艺了,请讲人话--) 具体来说,就是要做到两点: 1. 尽可能运行 2. 尽可能省电 看似寻常的道理,实现起来还真不容易,下面一个个来看: 尽可能运行 Android系统会根据当…
(十)Service Service有两套流程,一套是启动流程,另一套是绑定流程.我们做App开发的同学都应该知道. 1)在新进程启动Service 我们先看Service启动过程,假设要启动的Service是在一个新的进程中,分为5个阶段: 1)App向AMS发送一个启动Service的消息. 2)AMS检查启动Service的进程是否存在,如果不存在,先把Service信息存下来,然后创建一个新的进程. 3)新进程启动后,通知AMS说我可以啦. 4)AMS把刚才保存的Service信息发送给…
(十一)BroadcastReceiver BroadcastReceiver,也就是广播,简称Receiver. 很多App开发人员表示,从来没用过Receiver.其实吧,对于音乐播放类App,用Service和Receiver还是蛮多的,如果你用过QQ音乐,App退到后台,音乐照样播放不会停止,这就是你写的Service在后台起作用. 在前台的Activity,点击停止按钮,就会给后台Service发送一个Receiver,通知它停止播放音乐:点击播放按钮,仍然是发送这个Receiver,…
public class ContextUtils { private static Context applicationContext = null; public static Context getApplicationContext() { if (null != applicationContext) { return applicationContext; } final Object activityThread = getActivityThread(); if (null !…
<Android的设计与实现> Android框架层<Linux系统编程手册> Linux系统编程<Android内核剖析> 编译框架和romC语言和Linux内核知识…
(七)App启动流程第2篇 书接上文,App启动一共有七个阶段,上篇文章篇幅所限,我们只看了第一阶段,接下来讲剩余的六个阶段,仍然是拿斗鱼App举例子. 简单回顾一下第一阶段的流程,就是Launcher向AMS发送一个跨进程通信,通过AMN/AMP,告诉AMS,我要启动斗鱼App. 画一个图,描述一下启动App所经历的7个阶段: 第2阶段 AMS处理Launcher传过来的信息 这个阶段主要是Binder的Server端在做事情.因为我们是没有机会修改Binder的Server端逻辑的,所以这个…
(八)App内部的页面跳转 在介绍完App的启动流程后,我们发现,其实就是启动一个App的首页. 接下来我们看App内部页面的跳转. 从ActivityA跳转到ActivityB,其实可以把ActivityA看作是Launcher,那么这个跳转过程,和App的启动过程就很像了. 有了前面的分析基础,会发现,这个过程不需要重新启动一个新的进程,所以可以省略App启动过程中的一些步骤,流程简化为: 1)ActivityA向AMS发送一个启动ActivityB的消息. 2)AMS保存ActivityB…
0000 这个阶段搞了很多和Android文件权限相关的问题,虽然一知半解,但也算是对Android权限机制有一些自己的理解.遂将这些内容整理出来.因为权限这部分涉及到的内容很多,故将知识分为几块内容分别去整理.目前能想到的概要如下: Android 权限底层实现原理概述 Android uid,gid的生成与权限机制的联系 Android packageManagerService与权限的千丝万缕(源码解析) Android 从recovery模式下的OTA升级理解权限 Android ROO…
本文转载自:https://blog.csdn.net/myfriend0/article/details/80016739 创建Android守护进程(底层服务) 前言 Android底层服务,即运行在 linux 下的进程,是 Android 系统运行的基础,完成 Android 或者说计算机最基本的功能.比如连接服务(包括 WIFI,BT 等等):比如 Android 的 adb 功能:比如存储监控等等.没有这些底层服务,上层也就没有了对应的功能. Android 底层服务往往是常驻内存,…
招聘:有兴趣做一个与Android对等的操作系统么? 前不久我发了一篇<八一八招聘的那些事儿>讲了我自己作为求职者对招聘的一些看法.那个时候我还在求职,对求职的结果还是挺满意的,五家公司面试,放弃了其中三家的offer(包括盛大云计算,东航信息部以及一小美资公司),拒了一家的二面(因为我已经做好决定了),最后选择了以前工作过的老东家-上海科泰.虽然科泰给的 offer 待遇不是所有 offer 中最高的,但我还是选择回归,主要是基于两点:对做的事情感兴趣能有担当,人好打交道团队氛围自由融洽(像…
2014年3月5日.12日华清远见金牌讲师名家大讲堂(以下简称名家大讲堂)在线讲座全新升级开讲,至此拉开了新一年名家大讲堂的序幕! 华清远见名家大讲堂作为业内颇具影响力的公益免 费线上课程,自2009年开始就已经跟全国各地的嵌入式Linux.ARM.Android及物联网的技术爱好者见面了!经过5年的沉淀积累,华清远见 2014年将此公益免费课程全新升级:不仅在主题和内容方面进行了更多尝试和完善,更是在年初就加大投入,将全年的讲座计划加入到课程准备当中.期待用最 顶级的讲师,把最实用的内容,以最…