Android ndk 将C语言main方法转为JNI调用
2016-09-26 11:58
218 查看
一、C main()方法
int main(int argc, char *argv[])
包括两个参数,整数型argc,字符串指针数组型argv,main方法是由命令行调用的,格式为:文件名 参数1 参数2 参数3 ······ 例如:MyFile aaa bbb ccc 111 222 333 MyFile为文件名,aaa----333位参数,传入时编译器自动将输入的参数数量传给argc(这个数量包括文件名),将所有参数传给argv。 这时argc为7,argv为:argv[0]=MyFile,argv[1]=aaa,······(具体的指向方式请自行百度,这里只是为了看着方便),java可以将argv理解为字符串数组。
二、JNI调用
java:传入String数组
cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "12", "00"}); cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "13", "00"}); cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "14", "27"}); cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "15", "10"}); cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "17", "ff"}); cmUp.moveOnce(new String[]{"i2c", "w", "15", "00", "10", "7f"});
JNI:String数组会变为jobjectArray类型,将这个array转为char *argv[],方法如下
JNIEXPORT void JNICALL Java_com_wzq_controlmod_ControlManager_moveOnce (JNIEnv *env, jobject obj, jobjectArray array) { // 算出数组长度 jint size = (*env)->GetArrayLength(env, array); // 这个就是char *argv[] char *a[size]; int i; for (i = 0; i < size; i++) { jstring mJS = (jstring) ((*env)->GetObjectArrayElement(env, array, i)); // convert jstring to char a[i] = (char *) ((*env)->GetStringUTFChars(env, mJS, 0)); LOGE("Char From JNI A: %s", a[i]); } // 调用main,传入size和a main(size, a); }
相关文章推荐
- Android绕过JNi 调用C语言的方法
- JNI学习2:android 调用C语言方法与C语言调用android方法
- 【学习Android NDK开发】native code通过JNI调用Java方法
- Android NDK 开发(三)JNI 调用Java属性和方法
- Java通过JNI调用C语言的方法
- Mac下Java的native方法以及JNI调用C语言
- 【学习Android NDK开发】native code通过JNI调用Java方法
- 【学习Android NDK开发】native code通过JNI调用Java方法
- Java通过JNI调用C语言的方法
- jni使用c语言调用android shell命令方法
- Android JNI开发之c语言调用java方法
- Android studio 简单方便的使用JNI调用c语言中的方法
- Java通过JNI调用C语言的方法
- 【学习Android NDK开发】native code通过JNI调用Java方法
- 使用jni实现在C语言中调用Java的方法
- Android jni 使用C语言调用java中的log方法
- JNI开发基础篇:C语言调用Java中的方法
- android ndk 开发jni调用对象方法,数组参数
- 【学习Android NDK开发】native code通过JNI调用Java方法
- 【学习Android NDK开发】native code通过JNI调用Java方法