添加core 服务和app 服务 root 权限执行

1.http://blog.youkuaiyun.com/jinliang_890905/article/details/7320234  关于Android 添加系统级(java)服务和调用的编写实现说明

2.http://blog.youkuaiyun.com/zmyde2010/article/details/6312615    Android: 启动init.rc 中service的权限问题 

3.http://blog.jobbole.com/67931/   Android启动过程深入解析

4.http://quanminchaoren.iteye.com/blog/1549697 为 Android添加底层核心服务

 

5.http://blog.youkuaiyun.com/luoshengyang/article/details/6768304 Android系统进程Zygote启动过程的源代码分析

6.

LOCAL_LDLIBS := -llog  

#include <android/log.h>

#define  LOG_MIX    "gesture"

#define  LOGM(...)  __android_log_print(ANDROID_LOG_INFO,LOG_MIX,__VA_ARGS__)

#define  LOGG(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_MIX,__VA_ARGS__)

LOGG("(%d,%d)", point_x[dx], point_y[dx]);

 

http://blog.youkuaiyun.com/jiangdou88/article/details/42169263 如何让A20,android开机自动启动C程序

 

 

4.4的系统添加java 系统级服务步骤

1./frameworks/base/core/java/android/app

创建ICooeeManagerA.aidl

2.frameworks/base/services/java/com/android/server

创建CooeeServiceA实现cooee.aidl

3./frameworks/base/core/java/android/content/Context.java

添加public static final String COOEESERVICE = "cooeeservice";//常量

4./frameworks/base/core/java/android/app

增加CooeeManagerA.java

5./frameworks/base/core/java/android/app/ContextImpl.java

搜索ServiceFetcher就可以找到注册服务的地方,在静态代码块里进行了服务的注册    static {  registerService(COOEE_SERVICE, new ServiceFetcher() {

                public Object createService(ContextImpl ctx) {

                    IBinder b = ServiceManager.getService(COOEE_SERVICE);

                    ICooeeManagerA service = ICooeeManagerA.Stub.asInterface(b);

                    return new CooeeManagerA(service, ctx);

                }});

        }

(2.3系统的在)getSystemService中的注册else if (ALARM_SERVICE.equals(name)) { return getAlarmManager();}

private AlarmManager getAlarmManager() {

        synchronized (sSync) {

            if (sAlarmManager == null) {

                IBinder b = ServiceManager.getService(ALARM_SERVICE);

                IAlarmManager service = IAlarmManager.Stub.asInterface(b);

                sAlarmManager = new AlarmManager(service);

            }

        }

        return sAlarmManager;

}

6.frameworks /base /services /java /com /android /server /SystemServer.java

ServerThread中将服务添加到ServiceManager中

cooee = new CooeeServiceA(context);

        ServiceManager.addService(Context.COOEE_SERVICE, cooee);

 

7.在/frameworks/base/Android.mk中增加

LOCAL_SRC_FILES += \

core/java/android/app/IDvbService.aidl \

8.编译源码返回到android 源码目录,

//

. build/envsetup.sh

//选择平台 6

lunch

//编译源码 

./build.sh xxx platform xxxx

等带编译完成显示 success ok 就是编译成功

 

4.4的系统添加C 系统级服务步骤

1.frameworks /base /services

创建addservice/addimp 和 addservice/libaddservice

2.在libaddservice 创建AddService.h 和AddService.cpp添加 Android.mk

3.在adddserive目录创建服务进程实现addserver.cpp添加Android.mk

4.编译回到android 根目录

  . build/envsetup.sh

  cd frameworks /base /services/addservice/libaddservice

  执行mm命令进行模块编译会在out/.../.../product/ system//lib 可以找到生成的add.so

  cd frameworks /base /services/addservice/addimp 

  执行mm命令进行模块编译会在out/.../.../product/ system/bin 可以找到生成的add

5.从andorid 根目录进入 /system/core/rootdir/目录中有个  init.rc文件   

 //这里就是一个核心层的服务 与app 层的服务有区别

  service  addservice     /system/bin/addserver    

  class main

  user root

//addservice    就是一个可执行文件,将它以root 启动

 

因为修改了.rc文件在编译的时候需将原本在out/.../.../product/ system.img 删除再重新编译

编译源码返回到android 源码目录,

//

. build/envsetup.sh

//选择平台 6

lunch

//编译源码

./build.sh xxx platform xxxx

 

4.4系统以root权限执行 ifconfig 命令(ifconfig命令必须以root执行,这在应用层是无法实现的)

CooeeServiceA 定义一个广播接收APP层发送下来的广播

然后AddService.cpp执行ifconfig命令

 

CooeeServiceA 收到广播后执行:

IBinder binder = ServiceManager.getService("guilh.add");// 取得核心服务

Binder.transact //执行服务方法

AddService.cpp transact 方法中

system("ifconfig wlan0 up");



http://blog.youkuaiyun.com/grumoon/article/details/38382673

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值