介绍
应用程序或者系统框架中可以通过getPackageManager().hasSystemFeature(String string)判断系统是否支持特定的模块功能,而运行不同的代码逻辑分支。比如可以通过getPackageManager().hasSystemFeature("android.hardware.bluetooth")判断系统是否支持蓝牙。当我们定制系统的时候,需要在Android系统需要对系统提供的Feature进行裁剪和自定义,那么如何去进行裁剪和自定呢?这是本文要讨论的主题。
Feature实现原理
参考https://blog.csdn.net/u013398960/article/details/78582096
添加自定义Feature方法1
从Feature实现原理知道,系统Feature定义在frameworks/native/data/etc目录下,这下面的xml文件会被打包拷贝到镜像system/etc/permissions目录下。所以要自定义Feature,最简单的方法就是在frameworks/native/data/etc添加自定义的xml文件,xml文件内容格式参照:
|
添加自定义Feature方法2
如果出于独立管理或者解耦的原因,并不想在frameworks/native/data/etc目录下添加文件,提供第二种自定义Feature的方法:
- 在aosp根目录下新建自己的git仓库目录,在新建的仓库目录下添加自定义Feature的xml文件,格式和添加自定义Feature方法1中讲的一样;
-
在自定的仓库目录下新建device.mk,device.mk文件添加内容示例内容,编译时将自定义feature文件打包到镜像目录中:
PRODUCT_COPY_FILES += mydir/com.
new
.feature.xml:system/etc/permissions/com.
new
.feature.xml
- 以高通为例,在device/qcom/common/base.mk文件中加入#include "mydir/device.mk"文件;
- 重新编译系统