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

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

2015-10-30 00:38 363 查看
1.http://blog.csdn.net/jinliang_890905/article/details/7320234 关于Android 添加系统级(java)服务和调用的编写实现说明

2.http://blog.csdn.net/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.csdn.net/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.csdn.net/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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: