小弟想把一段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该如何修改?

解决方案 »

  1.   

    这个需要包装一下main,因为JNI的函数名是工具自动生成的,在这个函数里面调你的main。
    你可以这样先定义一个含native方法的类:
    class Stub{
        public native int main_native(int argc, char[][] strArray);
    }
    然后用javah工具生成c头文件,再实现这个头文件里面包含的那个函数, 再在这个函数里面再调你的main。
      

  2.   

    就是安装下面的是不是这样写也可以?这两个有什么区别没有呢?
    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);
      

  3.   


    还有就是我的main函数中要调用20多个函数 ,这么多的函数 是不是也要按照jni修改?还是直接用main?
      

  4.   

    请上网参考NDK  你就回明白很多
      

  5.   

    http://blog.csdn.net/jiakai0419/article/details/7267698关于JNI。不知道会不会对你有帮助。
      

  6.   

    写成:
    public native int main_native(int argc, String[] argv);
    也可以,只要你在C代码里面把这个String数组转化成(char*)[]就行了,这个方式也是可行的。另外。你在main函数中要调用20多个函数 ,这些函数不需要写成JNI了,因为Java code没有直接调它们。只用把main按照JNI的要求写好就行了。
      

  7.   

    谢谢你 这个不是我想要的呀,你的这个是public static void main(String[] args),而我是想把写成public native int main_native(int argc, String[] argv),将这个main写成native函数的,不过还是谢谢你哈