添加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");
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");
相关文章推荐
- Android Radio Interface Layer
- 新型字体渲染方式
- 自己的服务器通过微信公众号Token验证测试的代码(Python版)
- Android 设置EditText光标Curso颜色及粗细
- 基于“微信公众平台的开发”
- Swift简介
- SevletContext 和Spring及SpringMVC的ApplicationContext
- 怎么实现MindMapper中导图背景的添加
- iOS反向传值demo--代理方法
- iOS反向传值-----系统单例方法
- iOS反向传值--Block方法
- Xcode6/Xcode7中如何去掉默认的Main.storyboard for swift语言
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
- 日结小细节
- 手机端适配代码
- iOS中属性与成员变量的区别
- Objective-C的属性和成员变量用法及关系浅析
- ios推送消息的基本原理
- iOS 9 学习系列:Xcode Code Coverage Tools
- 6、Swift元组的使用