ACD系列翻译之一

本文档的原名是AndroidCompatibilityDefinition,以下简称ACD。以下对文档的重点进行了翻译,省略了一些图表和细节规范。如果想大致了解ACD的话,可以浏览该文档,但具体进行某一项CTS的时候,请参考原文档。


3 软件

Android平台包含了一个managedAPI集合,一个nativeAPI集合,还有一个softAPI集合(Intentsystemweb-applicationAPI)。这一章详细地说说兼容性要求的硬件参数、软件API及相关技术,还有UI行为。想符合兼容性标准,必须满足所有这些要求。

3.1 Managed API兼容

Android 应用程序运行在一个Managedenvironment中,也就是一个基于DalvikVm的运行时环境。Android平台API是指平台向APP开放的基于DalvikVmAPI。必须提供这些API的完整实现,包括API文档中描述的所有API功能。

绝不能删除任何ManagedAPI,修改API接口或签名,改变API功能等,ACD特殊规定的API除外。

ACD允许一些针对特定硬件的API功能不被实现,但这些API必须存在,并且以合理的方法响应APP

3.2 Soft API

AndroidIntent,permissionAndroid应用程序在编译时不能确定的这些SoftAPI兼容性进行了规定。设备必须满足本章提到的所有要求。

3.2.1 Permissions

设备必须支持SDK开发文档中提到所有permission。在第10章中列出了满足Android安全模型需要满足的附加条件。

3.2.2Build Parameters

Androidandroid.os.Build类中包含了一些常是用来描述设备的编译属性。为保持兼容性,下面这些属性必须被支持。


VERSION.RELEASE

当前运行的Android系统的版本,它的值是一个字符串,必须是易读的,且是这里(http://source.android.com/compatibility/2.3/versions.html

)提供的几个值中的一个。


VERSION.SDK

当前运行的Android系统的版本,必须是一个第三方应用程序可读的格式。对Android2.3来说,这个字段必须是整数值9.


VERSION.INCREMENTAL


用来标识特定的编译版本,必须是易读的格式。这个值不能在提供给用户的几个编译版本之间共用。这个字段有一个经典的使用,就是用来标识哪个buildnumber或者source-controlchange identifier

被用来生成这个编译版本。对这个段的格式没有什么要求,但绝不能是null或者””。


BOARD


标识机器使用的硬件。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



BRAND

标识机器所有者(公司、组织或者个人)的名字。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



DEVICE


标识设备的工业设计代号。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



FINGERPRINT

唯一识别这个系统编译版本的字符串,必须是下面这种格式

$(BRAND)/$(PRODUCT)/$(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)


比如:


acme/mydevice/generic/generic:2.3/ERC77/3359:userdebug/test-keys


fingerprint绝对不能包含空格字符。如果模板中包含的哪参数的值有空格,在这里必须被替换成"_"。这个字段必须全部是7-bitASCII


HOST

系统是在哪个host上被编译的?这个字符串就是唯一标识这个host的值。不能为null或者””,其它没要求。


ID

标识一个特定的发布版本。可以和VERSION.INCREMENTAL

相同,但必须让用户可以借助它区分出不同的编译版本。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



MODEL

对用户可见的设备名字。应该和设备在市场上的名字相同。不能为null或者””,其它没要求。


PRODUCT


设备的编号,不必让终端用户觉得它有意义。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



TAGS

comma分隔的标签列表为了更详细地区分系统的编译版本。比如“unsigned,debug”。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



TIME

系统编译时的时间戳。


TYPE

标识该版本的运行时配置。必须是与下面三个值中的其中一个相对应:user,userdebug,eng。这个字段必须全部是7-bitASCII,并且与下面的正则表达式相匹配"^[a-zA-Z0-9.,_-]+$"



USER

编译该系统的作者的名字或者ID。不能是null或者“”,其它没要求。


3.2.3 Intent兼容

这一章介绍一下系统必须安装处理哪些Intent的应用程序。


3.2.3.1核心应用程序Intent

默认的Android系统包含了一些核心的应用程序,比如Phonedialer,calendar,contacts,musicplayer等。可以替换这些程序,但它们所能支持哪些模式的Intent,你也的程序必须支持。下面列出了系统的核心应用程序:

Desk Clock

Browser

Calendar

Calculator

Contacts

Email

Gallery

GlobalSearch

Launcher

Music

Settings


这些核心程序包含了各种Activity,Service组件,这些组件必须都是public的。也就是说,android:exported的值必须是true


3.2.3.2 Intent重写

由于Android是一个可扩展的系统,那么3.2.3.1中提到的Intent都可以被第三方程序替换。你的系统也不能让核心应用程序对这些Intent有特权,或者阻止第三方应用程序处理这些Intent,请把选择权交给用户。

3.2.3.3 Intent Namespace

