Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android NDK-execute.so返回0但不工作_Android_C_Cmake_Android Ndk_Android Native Library - Fatal编程技术网

Android NDK-execute.so返回0但不工作

Android NDK-execute.so返回0但不工作,android,c,cmake,android-ndk,android-native-library,Android,C,Cmake,Android Ndk,Android Native Library,如果process=newprocessbuilder(新字符串[]{“su”、“-c”、“exec”+mylib.so),如何执行.so文件。start()返回0,但没有任何执行迹象 我已经使用cmake编译了一个.c文件,并将其存储为库(.so)。但是,当尝试执行库(必须运行main()函数)时,当进程退出值为0时(无错误),不会发生任何事情 我试图写入我创建的一个文件,以测试库是否正在执行,但也没有发生任何事情。该文件仍然为空 int main (int argc, char **argv

如果process=newprocessbuilder(新字符串[]{“su”、“-c”、“exec”+mylib.so),如何执行.so文件。start()返回0,但没有任何执行迹象

我已经使用cmake编译了一个.c文件,并将其存储为库(.so)。但是,当尝试执行库(必须运行main()函数)时,当进程退出值为0时(无错误),不会发生任何事情

我试图写入我创建的一个文件,以测试库是否正在执行,但也没有发生任何事情。该文件仍然为空

int main (int argc, char **argv)
{
LOGW("Running");
FILE* file = fopen("/data/local/tmp/log.txt","w+");

if (file != NULL)
{
    fputs("Running\n", file);
    fflush(file);
    fclose(file);
}}
此外,我找不到cmake日志文件,是不是因为库尚未执行?如果我在我的cmakelist.txt中添加了日志库,我如何访问日志文件,如下所示:

find_library(
        log-lib
        log )

target_link_libraries(
        mylib
        ${log-lib} )

execute命令不起作用,相反,一个解决方法是开发一个JAVA类可以调用的函数,该函数反过来调用main函数。我的main函数需要两个参数:一个char数组(argv)和要传递的数组长度(argc)

JNIEXPORT jint JNICALL
yourapp.class.function_name
    (JNIEnv *env, jobject object, jobjectArray stringArray) {

int argc = (*env)->GetArrayLength(env, stringArray);
jsize size = (*env)->GetArrayLength(env, stringArray);

char **argv = (char **) malloc(size);
for (int i = 0; i < size; ++i) {
    jstring javaString = (jstring) (*env)->GetObjectArrayElement(env, stringArray, i);
    const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0);

    argv[i] = strdup(nativeString);
    (*env)->ReleaseStringUTFChars(env, javaString, nativeString);
    (*env)->DeleteLocalRef(env, javaString);
    }
main(argc, argv);
}
JNIEXPORT jint JNICALL
yourapp.class.function\u名称
(JNIEnv*env,jobject对象,jobjectArray stringArray){
int argc=(*env)->GetArrayLength(env,stringArray);
jsize size=(*env)->GetArrayLength(env,stringArray);
字符**argv=(字符**)malloc(大小);
对于(int i=0;iGetObjectArrayElement(env,stringArray,i);
const char*nativeString=(*env)->GetStringUTFChars(env,javaString,0);
argv[i]=strdup(本地投资);
(*env)->ReleaseStringUTFChars(env、javaString、nativeString);
(*env)->DeleteLocalRef(env,javaString);
}
主(argc、argv);
}

至于日志,它们可以在调试器或Logcat中找到。

这里缺少很多信息。例如,为什么您要尝试使用
exec
,而不是像通常那样通过JNI调用库?为什么您要使用硬编码的文件路径,而不是向Android请求允许的路径o写入?关于Android日志功能的输出,您可以在
logcat
输出中找到它。通常通过在您通过USB或WiFi连接到手机的计算机上运行
adb logcat