转到正文

机锋网

专业Android资讯网站,最快Android业内新闻

存档

分类: 内核

lockscreen-200x300

运行Android 2.0系统的Motorola DROID应该面市块2周了,这块明星手机中最重要的部分——源代码已经解锁。甚至对于制造商伙伴,都被Google告知,Android的源代码还没有 完全开放。在今天之前,除了MOTO(还没几个包括HTC),其他的手机制造商已经没有多大兴趣继续在Android 1.6上开发新的产品了,不过现在,一切都不是问题了。

昨晚,就在硅谷的太阳就要落山的时候,Google用了两个小时,把Android 2.0的源代码发布到了AOSP(Android Open Source Project)开源项目中。Android社区马上行动起来,并且成功得把它移植到了最老的一款Android手机T-Mobile G1上面。

看见上面的这张截屏图片了吧,看起来并没有什么特别的。但我告诉你,这可是全球第一张G1上面的Android 2.0的屏幕截图哟!

全球知名的Android系统Hacker,Cyanogen在第一时间开始做Android 2.0的移植工作,并通过twitter来随时告诉大家当前进展。从Cyanogen发布的图片来看,3G、Gmail、屏保锁都已经成功地运行起来。 Cyanogen表示,一切都运行得“真的很好,速度很快,很流畅”。

现在,唯一的遗憾就是,声音和视频的回放还有一点问题。不过考虑到他们的移植工作也仅仅刚刚开展几个小时而已,所以不必担心,相信不久这将不会成为一个问题。

我相信,用不了几天,他们就会向全世界公布新的ROM和刷机教程,但这总比等官方的补丁更现实。
继续阅读

google-iso-developers-for-app2sd
你的Google Android手机里的应用是否无法安装到SD卡上呢,你是否要通过手动App2sd或者分区刷机的方式来实现将软件装到SD卡上了。

“Google Android开发组已经计划通过各种方法来让Android支持apps to sd。现在已经有一些Google工程师已经开始着手做这件事了,目前已在进行初步测试。

感兴趣的同学点此跳转:http://groups.google.com/group/android-platform/browse_thread/thread/bf0709c157451cd9

如果能够顺利实施,将会有以下功能:
1)完全是过时的,现在的黑客实现的apps2d能把卡从机子里取出。
2)最终推送的原版系统(当状态处于易用,稳定,至少安装在内置内存对非越狱用户是比较安全的)。
3)应用程序数据在相同的设备上,并且没有任何副作用(如已安装程序被破坏即可等待第二分区重新挂载)。
4)允许同一设备多个SD卡交换应用程序。
5)可以使装载过应用程序的SD卡在不同的android设备之间交换使用。
注:4和5尚未开始实施,然后与其他功能的提高。 4和5暂不列入AOSP计划,但他们最终会实现很酷的功能。

继续阅读

[UPDATED 7/26 - v1.4] Pimped out recovery image with new features

——————————————————————————–

I did some work with JF’s recovery image, merged stuff from AOSP 1.5r3, patches from others, and added some of my own stuff.

This recovery image contains:

* Nandroid 2.2 with RESTORE!
* E2FSProgs with ext4 support
* GNU Parted (command line version)
* FSCK for ext filesystems from the menu
* Various scripts, upgrade_fs (convert to ext3), fix_permissions (set app and data permissions to what packages.xml expects)
* Kernel from CyanogenMod-3.9

继续阅读

【Android 开发者】Android

下载地址
http://c4software.another-team.com/I7500/
兴趣的人研究用。
附原twitter消息
c4software: @cyanogen @cyrowski @HeartBreakDrake @haykuro Samsung Galaxy/I7500 : Recovery + system + kernel => extracted. Any idea to root/modify it ?

【Android 开发者】Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。

根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:
第一、操作系统层(OS)
第二、各种库(Libraries)和Android 运行环境(RunTime)
第三、应用程序框架(Application Framework)
第四、应用程序(Application)
以下分别介绍Andoid各个层次的软件的重点及其相关技术:

● 操作系统层(OS)
Android使用Linux2.6作为操作系统,Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。主要的驱动如下所示:
显示驱动(Display Driver):常用基于Linux的帧缓冲(Frame Buffer)驱动。
Flash内存驱动(Flash Memory Driver)
照相机驱动(Camera Driver):常用基于Linux的v4l(Video for )驱动。
音频驱动(Audio Driver):常用基于ALSA(Advanced Linux Sound Architecture,高级Linux声音体系)驱动。
WiFi驱动(Camera Driver):基于IEEE 802.11标准的驱动程序
键盘驱动(KeyBoard Driver)
蓝牙驱动(Bluetooth Driver)
Binder IPC驱动: Andoid一个特殊的驱动程序,具有单独的设备节点,提供进程间通讯的功能。
Power Management(能源管理)

