Android 高手“邓凡平”做客OSChina,提问有奖

红薯 发布于 2011/12/18 10:37
阅读 15K+
收藏 11

@邓凡平 资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富.目前就职于国内一家领先的Android企业,负责Framework的开发和维护.乐于分享,撰写的Android Framework 源码的系列文章深受读者欢迎.此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。著有《深入理解Android 卷I》图书一本。

本期“高手问答”欢迎大家对 Android 的底层以及源码方面问题进行提问,其他 Android 相关问题也可以在此提问。

直接回复此贴进行提问,@邓凡平 将对你的问题进行答复。

本次活动我们将送出5本《深入理解Android 卷I》。在活动结束以后,@邓凡平 将从提问者中选择5位送出此书。

欢迎大家踊跃提问!

注:我们不欢迎任何与技术无关的讨论。

加载中
2
邓凡平
邓凡平

有很多兄弟想从其他语言例如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入手,这门语言确实方便了很多程序员。平台无关,非常棒。另外,在技术飞速发展的今天,如果你打定转行,那么要以最小的时间代价转到一个新的平台,培训机构是一个不错的考虑。

chazz
chazz
受教了..
邓凡平
邓凡平
@随风过境 老兄 这个话很久前的了..呵呵 多谢你的支持.
随风过境
平哥的话很朴实 很实在 没经验的程序员说不出这么有水平的话
McAtom
McAtom
我以前也是学php的,最近学了俩个多月的java了,准备开始学android。。。希望以后多多交流。。。
马翠
马翠
听君一番话胜读十年书啊。以后多向你学习学习。
1
苦行瓜
苦行瓜
我参与安卓开发半年了,现在感觉很多功能实现起来都没刚开始时学那么难,但我觉得自己已经到了一个瓶颈期,很多基本功能都能实现,但想要自己的APP酷一点!想在上面加上很多自己希望有的特效,例如各种炫丽的动画,还有一些与别不同的view控件,但我感觉目前我的水平就是那种夹在中间层的那种水平,基础的开发知识和经验都有,可还不能自己随心所欲实现自己的想要的东西(例如自己想实现一个很酷的view控件),但又苦于自己不清楚应该往哪方面深入,求指导。
邓凡平
邓凡平
@wangfengmmd 就是和UI没太大关系的,比如播放引擎,搜索。UI只是提供一个界面嘛,具体干活的可不是UI能做啊。
w
wangfengmmd
回复 @邓凡平 : 请问什么是业务层开发,是指framework吗,本人还是小白开发者,求指教?
苦行瓜
苦行瓜
@邓凡平 : 的确是,你这样子说我还真的有些清醒了,搞这些门面的东西的确会令我有点迷失方向的感觉,目前我所掌握的项目中应用到的设计模式只有两种,横向可以深入到架构和业务设计方面,纵向可以向android系统层发展。
邓凡平
邓凡平
另外,如果你仅想做控件的话,国内可能没有太多的资料可以帮你。牛掰的控件的那种炫往往不是程序员设计的。所以,自然你就很痛苦了。个人发展的话,我建议往核心业务层转,往架构师转。而把UE交给专业人士去做。所以我一直不去接触UI就是这个原因。再说了,android的UI设计很不好,编辑器也差,很头疼...
邓凡平
邓凡平
老兄,理解你的痛苦。做APP尤其是UI的,最后都会进入瓶颈期。主要原因是你是码工,而好看炫酷的UI是UE人员设计的。所以,你最好转向业务层开发,这里还有很多很多知识需要学习。
0
ChenQi
ChenQi

太好了!!!

首先声明下,我刚接触安卓系统方面的东西,是新手。所以,问的问题如果没什么技术含量,请见谅。

我想请教一下:安卓系统移植方面,那些地方和声音的大小相关?

目前,我在做音频驱动方面的工作,但是音量偏小,然而,codec方面的所有控制增益的寄存器我都已经跳到最大了。

framework目录下的AudioPolicyManagerBase.h中的关于音量的宏会对实际播放的音量有影响么?还是只是声明一个上下限?

 

0
ChenQi
ChenQi

我目前对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服务么?

 

0
ChenQi
ChenQi
2. android目录下有kernel_xxx, hardware, framework这几个目录?音频方面的文件也是分别放在这几个目录下?那么他们间的组织关系是什么?是kernel_xxx给hardware提供服务,而hardware作为一个HAL给framework提供服务么?他们间的组织关系仅是这样的分层关系么?
0
ChenQi
ChenQi
3. framework中关于音频方面的文件和class很多,我看的有点乱。他们之间是怎样的一种组织关系呢?我应该重点看哪几个文件呢?
0
ChenQi
ChenQi
另外,有没有这方面的相关资料?推荐下吧,我好好参考研究下。
w
wenwenkeke
是啊 我也想看,
0
邓凡平
邓凡平

不好意思啊,我刚来。关于音频方面,目前你能找到的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太多了。呵呵。

0
邓凡平
邓凡平

补充一下,android audio系统上大量使用了C++,还有很多多线程,同步,共享内存方面的知识的运用。我做移植的童鞋们可能很少亲自写代码,所以在理解这方面的代码时候会有些困难。这个是现实情况造成的。不过建议大家还是静下心来对着代码仔细思考。最好,最好还是有时间利用android的api比如audiotrack.h/audiorecorder.h,写几个native的程序感受一下。我自己也在利用这些api写测试代码呢。真的,要写好的话还是有难度的。

0
邓凡平
邓凡平

另外,关于抽奖的事情,到最后的时候我会公布一个邮箱,到时候大家往里发自己的联系信息,前五位就送书。哈哈。谢谢大家的支持。

返回顶部
顶部