0
jni @ ndk에 swig wrapper가 있습니다.Android swig 호출 매개 변수의 값이 변경됨
함수 헤더는 다음
//
// Created by Tomasz on 03/11/2017.
//
#ifndef PC_ANDORID_APP_RESIZE_GIF_H
#define PC_ANDORID_APP_RESIZE_GIF_H
int Version();
int ResizeAnimation(const char * infile, const char * outfile);
#endif //PC_ANDORID_APP_RESIZE_GIF_H
통음 계면이 간단하다 :
%module GifResizer
%inline %{
#include "resize-gif.h"
extern int Version();
extern int ResizeAnimation(const char * infile, const char * outfile);
%}
및 ResizeAnimation의 구현은 다음
int ResizeAnimation(const char * infile, const char * outfile) {
initialize();
/* ... */
return 0;
}
문제는 것을 Swig generater wrapper의 params 값 :
SWIGEXPORT jint JNICALL Java_org_imagemagick_GifResizerJNI_ResizeAnimation(JNIEnv *jenv, jclass jcls, jstring jarg1, jstring jarg2) {
jint jresult = 0 ;
char *arg1 = (char *) 0 ;
char *arg2 = (char *) 0 ;
int result;
(void)jenv;
(void)jcls;
arg1 = 0;
if (jarg1) {
arg1 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg1, 0);
if (!arg1) return 0;
}
arg2 = 0;
if (jarg2) {
arg2 = (char *)(*jenv)->GetStringUTFChars(jenv, jarg2, 0);
if (!arg2) return 0;
}
result = (int)ResizeAnimation((char const *)arg1,(char const *)arg2);
jresult = (jint)result;
if (arg1) (*jenv)->ReleaseStringUTFChars(jenv, jarg1, (const char *)arg1);
if (arg2) (*jenv)->ReleaseStringUTFChars(jenv, jarg2, (const char *)arg2);
return jresult;
}
괜찮 및 ARG1과 ARG2 적절한 값을 가지고 있지만 ResizeAnimation
가 호출되면, 포인터가 서로 다른 메모리 주소를 가리킨 OUTFILE (ARG2)은 어떤 임의의 메모리 동안 INFILE (ARG1)은 널이다.
모든 소스는 NDK 용 표준 안드로이드 CMake로 제작되었습니다.