运行 带有 NSTask 的 adb 命令

Run adb commands with NSTask

我正在为 Cocoa 中的 运行 ADB 命令构建一个简单的 GUI。我找到了几篇不同的文章,讲述了如何使用 NSTask 运行 shell 命令,但没有特定于 ADB 的内容,我无法理解。

我可以运行简单的ADB命令,例如
- adb devices
- adb reboot

函数

NSString *adbPath = @"~/Android/sdk/platform-tools/adb";
NSString* runADBCommand(NSString *cmd)
{
    NSTask *adbDevices = [[NSTask alloc] init];
    [adbDevices setLaunchPath:adbPath];

    adbDevices.arguments = @[cmd];

    NSPipe *pipe;
    pipe = [NSPipe pipe];
    [adbDevices setStandardOutput:pipe];

    NSFileHandle *file;
    file = [pipe fileHandleForReading];

    [adbDevices launch];

    NSData *data;
    data = [file readDataToEndOfFile];

    NSString *adbComOutput;
    adbComOutput = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return adbComOutput;
}

通话

- (void)refreshDevices:(id)sender
{
    adbOutput.stringValue = runADBCommand(@"devices");
}

上面的工作正常,但是当我传递一个更复杂的参数时:

- (void) getVersion:(id)sender
{
    runADBCommand(@"shell cat /system/build.prop | grep incremental");
}

我只得到控制台输出,就像我刚在终端中输入 adb 一样。如何将 NSTask 的命令和参数打包为 运行 ADB 命令?

您应该使用方法 -[setArguments:] 设置参数,就像这个例子 NSTask shell