編輯:關於Android編程
Android下,java應用程序通過JNI方法調用硬件抽象層模塊,在Android 從硬件到應用:一步一步向上爬 3 -- 硬件抽象層訪問硬件驅動
中我們已經編譯好了硬件抽象層模塊,下面就要開始為HAL層編寫JNI方法,為上層提供服務。
cd到frameworks/base/services/jni目錄中,新建一個com_android_server_GpioService.cpp文件:
#include "jni.h" #include "JNIHelp.h" #include "android_runtime/AndroidRuntime.h" #include其中ANDROID_GPIO_HARDWARE_MODULE_ID是在hardware/android_gpio.h中定義的,初始化時通過hw_get_module方法加載硬件層模塊。 修改當前目錄下的onload.cpp:#include #include #include #include namespace android { struct android_gpio_device_t* android_gpio_device = NULL; static void android_gpio_setVal(JNIEnv* env, jobject clazz, jint value) { int val = value; android_gpio_device->set_val(android_gpio_device, val); } static jint android_gpio_getVal(JNIEnv* env, jobject clazz) { return 0; } static inline int android_gpio_device_open(const hw_module_t* module, struct android_gpio_device_t** device) { return module->methods->open(module, ANDROID_GPIO_HARDWARE_MODULE_ID, (struct hw_device_t**)device); } static jboolean android_gpio_init(JNIEnv* env, jclass clazz) { android_gpio_module_t* module; if(hw_get_module(ANDROID_GPIO_HARDWARE_MODULE_ID, (const struct hw_module_t**)&module) == 0) { if(android_gpio_device_open(&(module->common), &android_gpio_device) == 0) { return 0; } return -1; } return -1; } static const JNINativeMethod method_table[] = { {"init_native", "()Z", (void*)android_gpio_init}, {"setVal_native", "(I)V", (void*)android_gpio_setVal}, {"getVal_native", "()I", (void*)android_gpio_getVal}, }; int register_android_server_GpioService(JNIEnv *env) { return jniRegisterNativeMethods(env, "com/android/server/GpioService", method_table, NELEM(method_table)); } };
在namespace android中加入函數聲明:
int register_android_server_GpioService(JNIEnv* env);在JNI_Onload中加入函數調用:
register_android_server_GpioService(env);修改frameworks/base/core/jni下的AndroidRuntime.cpp,在namespace android中加入聲明:
extern int register_android_server_GpioService(JNIEnv* env);
修改當前目錄下的Android.mk文件:
在LOCAL_SRC_FILES加入:
com_android_server_GpioService.cpp \編譯JNI方法:
mmm frameworks/base/services/jni如果提示缺少libandroid_runtime.so、libsystem_server.so、libandroid_servers.so,執行:
make libandroid_runtime
make libsystem_server
make libandroid_serversJNI方法編譯完成後,就可以通過android硬件服務GpioService來調用JNI方法,以此來調用硬件抽象層訪問底層硬件。
前言我們所熟知的,Android 的圖形繪制主要是基於 View 這個類實現。 每個 View 的繪制都需要經過 onMeasure、onLayout、onDraw 三步
一、廣播發送者&廣播接收者介紹1.廣播接收者廣播接收者簡單地說就是接收廣播意圖的Java類,此Java類繼承BroadcastReceiver類,重寫:public vo
本文實例講述了Android實現仿淘寶購物車增加和減少商品數量功能。分享給大家供大家參考,具體如下:在前面一篇《Android實現的仿淘寶購物車demo示例》中,小編簡單
最近需要實現一個手機通訊錄的快速索引功能。根據姓名首字母快速索引功能。下面是一個手機聯系人快速索引的效果,總體來說代碼不算難,拼音轉換的地方略有復雜。下面上源碼:源碼中有