引言

本文主要目标是整理下我在2016年第一季度针对Android学习的内容,不会深入细节,只是简单聊聊框架以及学习的方法。

我的Android之路

因为之前对Android有一个简单的接触,研究生期间基于ffmpeg做了一个简单的媒体播放器,几年之后也忘得差不多了。

我本人仅有的经验是在Windows下开发,熟悉c++,对多媒体开发有一定了解,基本上可以独立完成播放器的编写。简单了解一些Linux开发经验。

由于Android官网推荐使用Ubuntu作为Android首选开发环境,在实际开始学习Android开发之前,我还是建议大家对Linux开发的GCC、shell、bash、linux命令由一定的了解,最起码知道基本的原理,出现问题知道可以到哪里找解决方案。

Android整体框架

很多资料上会介绍,Android通常分为五层,类似TCP/IP协议的实现。具体建议参考http://blog.csdn.net/innost/article/details/47252311。

基本上这五层包括:

	App
|
\ /
App Framework
|
\ /
Library/Android Runtime
|
\ /
Hardware Abstract Layer(HAL)
|
\ /
Linux Kernel

分层的目的就是为了简化复杂度。上层可以调用底层提供的接口,反之是不可以的。

我们常说的APP开发是位于上面两层(App、App Framework),多数以Java为主(所以这里不是我关注的重点),只要了解如何从Java层调度到c/c++层即可,也就是JNI的架构以及编译工具ndk。

App Framework中有大量的Service,那么这些Service是如何和Linux Kernel交互的。比较常用的服务有ActivityManager、WindowManager、ServiceManager、PackageManger、AudioFlinger、SurfaceFlinger。

当然撇开App层,事实上在android上也可以直接运行CUI的程序,这样就甭取关心Android Application运行机制。

我的阅读列表

App/App Framework

JNI、NDK开发

  • "Pro Android C++ with the NDK"——《Android C++高级编程——使用NDK》
  • "Android NDK Beginner’s Guide"
  • "Mastering Android NDK"

运行库&kernel

  • android souce code
  • 《Android内核剖析》
  • 《Android技术内幕·系统卷》
  • 《深入理解Android·卷一》
  • 《深入理解Android·卷二》(还有其他书籍,没有看)
  • 《深入理解Android内核设计思想》

一些理解

  • 就目前而言Android是一个功能受限的Linux系统,同时降低了App开发的门槛,首要保证的是通话功能以及低功耗。
  • Android的APP开发有很多全局变量,需要什么功能,指不定那个角落里会有一个接口,通过这个可以访问某些全局参数。
  • 多数情况下Android是一个多任务单窗口的系统,当然不是绝对的,也有多窗口的时候。
  • 四大组件(Activity、Sevice、ContentProvider、Broadcast Receiver)
  • 可以简单了解下Android App启动过程
  • 需要持续分析下Android多媒体框架(音视频编解码、显示、抓取)
  • 学习Android系统的过程,其实也是对windows、linux实现机制的一种外在映射,比如如何将文件和应用程序关联起来
  • 虽然我们说android系统不复杂,开发门槛比较低,但是要全部了解还是很有难度的,学习这写的目的主要是为了知道通过什么方式了解android内部运行机制(有大致的框架即好),不需要都记住,只需要知道可以到哪里找到问题的答案就好。
  • 最新的技术只能通过Android官网或者源码学习

接下来的学习内容

前面自己啰嗦这么多,说说下面的目标吧。

通过几个月的学习,个人而言基本是对整体框架有了解,接下来聚焦下吧。我是做多媒体的,那么有必要深入分析下Android下的音频播放(PCM)、视频渲染(YUV)、硬解码等机制。

当然时间允许可以直接把AudioService(AudioPolicy、AudioTrack、AudioFlinger)、MediaPlayerService(MediaPlayer、SurfaceFlinger)分析下源码。

