1、前面的例子中App为了能够范问ILedService接口,把classes.jar导入到应用程序中,但是我们不想把classes编进apk包里面去,这样导致我们的apk程序会很大(解压缩apk会发现里面有classes.dex和classes2.dex这两个优化后的包)

因此这里修改编译选项:

在Android studio中

file->Project Structure->点击左边我们的app->点击右边的Dependencies,找到下面的classes,其Scope列表中的值改为Provided

2、app应用程序如何使用反射来访问硬件服务,已之前写的app为例

A、去掉import android.os.ILedService和import android.os.ServiceManager,同时新增import android.os.IBinder

B、在类中新增变量:Object proxy ;Method lec_ctrl

C、去掉iLedService =ILedService.stub.asInterface(ServiceManager.getService("led")); 并使用反射来实现该功能:

  Method getService = Class.forName("android.os.ServiceManager").getMethod("getService",String.class)//getService的第一个参数是获得的方法名字

  Object ledService = getService.invoke(null,"led")//第一个参数应该是实例化对象,但是getService方法是static的,所有不用实例化对象,‘led’就是getService的参数,invoke虽然是调用ledService函数,这个函数返回IBinder对象,但invoke返回的是Object,这个IBinder会向上转化为Object

  //IBinder ledService = (IBinder)getService.invoke(null,"led");//功能同上面一句

  /*到这里为止已经实现了ServiceManager.getService("led")的功能*/

  Method asInterface= Class.forName("android.os.ILedService$Stub").getMethod("asInterface",IBinder.class);//这里的“$”表示子类

  proxy = asInterface.invoke(null,ledService );//asInterface方法返回的是个Proxy对象,代码里面没有声明,所有这里使用父类Object来接收,

  /*这里为止我们实现了iLedService =ILedService.stub.asInterface(ServiceManager.getService("led"));功能*/

  /*下面我们来获得类Proxy里面的led_ctrl函数*/

  lec_ctrl= Class.forName("android.os.ILedService$Stub$Proxy").getMethod("led_ctrl",int.class,int.class);

  /*使用led_ctrl来点灯*/

   lec_ctrl.invoke(proxy ,0,1);

  接着我们就可以在app中使用Proxy类型对象proxy里面的led_ctrl来操作led了//Proxy类在ILedService.java中实现1

D、修改catch异常,去掉以前添加的try...catch...代码,在选中代码后,ctrl+alt+T,选择try catch

在android studio中的log界面也可以设置过滤器,设置Tag为LedHal

6.5 Android硬件访问服务使用反射的更多相关文章

  1. 2.Android硬件访问服务编写系统代码【转】

    本文转载自:https://blog.csdn.net/qq_33443989/article/details/76696772 版权声明:本文为博主(Tower)自学笔记,欢迎转载! :-)     ...

  2. 6.1、Android硬件访问服务之框架

    1.通过前面led点亮的例子,其流程如下 Android app(java)(通过loadLibrary)——>C library(C库做如下事情)——>1.JNI_Onload 2.jn ...

  3. 6.4 Android硬件访问服务编写HAL代码

    JNI向上提供本地函数,向下加载HAL文件,并调用HAL的函数: HAL负责访问驱动程序执行硬件操作 JNI和HAL都是用c语言或者C++语言编写的,JNI加载HAL的实质就是使用dlopen加载动态 ...

  4. 6.2、Android硬件访问服务编写系统代码

    1.实现接口文件给App使用,接口文件是应用程序查询获得服务时获得 使用AIDL(Android接口定义语言)来实现ILedService.java接口 定义ILedService.aidl inte ...

  5. Android硬件访问服务中的HAL-查看打印的信息

    JNI  向上提供本地函数,向下加载HAL文件并调用HAL的函数 HAL 负责访问驱动程序执行硬件操作. external\chromium_org\third_party\hwcplus\src\h ...

  6. 6.3 Android硬件访问服务APP代码

    以下步骤是操作MainActivity类 1.导入包 import android.os.ILedService 2.添加成员变量 private ILedService iLedService = ...

  7. 硬件访问服务学习笔记_WDS

    1.Android驱动框架App1 App2 App3 App4-------------------硬件访问服务-------------------JNI-------------------C库 ...

  8. LED硬件访问服务(2)——JNI/HAL

    一.系统编程 1.SystemServer.java类中提供了main()方法,说明它是以一个进程的方式存在的,启动后直接执行其run() 2.注册服务ServiceManager.addServic ...

  9. 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务(老罗学习笔记5)

    在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系 ...

随机推荐

  1. CHARINDEX,REPLACE,LEFT+四大系统函数+模糊查询

    select CHARINDEX('bob','my name is bob',1)--返回12  bob的第一个b在字符串中排第12(从1开始数) select CEILING(456.4)--45 ...

  2. ES6--基础语法(一)

    一.支持环境:node.js完全支持,标准浏览器完全支持.二.测试环境: chrome下需要在script标签的最先开始的地方需要添加"use strict". firefox下需 ...

  3. JS 在HTML页面显示当前日期

    代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...

  4. 阅读笔记—EL表达式

    表达式语言(EL) 表达式语言是一种在JSP页面中使用的数据访问语言,通过它可以很方便地在JSP页面中访问应用程序数据. 使用EL访问数据 表达式语言的使用形式:              ${exp ...

  5. 00082_Set接口

    1.Set接口介绍 (1)Collection中可以存放重复元素,也可以不存放重复元素,那么我们知道List中是可以存放重复元素的.那么不重复元素给哪里存放呢?那就是Set接口,它里面的集合,所存储的 ...

  6. error c2572重定义默认參数

    因为想省事.在声明过函数之后直接复制粘贴去实现,结果出现error c2572重定义默认參数 顾名思义.该默认參数被定义多次.在一个文件(或一个作用域)中,仅仅能为形參指定默认 实參一次.在编译的时候 ...

  7. UVa 11743 - Credit Check

    题目:推断卡号是否合法,给你4组4位的数字.偶数位的2倍的位和加上奇数位的和,推断尾数是否为0. 分析:简单题,模拟. 直接依照提议推断就可以. 说明:460题,加油! #include <io ...

  8. js获取单选button的值

    <!DOCTYPE html> <html> <body> <script type="text/javascript"> func ...

  9. beego的orm ,用的数据库sqlite3

    测试 beego的orm ,用的数据库sqlite3 1 package main import ( "fmt" "github.com/astaxie/beego/or ...

  10. php 生成文件txt到指定目录

    // 向文件追加写入内容 $site = PHP_EOL.date("Y-m-d H:i:s")."world"; //PHP_EOL换行 // 使用 FILE ...