Android平台下驱动的开发及测试框架概述(五)
2014-08-15 22:50
405 查看
Android内置Java应用测试Application Frameworks层硬件服务
在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务呢?接下来,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务。
文件结构:
alps/packages/experimental/Freg
----AndroidManifest.xml
----Android.mk
----src
---Freg.java
----res
---layout
--main.xml
---value
--strings.xml
---drawable
--icon.png
它包含了源代码目录src、资源目录res、配置文件AndroidManifest.xml和一个编译脚本文件Android.mk.下面我们就分别介绍每一个文件的内容.
先看Freg.java:
文件定义了一个Activity组件Freg,它是应用程序Freg的主界面。在Activity组件Freg的界面上,有一个编辑框和三个按钮Read、Write和clear,其中,编辑框用来显示或者输入虚拟硬件设备freg的寄存器val的值;按钮Read和Write分别用来读写虚拟硬件设备freg的寄存器,而按钮Clear用来清空编辑框。
在Activity组件Freg的成员函数onCreate中,第30行通过Service Manager获得一个名为"freg”的服务的binder代理对象接口。而这个服务就对应于运行在系统进程System中的硬件访问服务FregService。因此,第29行就可以安全地将这个binder代理对象接口转换为一个FregService代理对象接口,并且保存在Activity组件Freg的成员变量fragservice中。有了这个FregService代理对象接口之后,应用程序Freg就可以通过调用它的成员函数setVal和getVal来访问虚拟硬件设备freg的寄存器val的值了,如Activity组件Freg的成员函数onClick所示。
main.xml
strings.xml
icon.png
这个是应用程序Freg的文件图标,可以根据需求放置不同的图片文件。
AndroidManifest.xml
Android.mk
下面编译打包:
./mk mm packages/experimental/Freg
./mk snod
打包后得到的Android系统镜像文件system.img就包含了应用程序Freg,然后将生成的system.img下载到手机并开机就可以看见我们的应用程序图标及测试界面。
应用程序Freg启动起来之后,通过点击Read按钮,就可以通过硬件访问服务FregService来读取虚拟硬件设备freg的寄存器val的内容了,而通过在编辑框中输入一个整数值,并且点击Write按钮,就可以通过硬件访问服务FregService将这个整数值写入到虚拟硬件设备freg的寄存器val中了.
至此,Android平台下驱动的开发及测试框架概述已经介绍完毕。
在Android系统增加硬件服务的目的是为了让应用层的APP能够通过Java接口来访问硬件服务。那么, APP如何通过Java接口来访问Application Frameworks层提供的硬件服务呢?接下来,我们将在Android系统的应用层增加一个内置的应用程序,这个内置的应用程序通过ServiceManager接口获取指定的服务,然后通过这个服务来获得硬件服务。
文件结构:
alps/packages/experimental/Freg
----AndroidManifest.xml
----Android.mk
----src
---Freg.java
----res
---layout
--main.xml
---value
--strings.xml
---drawable
--icon.png
它包含了源代码目录src、资源目录res、配置文件AndroidManifest.xml和一个编译脚本文件Android.mk.下面我们就分别介绍每一个文件的内容.
先看Freg.java:
package shy.luo.freg; import android.app.Activity; import android.os.ServiceManager; import android.os.Bundle; import android.os.IFregService; import android.os.RemoteException; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import and 4000 roid.widget.EditText; public class Freg extends Activity implements OnClickListener { private final static String LOG_TAG = "shy.luo.freg.FregActivity"; private IFregService fregService = null; private EditText valueText = null; private Button readButton = null; private Button writeButton = null; private Button clearButton = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fregService = IFregService.Stub.asInterface( ServiceManager.getService("freg")); valueText = (EditText)findViewById(R.id.edit_value); readButton = (Button)findViewById(R.id.button_read); writeButton = (Button)findViewById(R.id.button_write); clearButton = (Button)findViewById(R.id.button_clear); readButton.setOnClickListener(this); writeButton.setOnClickListener(this); clearButton.setOnClickListener(this); Log.i(LOG_TAG, "Freg Activity Created"); } @Override public void onClick(View v) { if(v.equals(readButton)) { try { int val = fregService.getVal(); String text = String.valueOf(val); valueText.setText(text); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while reading value from freg service."); } } else if(v.equals(writeButton)) { try { String text = valueText.getText().toString(); int val = Integer.parseInt(text); fregService.setVal(val); } catch (RemoteException e) { Log.e(LOG_TAG, "Remote Exception while writing value to freg service."); } } else if(v.equals(clearButton)) { String text = ""; valueText.setText(text); } } }
文件定义了一个Activity组件Freg,它是应用程序Freg的主界面。在Activity组件Freg的界面上,有一个编辑框和三个按钮Read、Write和clear,其中,编辑框用来显示或者输入虚拟硬件设备freg的寄存器val的值;按钮Read和Write分别用来读写虚拟硬件设备freg的寄存器,而按钮Clear用来清空编辑框。
在Activity组件Freg的成员函数onCreate中,第30行通过Service Manager获得一个名为"freg”的服务的binder代理对象接口。而这个服务就对应于运行在系统进程System中的硬件访问服务FregService。因此,第29行就可以安全地将这个binder代理对象接口转换为一个FregService代理对象接口,并且保存在Activity组件Freg的成员变量fragservice中。有了这个FregService代理对象接口之后,应用程序Freg就可以通过调用它的成员函数setVal和getVal来访问虚拟硬件设备freg的寄存器val的值了,如Activity组件Freg的成员函数onClick所示。
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/value"> </TextView> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/edit_value" android:hint="@string/hint"> </EditText> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center"> <Button android:id="@+id/button_read" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/read"> </Button> <Button android:id="@+id/button_write" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/write"> </Button> <Button android:id="@+id/button_clear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/clear"> </Button> </LinearLayout> </LinearLayout>这个是应用程序Freg的主界面配置文件,在屏幕中显示一个TextView控件和三个Button控件。
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Freg</string> <string name="value">Value</string> <string name="hint">Please input a value...</string> <string name="read">Read</string> <string name="write">Write</string> <string name="clear">Clear</string> </resources>这个是应用程序Freg的字符串资源文件,定义了在应用程序中使用到的各个字符串。
icon.png
这个是应用程序Freg的文件图标,可以根据需求放置不同的图片文件。
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="shy.luo.freg" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".Freg" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>这是应用程序Freg的配置文件,由于应用程序Freg定义了一个Activity组件Freg,因此,要在这个配置文件中对它进行配置。
Android.mk
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := Freg include $(BUILD_PACKAGE)上面的android.mk指定程序的名称为“Freg”.
下面编译打包:
./mk mm packages/experimental/Freg
./mk snod
打包后得到的Android系统镜像文件system.img就包含了应用程序Freg,然后将生成的system.img下载到手机并开机就可以看见我们的应用程序图标及测试界面。
应用程序Freg启动起来之后,通过点击Read按钮,就可以通过硬件访问服务FregService来读取虚拟硬件设备freg的寄存器val的内容了,而通过在编辑框中输入一个整数值,并且点击Write按钮,就可以通过硬件访问服务FregService将这个整数值写入到虚拟硬件设备freg的寄存器val中了.
至此,Android平台下驱动的开发及测试框架概述已经介绍完毕。
相关文章推荐
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(一)
- Android平台下驱动的开发及测试框架概述(二)
- Android平台下驱动的开发及测试框架概述(二)