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\debug com.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 !");
待续......