zoukankan      html  css  js  c++  java
  • 关于Android开发的一些个人总结(2016.04)

    引言

    本文主要目标是整理下我在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)分析下源码。

  • 相关阅读:
    《Expert .NET 2.0 IL Assembler》 译者笔记 2
    游戏大厅升级日记 第2天
    《Metadata Tables》 Authors
    随便写写,蛮有趣的
    《Metadata Tables》 Introduction
    Oracle跨数据库的数据操作
    要换工作环境了
    javascript中几种操作打印的方法
    Datagrid中实现单选功能
    C#中利用Oracle事务删除表
  • 原文地址:https://www.cnblogs.com/tocy/p/about-android-learning-summary-201604.html
Copyright © 2011-2022 走看看