@邓凡平 资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富.目前就职于国内一家领先的Android企业,负责Framework的开发和维护.乐于分享,撰写的Android Framework 源码的系列文章深受读者欢迎.此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。著有《深入理解Android 卷I》图书一本。
本期“高手问答”欢迎大家对 Android 的底层以及源码方面问题进行提问,其他 Android 相关问题也可以在此提问。
直接回复此贴进行提问,@邓凡平 将对你的问题进行答复。
本次活动我们将送出5本《深入理解Android 卷I》。在活动结束以后,@邓凡平 将从提问者中选择5位送出此书。
欢迎大家踊跃提问!
注:我们不欢迎任何与技术无关的讨论。
有很多兄弟想从其他语言例如PHP转到做android,然后大家都想知道C/C++到底需要什么样做的知识。这里我把其中的问题给大家总体介绍一下:
1 C/C++是一门语言,这门语言的学习难度相比其他语言而说,还是比较大的。
2 即使学会了C/C++(可能看了几本书就差不多了),但是你依然什么事情都干不了。为什么?因为除了学习C++以外,你还得学习OS提供的API。例如读写文件,Linux和Windows的就不一样。我们先学习语言,然后还要学习如何用它做事情。再比如网络编程,学会C++一点用没有,还得学习网络编程。具体的事情又是和OS相关的,MS有自己的RAW API,Linux有自己的RAW API。由于C++语言上并没有提供多线程、同步等语法,就光这两个东西都够学了。非常麻烦。所以,不能说学会C++就能做什么。
3 不如反过来看,如果我学会Linux编程,问题是不是会迎刃而解呢?恩,我个人觉得效果好点。对Linux API来说,接口都是C函数,你可以使用C来写,也可以使用C++来写。而且,你终于把focus放到要做到事情上来了,而不是空谈什么语言。根据我个人对编程的看法,首先把目标放到你要做的事情上,例如打开一个文件,读写它。然后再把精力放到如何编码上。当你水平差的时候,你的代码可能写得很差。一旦你水平上去了,再加上个人对品质的追求,代码就越写越好。从目的上看,两种方式都达到目的了。从个人成就上看,你会看见自己在逐步成长,这样坚持下去的可能性也就很大。
4 PHP转到android平台,我建议从Java入手,这门语言确实方便了很多程序员。平台无关,非常棒。另外,在技术飞速发展的今天,如果你打定转行,那么要以最小的时间代价转到一个新的平台,培训机构是一个不错的考虑。
太好了!!!
首先声明下,我刚接触安卓系统方面的东西,是新手。所以,问的问题如果没什么技术含量,请见谅。
我想请教一下:安卓系统移植方面,那些地方和声音的大小相关?
目前,我在做音频驱动方面的工作,但是音量偏小,然而,codec方面的所有控制增益的寄存器我都已经跳到最大了。
framework目录下的AudioPolicyManagerBase.h中的关于音量的宏会对实际播放的音量有影响么?还是只是声明一个上下限?
我目前对android音频服务从上到下的一个组织结构有点疑惑。有以下几个小疑问,您给指点下。
1. 比如kernel_xxx中,ASoC的种种驱动(platform,machine,codec)是通过标准的alsa接口,利用
crw-rw-r-- system audio 116, 33 1970-01-01 00:00 timer
crw-rw-r-- system audio 14, 0 1970-01-01 00:00 mixer
crw-rw-r-- system audio 116, 0 1970-01-01 00:00 controlC0
crw-rw-r-- system audio 14, 4 1970-01-01 00:00 audio
crw-rw-r-- system audio 14, 3 1970-01-01 00:00 dsp
crw-rw-r-- system audio 116, 24 1970-01-01 00:00 pcmC0D0c
crw-rw-r-- system audio 116, 16 1970-01-01 00:00 pcmC0D0p
这些文件提供给alsa lib服务么?
不好意思啊,我刚来。关于音频方面,目前你能找到的android audio系统最全的分析文章可能是我在网上写的Android深入浅出之audio(现在已经收录到我的书的第7章,建议你看看)。大部分移植工作者只关注kernel部分,而很少对userspace关心。但是在android系统上,它单独搞了一个HAL层。我个人希望做移植的童鞋们还是把HAL层研究下吧。否则自己都不会写测试用例。
2 音量问题,我所知道的在硬件中似乎有一个增益调节,上层设置的音量到底对应实际的多少分贝是靠硬件来调节的。
3 有些厂商用的是OSS,比如高通平台,有些用得是ALSA。我一直对HAL层之上的比较了解。你们的移植工作也要把alsa移植到android audio 的hal层,因为android平台就操作HAL层。这个难度其实还是比较大,需要你对alsa userspace api比较了解,还需要了解android hal层接口以及如何实现接口以达到其设计的目的。
4 关于资料的话,建议你不用去看framework的java层,而是尽量使用native的接口,例如audio track.audiorecord.真正的核心在audioflinger.cpp./audiopolicymanager。参考的话可以看hardware/msm7k/libaudio下相关的内容。书的话,目前最全的资料就是我的几篇文章。或者《深入理解android 卷I》了。
暂时先回答到这,你问题一下push太多了。呵呵。
补充一下,android audio系统上大量使用了C++,还有很多多线程,同步,共享内存方面的知识的运用。我做移植的童鞋们可能很少亲自写代码,所以在理解这方面的代码时候会有些困难。这个是现实情况造成的。不过建议大家还是静下心来对着代码仔细思考。最好,最好还是有时间利用android的api比如audiotrack.h/audiorecorder.h,写几个native的程序感受一下。我自己也在利用这些api写测试代码呢。真的,要写好的话还是有难度的。
另外,关于抽奖的事情,到最后的时候我会公布一个邮箱,到时候大家往里发自己的联系信息,前五位就送书。哈哈。谢谢大家的支持。