NDK错误总结

来源:互联网 发布:appstore无法下载软件 编辑:程序博客网 时间:2024/05/29 07:17

1:在android studio 1.5中,开始用默认生成的c文件,编译没有问题,android studio编译没有问题,而且 NDK命令行编译也没有问题;

     后来修改为cpp文件,编译不过去了总是提示我找不到 .c 那个文件,但是我已经将.c文件修改为cpp文件了;


修改方法:

      方法1:查看android studio1.5生成的android.mk文件,里面的src路径是绝对路径,我将命令行的路径修改为绝对路径就可以编译了;

      方法2:但是根据所有的示例,可以知己用当前路径,就是直接写文件名就可以,当你的ndk工程下的libs文件夹和obj文件夹删除,重新编译就可以了;





2:在NDK中用javah.exe生成.h头文件的命令行:

以我的测试工程为例:



D:\AndroidStudioProjects\MyApplication6\app\src\main>javah -d jni -classpath D:\androidsdk\platforms\android-22\android.jar;D:\android_sdk\extras\android\support\v4\android-support-v4.jar;D:\android_sdk\extras\android\support\v7\appcompat\libs\android-support-v7-appcompat.jar;..\..\build\intermediates\classes\debugcom.example.administrator.myapplication.MainActivity






3:关于C和cpp的区别:

      一: 转:http://blog.csdn.net/kandyer/article/details/9097051

      在C和C++中,NDK中的部分语法不太相同;

jni/hellocpp/main.cpp:16:18: error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'


android java 调用c++程序时报的错误,


代码的写法是:

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,  jobject thiz, jstring str, jint i )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}

错误在于:

(*env)->NewStringUTF(env, "Hello from JNI !");

这一行,这是c的写法,而我的是cpp程序,需要改写成:

env->NewStringUTF( "Hello from JNI !");




待续......

0 0