你的系统不能包含任何可以处理新的IntentpatternAndroid组件,也不要修改或者扩展任何3.2.3.1列出的这些现存的Intentpattern

3.2.3.4Broadcast Intent

第三方应用程序信赖于系统广播告诉它们软件和硬件环境的变化。你的设备也必须可以发送这些广播,SDK文档有这些广播的列表。


3.3 Native API兼容

Managedcode运行在Dalvik中,可以调用APK中包含的.so库提供的NativeAPI。由于本地代码调试信赖于处理器,AndroidNDK中定义了一些ABI,可以看一下docs/CPU_ARCH_ABIS.txt。只要你的设备与其中一个或者多个兼容,你就可以实现NDK兼容性了。

想要你的设备支持一个ABI的话,必须做到这些:

让运行在Managedenvironment中的代码可以通过标准的JNI调用本地代码。

通过android.os.Build.CPU_ABI标识出设备支持最新的ABI。系统预定义的所有ABI列表可以参见docs/CPU_ARCH_ABIS.txt。如果你支持的ABI没有在这个列表中,就不要标识出来了。

包含本地代码的APP必须可以访问下面这些库:

libc (C library)

libm (math library)

Minimal support forC++

JNI interface

liblog (Androidlogging)

libz (Zlibcompression)

libdl (dynamic linker)

libGLESv1_CM.so(OpenGL ES 1.0)

libGLESv2.so (OpenGLES 2.0)

libEGL.so (nativeOpenGL surface management)

libjnigraphics.so

libOpenSLES.so (OpenSound Library audio support)

libandroid.so (nativeAndroid activity support)

Support for OpenGL, asdescribed below


未来的Android版本可能支持更多的ABI。另外,Nativecode兼容很难,尽量使用系统默认的吧。


3.4 Web兼容性

许多应用程序的功能实现严重信赖于android.webkit.WebView,所以,对WebView的实现必须保持兼容性。

3.4.1 WebView兼容性

对整个Webkit引擎的定制不要影响WebView的行为。WebView报告的UA必须是下面的格式:

Mozilla/5.0 (Linux; U;Android $(VERSION); $(LOCALE); $(MODEL) Build/$(BUILD))AppleWebKit/533.1 (KHTML, like


Gecko) Version/4.0 MobileSafari/533.1


$(VERSION)的值必须与android.os.Build.VERSION.RELEASE的值相同。

$(LOCAL)的值应该遵守ISO标准,并指明设备配置的真实locale

$(MODEL)必须与android.os.Build.MODEL的值相同。

$(BUILD)的值必须与android.os.Build.ID的值相同。


WebView应该尽可能多地支持HTML5.至少也应该支持下面的几个特征:

application cache/offlineoperation


<video>标签

geolocation

(几何定位)

另外,你的系统必须支持HTML5/W3Cwebstorage API,最好支持HTML5/W3CindexedDBAPI。另外,WEB开发目前正在由webstorageindexedDB过渡,所以,未来的Android版本中,indexedDB可能变成必须的。

HTML5 APIs,和所有的JSAPI一样,在WebView中必须是默认禁止的,开发者可以手动打开。


3.4.2 Browser兼容性

系统必须包含一个独立的浏览器程序,是否基于WebKit不重要,这个浏览器的UA也可以定制。但是,WebView必须基于WebKit


3.5 API行为兼容

所有的APImanaged,soft,native以及web)的行为都要与原有实现保持一致。有几个地方要注意:

绝对不能修改标准Intent的含义和行为。

绝对不能修改系统组件(Activity,Service,ContentProvider等)的生命周期和生命周期的含义。

绝对不能修改标准权限的含义。

CTS没有对所有方面都进行测试,我们对自己的系统的负责,保证不要发动系统的关键部分。


3.6 API 命名空间

Android使用下面这些包名:

• java.*


• javax.*


• sun.*


• android.*


• com.android.*


为了确保兼容第三方应用程序,你千万不要修改这些包里的东西,下面的地方尤其注意:

你可以修改API的底层实现,但这样的修改不能影响到公共API的行为和签名。

不能向上面这些API中添加任何公共的类、接口、字段或者方法。

你可以向定制系统中添加API,但不能向上面的包或者其它组织的包(比如com.google.*)中添加。正确的做法是将定制的API打包成一个共享库,这样,只有通过<uses-library>标签明确标识要使用这些库的APP才会被这些API带来的附加的内存消耗影响到。


3.7 Virtual Machine兼容

对于把屏幕配置为中等或者低density的设备来说,必须把Dalvik配置为允许每个APP占用至少16MB内存。而把屏幕配置为高或者超高density的设备,被个数值至少是24MB。


3.8 UI兼容

这里包含AppWidget,Notification,Search,Toast,LiveWallpapers等部分,都可以用定制的来替换掉系统中原有的,但都得满足这里的要求:

细节略过。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值