小弟想把一段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该如何修改?
解决方案 »
- java 常见错误代码
- 请教一个swing设计的思路
- 一个关于 socket 的问题
- 菜鸟求助~JAVA记事本
- 当有很多packages和其他jar文件时候,如何制作jar文件?
- 知道这里高手比较多,问一个也许不一定用java做的问题。做一个监控程序,如何让程序判断电脑正在访问什么网站,并且使用户该网站访问不了
- 请问怎么样把现有的JFrame关掉,然后在开另外一个??
- out of environment space的问题,欢迎大家近来指教!
- 如何对word 文档中关键字进行查找?我初学,谢谢!
- 怪:真是怪!..SOS----JBUILDER问题
- Annotation的一个小问题
- 一道竞赛题目、、求各种答案、、来牛人
你可以这样先定义一个含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的要求写好就行了。