마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

android ndk (jni)동적할당 사이즈 구하는방법

0 추천

안녕하세요 이번에 안드로이드 프로젝트를 맞게되서 프로그램 만들고있는놈입니다...

다름아니라, 같은 내용의 프로젝트를 mfc(마이크로소프트 c++ 라이브러리)로 짜둔 알고리즘이있습니다 알고리즘 부분은 mfc함수를 안써서 ansi표준으로만 짜뒀습니다.

 

그런데 안드로이드에 같은 알고리즘을 넣어야하는경우가생겨서 자바로 다시짜기 귀찮고.... 오래걸리기도하고.. 빨리만들어달라고위에서 말핫서.....

 

아직 해본적은 없지만 android ndk로 개발하기로 생각했습니다 설정 방법은 리눅스 make파일 만드는거랑 유사하고 구조도 대충 비슷해 쉽게Android.mk까지 만들었습니다.

 

중요한건 jni문법과 사용할수 없는 함수들이더군요....

 

그중 지금 걸리는 문제인 1번째는

 

#include <cstring>
#include <malloc.h>
#define LOGFILE_MAX_ROW 1440
#define STATE_UNCOLLECTIBLE 0
#define STATE_OFF 1
#define STATE_SLEEP 2
#define STATE_ACTIVITY 3

#define THRESHOLD_OFF 1
#define THRESHOLD_SLEEP 8
#define THRESHOLD_SLEEPACTIVITY_DEVISION 25
#define INITIAL_INTENSITY 25

#define SLEEP_STAGE_OFF 0
#define SLEEP_STAGE_DEEP 1
#define SLEEP_STAGE_LIGHT 2
#define SLEEP_STAGE_REM 3
#define SLEEP_STAGE_WAKE 4
inline size_t sizeof_malloc(void* p)
{
#if _MSC_VER
	return  _msize(p);
#else
#if __GNUC__
	return  malloc_usable_size(p);
#else
	#if __APPLE__
	return  malloc_good_size(p);
#endif
#endif
#endif
}

이중 gnu인식해서 리턴바뀌게 짜놓았더니malloc_usable_size를 ndk에서 사용못하는거같더군요... 

검색해보니 ndk에서 2010년에 막았다고... 근데 그에대한 해결방법이 없는거같습니다. 혹시 동적사이즈를 찾는방법이 있을까요???

 

2번쨰는 단순 형변환 문제입니다. jni는 자바의 int와 jint가 같고 c의 int랑도 다른 놈인거까지는 알겠습니다.

 

하나는 자바는 빅인디언방식 jni쪽은 리틀인디언까지... 그럼 형변환 과정이 있어야할텐데 jint to int 랑같이

 

구글에 검색해봐도 정확한 답이안보이더군요... 대충 

int a = 0;

jint i = (jint)a;

or

jint a = 0;

int i = (int)a;

이런 문법이 먹히는건가요??

 

cwjcks (150 포인트) 님이 2017년 12월 7일 질문

1개의 답변

0 추천
https://stackoverflow.com/questions/23382001/ndk-replacement-of-deprecated-malloc-usable-size

 

$(NDK_HOME)/sysroot/usr/include/jni.h 파일을 보면 typedef int32_t  jint;  로 정의 되어 있는듯 합니다..
익명사용자 님이 2017년 12월 7일 답변
2017년 12월 7일 수정
...