关于Android开发的一些个人总结(2016.04)的更多相关文章

  1. 2016 校招, Android 开发,一个本科应届的坎坷求职之路(转)

    转载出处:http://www.nowcoder.com/discuss/3244?type=2&order=0&pos=1&page=1 和大多数的面经不同,我不是大牛,手头 ...

  2. lazarus 2016 2月18 4:22:35 支持android开发了, 既ios,linux,macosx,window,web 后 囊括一切啦。 哈哈

    Android Development Lazarus for Linux Lazarus for Mac OS X Lazarus for iOS Lazarus for Windows Lazar ...

  3. Android开发之---AIDL

    在Android开发中,有时会用到多进程通信,这时,可选的方案为: 1. Bundle    :四大组件之间的进程间通信 2. 文件共享   :适合无并发情景 3. Messager : 低并发的一对 ...

  4. Android开发之---Activity启动模式

    在Android开发中,启动一个新的activity我们可以使用startActivity或startActivityForResult,Android系统使用栈的方式来管理一个APP的页面显示与保存 ...

  5. 安卓学习进程(2)Android开发环境的搭建

        本节将分为五个步骤来完成Android开发环境的部署. 第一步:安装JDK. 第二步:配置Windows上JDK的变量环境 . 第三步:下载安装Eclipse . 第四步:下载安装Androi ...

  6. 2015年,从毕业到工作的几点感悟(Android开发新人)

    锄禾日当午,汗滴禾下土.       2015年,从毕业到工作的几点感悟(Android开发): 多用三方类库:(成长经验:尽量不要自己手动实现网络上已经有的优秀开源类库的功能,例如: 网络请求:常见 ...

  7. [付费视频]Delphi视频Android开发使用静态库(A)和动态库(SO)

    关于本视频:前阵子接到一个委托,解决Delphi开发Android程序中串口通信的问题,厂家那边提供了c文件,需要翻译成delphi可用,翻译倒是比较简单.不过后来翻译读写ic卡单元的时候进行不下去了 ...

  8. android 开发必用的开源库

    LogReport:  https://github.com/wenmingvs/LogReport,   崩溃日志上传框架 wcl-permission-demo:Android 6.0 - 动态权 ...

  9. Dagger2在Android开发中的应用

    世界是普遍联系的,任何事物和个体都直接或间接相互依赖,在时空长河中共同发展.在面向对象的世界中,更是如此,类与类之间的依赖,关联关系,模块(亦或是分层架构中的层)之间的耦合关系,都是我们在软件开发实践 ...

随机推荐

  1. Ubuntu 下用命令行快速打开html,mp3等文件

    想用命令行打开网页文件,实现方法如下: 1.Ctrl+Alt+T可以打开shell,F11可以全屏显示,输入以下命令即可打开js17.html,并且指定浏览器,比如指定chrome, google-c ...

  2. Nginx 504 Gateway Time-out问题解决

    今天站群VPS上面的所有站出现的 504 网关错误,现在小色还是菜菜的,斗胆解决下.在网上面搜解决方案,尝试设置ngxin的fast-cgi_buffers 和重启ngxin来解决,但是错误依旧.怀疑 ...

  3. MySQL常见错误代码及代码说明

    1005:创建表失败 1006:创建数据库失败 1007:数据库已存在,创建数据库失败<=================可以忽略 1008:数据库不存在,删除数据库失败<======== ...

  4. linux下串口工具minicom

    系统环境:ubuntu  14 .04  和ubuntu 16.04 我当时的需要主要是两个,能够看到正常串口输出,并且把串口内容实时输出到文件中 那接下来工作主要是两个:1.安装 2.配置 相信各位 ...

  5. Html插入Flash.object.embed.swf各个参数值详解介绍[等比例缩放]

    http://www.dayku.cn/space-3-do-blog-id-544.html 目也在此列出. Internet Explorer 可识别用于 object 标签的参数:Netscap ...

  6. 代码管理(三)sourcetree 的使用

    一.SourceTree简介   SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作.同时它也是Mercurial和Subv ...

  7. Inside i++

    i++.++i.i=i+1.效率怎么样?看过一本书上说,i++比i=i+1好的地方是因为i=i+1中的那个1要占用一个寄存器,所以速度没有i++快,于是我想验证一下.另外,以前听说过Java中的“i= ...

  8. JavaSE入门学习20:Java面向对象之接口(interface)(一)

    一Java接口 接口(英文:interface)是抽象方法和常量值的集合,在Java编程语言中是一个抽象类型,接口通常以interface来声 明.类是一种详细实现体.而接口定义了某一批类所须要遵守的 ...

  9. App开发准备

    一. Android开发 二. IOS开发 1. 准备苹果电脑 Mac pro 一般比较贵,很少人或公司使用 替代的产品为 iMac 或 Mac mini 中配8G内存版 2. 准备苹果开发者账户,才 ...

  10. Python 爬虫 数据清洗 去掉 超链接

    有时候我们需要清洗数据,里面有超链接,怎么去掉他们,比如下面的问题 , - January , </p></li><li </p><div " ...