#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 iestd::system
не возвращает результат какой-либо команды только в том случае, если она была успешно вызвана.2.
adb
Существует ли как команда на устройстве Android? Я знаю, чтоadb
это команда на платформе разработки [ПК], которая связывается с хост-сервисом на Android, но я не думалadb
, что это часть образа Android.3. По теме: Исходный код Android
adb
README