2017-08-11 102 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

相關問題