0

Cocoa で ADB コマンドを実行するためのシンプルな GUI を構築しています。NSTask を使用してシェル コマンドを実行する方法を説明している記事をいくつか見つけましたが、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 コマンドを実行するにはどうすればよいですか?

4

1 に答える 1