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

Android NDK - execute .so returning 0 but not working

如果 process = new ProcessBuilder(new String[]{"su", "-c", "exec " + mylib.so).start() 返回 0 而没有,如何执行 .so 文件任何执行的迹象。

我已经使用 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} )

执行命令不起作用,解决方法是开发一个 JAVA class 可以调用的函数,在 return 中调用主函数。我的 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);
}

至于日志,它们将在调试器或 Logcat 中可用。