为Android扩展一个硬件模块需要做两件事:
1、硬件和内核支持。
2、/system/etc/permissions/下面添加xml配置文件。/framework/base/data/etc/下面有一些已经写好的,可以根据需要直接复制过去。
这样,通过PackageManager的hasSystemFeature或getSystemAvailableFeatures就可以确定系统是否支持哪个模块,然后使用对应API了。
XML配置文件不管有多少,它们的语法是一样的,完全可以把它们放进一个XML文件里面。
每一个XML文件必须要有一个顶级标签<permissions>,至于子标签,可以支持这么几种:
group,安装到系统中的所有APK都具备的组ID。
permission,可以指定一个权限与几个组ID对应。当一个APK被授予这个权限时,它也同时属于这几个组了。
assign-permission,把一个权限赋予一个UID,当进程使用这个UID运行时,就具备了这个权限。
library,为系统添加一些扩展库用的。对应的.jar文件放在/system/framework/目录下。比如Google Map相关的库,可以看看下面的参考文章。
feature,每添加一个硬件,都要增加对应的feature。
对这些XML文件的解析是由/framework/base/services/java/com/android/server/PackageManagerService.java中的readPermissions()负责的。解析时会先解析其它XML文件,最后解析platform.xml。
解析结果放入mSystemPermissions,mSharedLibraries,mSettings.mPermissions,mAvailableFeatures等几个集合中供系统查询和权限配置使用。
举两个例子
多点触摸:
硬件和内核支持以后
/system/etc/permission下面几个xml文件,可以看一下/framework/base/data/android.hardware.multitouch.*几个文件,根据支持的功能选择添加。
Google地图的支持
这个不需要硬件的支持,但需要先添加Google Map的库,然后再向/system/etc/permissions/下面添加相应的xml文件。具体过程可以看看下面参考文章。
像重力加速、多点触摸、WIFI等,只要系统支持,就要往/system/etc/permissions/下面添加对应的XML配置文件。因为APK使用这些功能之前很有可能先调用PackageManager.hasSystemFeature查询是否支持这个某个硬件模块。
/framework/base/data/etc/handheld_core_hardware.xml里面包含了一些系统的核心硬件模块配置文件。/framework/base/data/etc/Android.mk中会把这一块儿在编译时复制到/system/etc/permissions/目录下。这部分代码默认是关闭的,需要打开。
参考文章:
为Android添加Market和Map应用程序
http://blog.csdn.net/a345017062/archive/2011/05/27/6450205.aspx
0 件のコメント:
コメントを投稿