您的位置:首页 > 移动开发 > Android开发

Android平台下驱动的开发及测试框架概述(五)

2014-08-15 22:50 330 查看
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:

   

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平台下驱动的开发及测试框架概述已经介绍完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息