安卓原始代码中的串口SerialPort SerialManger SerialService  ISerialService.aidl 等都是@hide隐藏的,外部应用无法调用,定制需要,所以将该Manager启用。下面记录下过程

1.启用SerialService

其掉这三个文件中的@hide标识:

    frameworks/base/core/java/android/hardware/SerialManager.java

    frameworks/base/core/java/android/hardware/SerialPort.java

    frameworks/base/core/java/android/hardware/ISerialManager.aidl

    

SerialService文件位置:

    frameworks/base/services/java/com/android/server/SerialService.java

    该服务会在SystemSever.java中进行初始化,这里还需要将Context.java中的SERIAL_SERVICE的@hide去掉:

    frameworks/base/core/java/android/content/Context.java

-    /*
-     * @hide
-     */
     public static final String SERIAL_SERVICE = "serial";

还有,   SerialService是通过读取R.array.config_serialPorts这个String array来加载的/dev/设备节点:

   public SerialService(Context context) {
        mContext = context;
        mSerialPorts = context.getResources().getStringArray(
                com.android.internal.R.array.config_serialPorts);
    }

所以还需要添加下,文件位置:

framework/base/core/res/res/values/config.xml

在config_serialPorts中添加相应设备节点

   
   

           "/dev/ttyS0"                     
   


在使用时应用需要添加uses-permission权限 android.permission.SERIAL_PORT ;

2.安卓提供了个测试工具,在framework/base/tests/SerialChat, 可以进入该目录, 输入mm 进行编译,输出在 out/target/product/xxx/data/app/中,可以push到手机里验证。

3.权限授权问题,  我在测试这个SerialChat程序时发现android.permission.SERIAL_PORT并未被授权, 通过pm.checkPermission("android.permission.SERIAL_PORT", pinfo.packageName) 检查可以看到。

查看frameworks/base/core/res/AndroidManifest.xml中发现,该permission定义如下:

   
            android:label="@string/permlab_serialPort"
        android:description="@string/permdesc_serialPort"
        android:protectionLevel="signature|system" />

可以看到protectionLevel是signature|systeml; 

signature表示当申请此权限的应用程序的签名与声明此权限的应用的签名相同时才会授权, 该应用是framwork-res.apk,使用的签名是platform,所以需要应用也要使用platform签名。

system表示是系统应用;

所以这里修改Android.mk,添加LOCAL_CERTIFICATE := platform 再重新编译

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := tests
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := SerialChat
include $(BUILD_PACKAGE)

更多相关文章

  1. Android(安卓)Studio中如何查看获取MD5和SHA1值(应用签名)
  2. Litepal的简单使用
  3. Android(安卓)6.0 权限申请源码解析
  4. ViewRoot/ViewRootImpl分析
  5. react-native Android打包APK
  6. Android工具类ImgUtil选择相机和系统相册
  7. Android(安卓)Studio 如何快速添加override或者implements方法
  8. android studio 6.0以上动态申请权限的代码
  9. framework中自定义系统级权限

随机推荐

  1. mysql 8.0.12 解压版安装教程 个人亲测!
  2. 详解MySQL双活同步复制四种解决方案
  3. mysql installer community 8.0.12.0安装
  4. mysql 8.0.12 安装配置方法图文教程(windo
  5. mysql 8.0.11 安装步骤详解
  6. mysql 8.0.12 简单安装教程
  7. mysql 8.0.12 安装使用教程
  8. mysql 8.0.12 快速安装教程
  9. 彻底卸载mysql 个人亲测!
  10. Windows10下mysql 8.0.12解压版安装配置