● 各种库(Libraries)和Android 运行环境(RunTime)
本层次对应一般嵌入式系统,相当于中间件层次。Android的本层次分成两个部分一个是各种库,另一个是Android 运行环境。本层的内容
大多是使用C++实现的。
在其中,各种库包括:
▅ C库 :C语言的标准库,这也是系统中一个最为底层的库,C库是通过Linux的系统调用来实现。
▅ 多媒体框架(MediaFrameword):这部分内容是Android多媒体的核心部分,基于PacketVideo(即PV)的OpenCORE,从功能上本库一共
分为两大部分,一个部分是音频、视频的回放(PlayBack),另一部分是则是音视频的纪录(Recorder)。
▅ SGL:2D图像引擎。
▅ SSL:即Secure Socket Layer位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
▅ OpenGL ES 1.0 :本部分提供了对3D的支持。
▅ 界面管理工具(Surface Management):本部分提供了对管理显示子系统等功能。
▅ SQLite:一个通用的嵌入式数据库
▅ WebKit:网络浏览器的核心
▅ FreeType:位图和矢量字体的功能。
Android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特点就是与移动设备的平台的应用密切相关。

Android 运行环境主要指的虚拟机技术——Dalvik。Dalvik虚拟机和一般JAVA虚拟机(Java VM)不同,它执行的不是JAVA标准的字节码(bytecode )而是Dalvik可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。 二者最大的区别在于Java VM是以基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。

● 应用程序框架(Application Framework)
Android的应用程序框架为应用程序层的开发者提供APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以JAVA构建的,因此本
层次提供的首先包含了UI程序中所需要的各种控件:
例如: Views (视图组件)包括 lists(列表), grids(栅格), text boxes(文本框), buttons(按钮)等。甚至一个嵌入式的Web浏览器。
一个Andoid的应用程序可以利用应用程序框架中的以下几个部分:
Activity (活动)
Broadcast Intent Receiver (广播意图接收者)
Service (服务)
Content Provider (内容提供者)

● 应用程序(Application)
Android的应用程序主要是用户界面(User Interface)方面的,通常以JAVA程序编写,其中还可以包含各种资源文件(放置在res目录中)JAVA程序及相关资源经过编译后,将生成一个APK包。Android本身提供了主屏幕(Home),联系人(Contact),电话(Phone),浏览器(Browers)等众多的核心应用。同时应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。这也是Android开源的巨大潜力的体现。

【Android 开发者】

第三部分 PVAuthor的架构

PVAuthor是基于OpenCore的AuthorEngine的Android实现, 代码在以下路径中:
external/opencore/android/author/
它实现的接口类是PVMediaRecorder.h,这个类基本上是一个封装,它需要处理三个方面的内容:
音频的输入环节(Audio Input)
视频的输入(Camera)
视频的预览(使用ISurface)

其中实现PVMediaRecorder.h的类是PVMediaRecorder.cpp,authordriver.h和authordriver.cpp是具体实现,android_audio_input.*和android_camera_input.*是两个PvmiMIOControl的实现,PvmiMIOControl最终会构建成一个Node.。它们是Active Source类型的Node,因此它们需要实现PvmiMediaTransfer::writeComplete()函数。
在AndroidCameraInput内部会建立一个Camera(可以不使用从外部得到的方式);AndroidCameraInput::SetPreviewSurface的函数用于得到一个外部的ISurface,这个Surface将被设置到Camera中,作为Camera的预览。
android_audio_input.*是作为音频输入的实现,它基于Android的Audio系统构建,主要使用media/AudioRecord.h接口。

第四部分 Android MediaRecorder和Camera的关系

从功能的角度MediaRecorder一般包含音频,视频记录,视频预览的功能,Camera包含了取景区预览,静态图像捕获的功能。
在Android中,应用程序自上而下分成JAVA应用,JAVA框架,JNI,C框架,具体实现几个部分。多媒体方面的程序尤其是这样。MediaRecorder和Camera在Android中都有自上而下的架构,它们在顶层JAVA应用层,共用一个应用程序Camera(其中的程序也是独立的),在JAVA框架和JNI层是独立的,主要的联系在于Camer的C框架以下的内容被MediaRecorder实现(也就是PVAuthor)所调用,作为MediaRecorder实现的视频输入设备,它的作用是负责传输视频数据和提供显示预览。本身Camera C框架以下的代码基本提供了取景器预览(Preview)、视频数据流获取、静止图像获取三方面的功能,MediaRecorder实现使用其取景器预览和视频数据流获取的功能,而Camera的JNI使用其取景器预览和静止图像获取两方面的功能。

【Android 开发者】

Android的MediaRecorder架构介绍(三、四)

MediaRecorder的各个可以用下图的表示:

MediaRecorder部分的头文件在frameworks/base/include/media/目录中,这个目录是和libmedia.so库源文件的目录frameworks/base/media/libmedia/相对应的。主要的头文件有以下几个:

