framework添加自己的服务

来源:互联网 发布:易建联篮网数据 编辑:程序博客网 时间:2024/05/22 07:50

http://www.360doc.com/content/12/0719/19/87000_225297295.shtml 借鉴

1  frameworks/base/core/java/android/os 中添加Ismackserviec.aidl 

package android.os;interface Ismackservice{    boolean seton();}


2 修改/frameworks/base/Android.mk 添加     core/java/android/os/Ismackservice.aidl ,使其得到编译

3 frameworks/base/services/java/com/android/server 中添加smack_service.java

package com.android.server;import android.content.Context;import android.os.Ismackservice;import java.io.IOException;import android.util.Log;import java.io.BufferedReader;import java.io.InputStreamReader;public final class smack_service extends Ismackservice.Stub{        public static final String TAG = "smack_service";        smack_service(Context context){                Log.i(TAG,"GET smack_service_stub");        }        public boolean set_net_on(){                Log.i(TAG,"set net on");                 set_net_on_jni();/*                 String s = "\n";                  try{                                 Process p =Runtime.getRuntime().exec("echo ^ > /smack/ambient");                                 BufferedReader in = new BufferedReader(                           new InputStreamReader(p.getErrorStream()));       String line = null;       while ((line = in.readLine()) != null) {           s += line + "\n";                  }       Log.i(TAG,s);                                                                  }                                 catch (IOException e) {                                        // TODO Auto-generated catch block                                                        e.printStackTrace();                                }*/                return true;        }            public boolean set_net_off(){                Log.i(TAG,"set net off");            set_net_off_jni();                return true;        }     private static native void set_net_on_jni();     private static native void set_net_off_jni();}



4 修改frameworks/base/services/java/com/android/server/SystemServer.java 注册smack_service

             Slog.i(TAG, "smack_service");
             ServiceManager.addService(Context.SMACK_SERVICE,new smack_service(context));

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

public static final String SMACK_SERVICE = "smack";//xiayu fix



5 make_updata-api     mmm framework/base/services/java     m

6 编写测试apk , 在eclipse中,右键-》Buid Path->Configure Build Path->Libraries->Add External Jars

    out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar



自己编的jni

#include "jni.h"#include "JNIHelp.h"#include "android_runtime/AndroidRuntime.h"#include <utils/misc.h>#include <utils/Log.h>#include <fcntl.h>#include <errno.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <sys/time.h>#include <time.h>#include <errno.h>#include <string.h>#include <sys/stat.h>#include <sys/types.h>#include <dirent.h>#include <hardware/smack.h>#define LOG_TAG "smack_service-JNI"namespace android{static inline int smack_control_open(const struct hw_module_t* module,        struct smack_control_device_t** device) {    return module->methods->open(module,            SMACK_HARDWARE_MODULE_ID, (struct hw_device_t**)device);}static void set_net_on_jni(JNIEnv *env, jobject clazz){ smack_module_t* module;struct smack_control_device_t *smackDevice;      LOGE("xiayu set_net_on jni\n");    if (hw_get_module(SMACK_HARDWARE_MODULE_ID, (const hw_module_t**)&module) == 0) {        LOGI("SMACKService JNI: SMACK Stub found.");        if (smack_control_open(&module->common, &smackDevice) == 0) {            LOGI("LedService JNI: Got Stub operations.");        }    }      char *st="hao";      char buf[10];       int fd3=open("/sys/power/wake_lock",O_RDWR);          LOGE("xiayu open   wrong error fd3 =%d ,errno =%d",fd3, errno);    int tt= write(fd3,st,3);          LOGE("xiayu write   wrong error  =%d uid=%d pid=%d tt=%d",errno,getuid(),getpid(),tt);    int yy=read(fd3,buf,3);          LOGE("xiayu read error=%d  buf[]=%c yy=%d",errno,buf[0],yy);     close(fd3);       smackDevice->set_net_on(smackDevice, 2);}static void set_net_off_jni(JNIEnv *env, jobject clazz){LOGE("xiayu set_net_off jni\n");       int fd = open("/smack", O_WRONLY);     if(fd<0){          LOGE("xiayu off wrong error=%d",errno);          //perror("xiayu");       }}static JNINativeMethod method_table[] = {    { "set_net_on_jni", "()V", (void*)set_net_on_jni },    { "set_net_off_jni", "()V", (void*)set_net_off_jni },};int register_android_server_smack_service(JNIEnv *env){    return jniRegisterNativeMethods(env, "com/android/server/smack_service",            method_table, NELEM(method_table));}}







原创粉丝点击