介绍

        应用程序或者系统框架中可以通过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文件内容格式参照:

<?xml version="1.0" encoding="utf-8"?>

<permissions>

    <feature name="android.hardware.bluetooth" />

permissions>

添加自定义Feature方法2

       如果出于独立管理或者解耦的原因,并不想在frameworks/native/data/etc目录下添加文件,提供第二种自定义Feature的方法:

  1. 在aosp根目录下新建自己的git仓库目录,在新建的仓库目录下添加自定义Feature的xml文件,格式和添加自定义Feature方法1中讲的一样;
  2. 在自定的仓库目录下新建device.mk,device.mk文件添加内容示例内容,编译时将自定义feature文件打包到镜像目录中:

    PRODUCT_COPY_FILES += mydir/com.new.feature.xml:system/etc/permissions/com.new.feature.xml

  3. 以高通为例,在device/qcom/common/base.mk文件中加入#include "mydir/device.mk"文件;
  4. 重新编译系统

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影
  6. android获取view宽高的几种方法
  7. Flutter 启动页
  8. [经验总结]eclipse转向android studio常见问题汇总
  9. ------------------Android中对GridView, ListView等滚动控件的To

随机推荐

  1. Spring JdbcTemplate 批量插入或更新操作
  2. 多表连接查询
  3. C#使用SqlBulkCopy将DataTable写入数据库
  4. 找到另一个列至少有两个不同值的id
  5. 一条牛B的SQL抵了我300多行的程序代码
  6. hibernate查询不出结果,sql已打印,请指教
  7. 又要请教在SQL中建表时的表名不能用纯数
  8. C# 往SQL数据库插入listbox的值
  9. mysql获取自增id最大值四种方法
  10. 超时时间已到.错误及Max Pool Size设置