■mediarecorder.h :mediarecorder的上层接口

■IMediaRecorder.h:MediaRecorder的服务部分实现接口

■PVMediaRecorder.h :MediaRecorder的下层接口,由OpenCore实现

在这些头文件MediaRecorder.h提供了对上层的接口,而其他的几个头文件都是提供一些接口类(即包含了纯虚函数的类),这些接口类必须被实现类继承才能够使用。

整个MediaRecorder库和调用的关系如下图所示:

整个MediaRecorder在运行的时候,可以大致上分成Client和Server两个部分,它们分别在两个进程中运行,它们之间使用Binder机制实现IPC通讯。

注意MediaRecorder中不需要使用callback,这点和MediaPlayer的架构有一定的区别,因此并不需要一个MediaRecorderClient的类。

MediaRecorder C语言上层的接口在mediarecorder.h 中,定义一个MediaRecorder类:

class MediaRecorder
{
public:
MediaRecorder();
~MediaRecorder();
status_tinitCheck();
status_tsetCamera(const sp& camera);
status_tsetPreviewSurface(const sp& surface);
status_tsetVideoSource(int vs);
status_tsetAudioSource(int as);
status_tsetOutputFormat(int of);
status_tsetVideoEncoder(int ve);
status_tsetAudioEncoder(int ae);
status_tsetOutputFile(const char* path);
status_tsetVideoSize(int width, int height);
status_tsetVideoFrameRate(int frames_per_second);
status_tprepare();
status_tgetMaxAmplitude(int* max);
status_tstart();
status_tstop();
status_treset();
status_tinit();
status_tclose();
status_trelease();
};
复制代码

在meidarecorder的上层接口中,基本不涉及数据流的处理,但是需要设置两个重要的部分,一个是输入的设备ICamera,另一个是ICamera的预览(preview)Surface:

status_tsetCamera(const sp& camera);
status_tsetPreviewSurface(const sp& surface);
复制代码

这两个类需要通过上层的接口设置,其中设置的Surface在下层的处理中也会被设置到ICamera的接口中,ICamera则作为这种meidarecorder视频输入的设备,在meidarecorder底层的实现中,通过这个Icamera获取视频流。
prepare(),start(),stop()和reset()等几个函数用于设置控制媒体记录的运行。
另外的几个接口用于设置音频、视频的输入和格式,输出的格式。

【Android 开发者】

第一部分 MediaRecorder概述

Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。

MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。

以开源的Android为例MediaRecorder的代码主要在以下的目录中:
JAVA程序的路径:
packages/apps/Camera/src/com/android/camera/VideoCamera.java

JAVA Framework的路径:
frameworks/base/media/java/android/media/MediaRecorder.java

JAVA本地调用部分(JNI):
frameworks/base/media/jni/android_media_MediaRecorder.cpp
这部分内容编译成为目标是libmedia_jni.so。

主要的头文件在以下的目录中:
frameworks/base/include/media/

多媒体底层库在以下的目录中:
frameworks/base/media/libmedia/
这部分的内容被编译成库libmedia.so。

多媒体服务部分:
frameworks/base/media/libmediaplayerservice/
MediaRecorder和MeidaPlayer使用相同的服务。

基于OpenCore部分
external/opencore/android/author
这部分内容被编译成库libopencoreauthor.so。

【Android 开发者】

Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中。out文件夹如下所示:

out/
|– CaseCheck.txt
|– casecheck.txt
|– host
| |– common
| `– linux-x86
`– target
|– common
`– product

主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容。

host目录的结构如下所示:
out/host/
|– common
| `– obj(JAVA库)
`– linux-x86
|– bin(二进制程序)
|– framework(JAVA库,*.jar文件)
|– lib(共享库*.so)
`– obj(中间生成的目标文件)
host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。

target目录的结构如下所示:
out/target/
|– common
| |– R (资源文件)
| |– docs
| `– obj (目标文件)
`– product
`– generic
其中common目录表示通用的内容,product中则是针对产品的内容。
在common目录的obj中,包含两个重要的目录:
APPS中包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应用程序的原始文件生成Android应用程序的APK包。
JAVA_LIBRARIES中包含了JAVA的库,每个库对应其中一个子目录。

在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生成其他的目录。generic包含了以下内容:
out/target/product/generic/
|– android-info.txt
|– clean_steps.mk
|– data
|– obj
|– ramdisk.img
|– root
|– symbols
|– system
|– system.img
|– userdata-qemu.img
`– userdata.img

在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。
system目录是主要的文件系统,data目录是存放数据的文件系统。
obj/SHARED_LIBRARIES中存放所有动态库。
obj/STATIC_LIBRARIES中存放所有静态库。
几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像。这几个image文件是运行时真正需要的文件。