@dangzhuohan wrote:
需求:基于Root权限app,不使用插件实现飞行模式开关。
操作步骤:
1.https://blog.csdn.net/zrhloveswallow/article/details/47972875 这种以通知方式实现的已经试过,可用,但是觉得麻烦,希望通过app单独实现。
2.https://blog.csdn.net/donwei8/article/details/51788866?locationNum=4&fps=1 使用以dlopen加载私有库的方法过程中,私有库可以成功打开,但是获取函数地址后,调用直接crash。代码:#define SBSERVPATH “/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices”
#define UIKITPATH “/System/Library/Frameworks/UIKit.framework/UIKit”@implementation MSToolAirplaneMgr
(void)setIsInAirplaneMode:(BOOL)mode {
mach_port_t *thePort;
void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
if (!uikit) {
NSLog(@“uikit----->error:%s”, dlerror());
return;
}
int (*SBSSpringBoardServerPort)(void) = dlsym(uikit, “SBSSpringBoardServerPort”);
if (dlerror() != NULL) {
NSLog(@“SBSSpringBoardServerPort----->error:%s”, dlerror());
}
thePort = SBSSpringBoardServerPort();
dlclose(uikit);
NSLog(@“uikit success”);// Link to SBSetAirplaneModeEnabled
void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
if (!sbserv) {
NSLog(@“sbserv----->error:%s”, dlerror());
return;
}
int (setAPMode)(mach_port_t port, BOOL status) = dlsym(sbserv, “SBSetAirplaneModeEnabled”);
if (dlerror() != NULL) {
NSLog(@“SBSSpringBoardServerPort----->error:%s”, dlerror());
}
setAPMode(thePort, mode);
dlclose(sbserv);
}crash日志:
Nov 8 17:32:09 iPhone SpringBoard[96] <Warning>: Failed to setpriority() on <FBApplicationProcess: 0x139c0b740; bash; pid: 1057>: Unknown error: -1 (-1)Nov 8 17:32:14 iPhone SpringBoard[96] <Warning>: HW kbd: Failed to set (null) as keyboard focus
Nov 8 17:32:14 iPhone SpringBoard[96] <Warning>: Application ‘UIKitApplication:com.morgen.MSTransform[0xbca1]’ crashed.
各位大神有经验的话可以帮我提供下思路、有代码的话更好~
Posts: 4
Participants: 2