2017-08-11 106 views
0

我已经设法编译下面的代码,我想知道它是否正确,并且您给我举例说明如何在android的MainActivity中调用压缩函数。如何在MainActivity上调用ndk函数

#include <jni.h> 
#include<Principal.h> 

JNIEXPORT jint JNICALL 
JAVA_com_pfc_camera_ndkmain_MainActivity_compresion(JNIEnv* env,jobjectArray 
jargv){ 


//jargv is a Java array of Java strings 
int argc = env->GetArrayLength(jargv); 
typedef char *pchar; 
pchar *argv = new pchar[argc]; 
int i; 
for(i=0; i<argc; i++) 
{ 
    jstring js = (jstring)env->GetObjectArrayElement(jargv, i); //A Java string 
    const char *pjc = env->GetStringUTFChars(js,NULL); //A pointer to a Java-managed char buffer 
    size_t jslen = strlen(pjc); 
    argv[i] = new char[jslen+1]; //Extra char for the terminating null 
    strcpy(argv[i], pjc); //Copy to *our* buffer. We could omit that, but IMHO this is cleaner. Also, const correctness. 
    env->ReleaseStringUTFChars(js, pjc); 
} 

//Call main 

Principal *pa=Principal::CreateInstance(argc,argv); 
pa->Run(); 
pa->FreeInstance(); 

//main(argc, argv); 

//Now free the array 
for(i=0;i<argc;i++) 
    delete [] argv[i]; 
delete [] argv; 

return 0; 


} 
+0

标题不匹配你问... –

+0

对不起我的英语不是很好 – Gigasnike95

回答

0

您必须实现Java端来调用代码的C端。 但我认为你的C代码缺少jclass说法。 您应该使用javah创建包含本机功能的擦除.h文件。见documentation

Java方面应该是这样的:

package com.pfc.camera.ndkmain; 

public class MainActivity extends Activity { 

    native int compression(String[] argv); 

    public int foo(String[] args) { 
     return compression(args); 
    } 
} 
+0

如何使用JCLASS说法? – Gigasnike95

+0

通常你不使用它,除非你需要引用的C面你的java类或实例(见https://stackoverflow.com/questions/18861801/android-jni-method-is-the-second-parameter-jclass - 或jobject) – Xvolks

相关问题