Вызовите команду ADB из собственного кода C и получите результат в виде строки

#android #c

Вопрос:

Пытаясь выполнить команду adb shell pwd из собственного кода внутри Android и отображая возвращенное pwd в действии, я написал:

 #include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_adb_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    // std::string hello = "Hello from C  ";
    int status =  system("adb shell pwd");

    // I think below code is wrong //

    char buff[100];
    snprintf(buff, sizeof(buff), "system ret:[%d]n",status>>8);
    std::string buffAsStdStr = buff;

    // End of code block which I think is wrong //

    return env->NewStringUTF(buffAsStdStr.c_str()); //env->NewStringUTF(hello.c_str());
}
 

И получил выход, поставленный как system ret:[127]

Похоже, я допустил ошибку при преобразовании возвращаемого вывода команды system в string

введите описание изображения здесь

Комментарии:

1. std::system Возвращаемое значение «…Значение, определенное реализацией [ int ]. …» en.cppreference.com/w/cpp/utility/program/system ie std::system не возвращает результат какой-либо команды только в том случае, если она была успешно вызвана.

2. adb Существует ли как команда на устройстве Android? Я знаю, что adb это команда на платформе разработки [ПК], которая связывается с хост-сервисом на Android, но я не думал adb , что это часть образа Android.

3. По теме: Исходный код Android adb README