小弟想把一段C代码移植到android中去,要移植的代码中有
int main(int argc, char* argv[])
{
function1(argc, argv);
function2(argc, argv, GetNalBytes_StreamType);
...
functionn();
}
要将这个main函数还有main函数调用的function1和function2、functionn都要移植到android中去,要用jni规则修改下
不明白int main(int argc, char* argv[])的 char* argv[]用jni该如何修改?
int main(int argc, char* argv[])
{
function1(argc, argv);
function2(argc, argv, GetNalBytes_StreamType);
...
functionn();
}
要将这个main函数还有main函数调用的function1和function2、functionn都要移植到android中去,要用jni规则修改下
不明白int main(int argc, char* argv[])的 char* argv[]用jni该如何修改?
你可以这样先定义一个含native方法的类:
class Stub{
public native int main_native(int argc, char[][] strArray);
}
然后用javah工具生成c头文件,再实现这个头文件里面包含的那个函数, 再在这个函数里面再调你的main。
public native int main_native(int argc, String[] argv);
还有就是在jni中生成jobjectArray argv转成原来一样的指针数组char* argv[]?
JNIEXPORT jint JNICALL Java_com_svc(JNIEnv *env, jclass cl, jint argc, jobjectArray argv){
jsize len = (*env)->GetArrayLength(env, array);
int i;
jstring string = (*env)->GetObjectArrayElement(env,argv,i);
const char* row=(*env)->GetStringUTFChars(env,string,0);
strcpy(args[i],row);
//free java string jrow
(*env)->ReleaseStringUTFChars(env,jrow,row);
main(len,args);//调用原来的main}
这样写 对不?怎么看到有的代码中还要把jstring string = (*env)->GetObjectArrayElement(env,argv,i);改成jstring string = (jstring)(*env)->GetObjectArrayElement(env,argv,i);
还有就是我的main函数中要调用20多个函数 ,这么多的函数 是不是也要按照jni修改?还是直接用main?
public native int main_native(int argc, String[] argv);
也可以,只要你在C代码里面把这个String数组转化成(char*)[]就行了,这个方式也是可行的。另外。你在main函数中要调用20多个函数 ,这些函数不需要写成JNI了,因为Java code没有直接调它们。只用把main按照JNI的要求写好就行了。