sitelink1 https://linsoo.co.kr/archives/13793 
sitelink2  
sitelink3  

인터넷 돌아다니다가 안드로이드용 Power Spectrum 소스를 구했음.
start 버튼 누르고 마이크에 대고 말하면 주파수 대역을 그려주는 소스인데
앱 소스 출처: http://som-itsolutions.blogspot.kr/2012/01/fft-based-simple-spectrum-analyzer.html

이걸 NDK를 써서 JNI로 옮겨보기로 했음. (기본 소스가 내 핸폰에서 느리기도 해서)

1

2

3

4

5

6

static{

    System.loadLibrary("createFFTWrapper");

    System.loadLibrary("ndkFT");

 }

private native long createFFTWrapper(int blockSize); // Void constructor

private native void ndkFT(long nativePointer, double[] c, int size);

두번째 줄에서 자꾸 에러가 나는거임 어제 하던거라 에러메세지는 기억 안남.
이런저런거 찾아보다가 OpenCV JNI 하던게 생각나서Android.mk랑  Application.mk를 찾아봄.
그리고 인터넷 검색해서 현 프로젝트에 맞춰서 수정해보고 잘 되는거 확인후 여기에 정리해둠.

1

2

3

4

5

6

7

8

9

10

LOCAL_PATH := $(call my-dir)

 

include $(CLEAR_VARS)

 

LOCAL_SRC_FILES := kr_co_linsoo_fftvoice_fftWrapper.cpp

LOCAL_LDLIBS += -llog

LOCAL_MODULE := ndkvoice

 

include $(BUILD_SHARED_LIBRARY)

include $(CLEAR_VARS)

현재 작업중인 FFTVoice의 Android.mk 파일 내용.

1. LOCAL_PATH := $(call my-dir)
– android.mk 파일이 위치하고 있는 현 경로를 기본 패스로 지정함.
(그래서 jni폴더에 이 파일을 만들고 cpp파일도 같이 넣어두는거죠.)

2. include $(CLEAR_VARS)
– LOCAL_SRC_FILES, LOCAL_LDLIBS, LOCAL_MODULE 등등 LOCAL_XXXX 로 시작되는 변수들을 초기화 합니다.

3. LOCAL_SRC_FILES
– 컴파일할 소스파일을 적어줍니다. 파일 하나 하나 적어줘도 되고 파일리스트를 만들어서
해당경로 디렉토리에 있는 파일을 자동으로 입력할수도 있습니다.

LOCAL_SRC_FILES := kr_co_linsoo_fftvoice_fftWrapper.cpp 부분을 아래와 같이 바꿔도 됩니다.

1

2

FILE_LIST:= $(wildcard &(LOCAL_PATH)/*.cpp)

LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)

JNI 폴더에 있는 모든 cpp파일을 빌드함.

4. LOCAL_LDLIBS
– 추가 라이브러리 링크 걸때 사용.
예를 들어 Liblinsoo.so 파일이면 -llinsoo 라고 쓰면 됨
https://developer.android.com/ndk/guides/stable_apis.html <== 여기에 가면 각종 옵션 설명이 나옴.

5. LOCAL_MODULE
– 빌드해서 만들 모듈이름을 지정하는곳

6. include $(BUILD_SHARED_LIBRARY)
– 생성되는 라이브러리를 스태틱으로 할건지 공유형으로 할건지 정하는것

이 글 작성하다가 깨달았는데 굳이 Android.mk 하나로 모든걸 퉁칠 필요 없이
CPP 하나나 몇개 모아서 하나의 lib로 만들때 마다 mk파일 하나씩 만들어 넣으면 된다는걸 깨달음.
테스트로 내가 작성한 lib 생성용 mk파일 하나 만들고 android.mk파일 안에다가

1

include fftWrapper.mk

이거 한줄 넣어주니 실행 잘 됨.

아직 이해 안되는것이 좀 있긴 한데 지금 당장은 모르겠고 이것저것 해보다 보면 깨닫게 되는 날이 오겠지.

참고 사이트 : https://developer.android.com/ndk/guides/android_mk.html

번호 제목 글쓴이 날짜 조회 수
28 Android Studio for beginners, Part 3: Build and run the app file 황제낙엽 2018.02.02 81
27 Android Studio for beginners, Part 2: Explore and code the app(2) file 황제낙엽 2018.02.02 17
26 Android Studio for beginners, Part 2: Explore and code the app(1) file 황제낙엽 2018.02.02 36
25 Android Studio for beginners, Part 1: Installation and setup file 황제낙엽 2018.02.02 23
24 SDK와 NDK, 그리고 PDK 황제낙엽 2018.01.30 69
23 Error:Execution failed for task ':app:lintVitalRelease'. 황제낙엽 2018.01.29 783
22 Error:The number of method references in a .dex file cannot exceed 64K. 황제낙엽 2018.01.29 70
21 30일 기한 Google Play 개발자 약관 위반 알림 황제낙엽 2018.01.21 125
20 애니메이션 샘플 예제들 file 황제낙엽 2018.01.08 186
19 ConstraintLayout으로 숫자패드 레이아웃을 file 황제낙엽 2017.11.09 144
18 RecyclerView란? (RecyclerView와 ListView 차이) file 황제낙엽 2017.09.11 153
17 Android - Actionbar에 tab을 추가하고 스와이프 동작으로 화면 전환 구현( ViewPager와 FragmentPagerAdapter 사용) file 황제낙엽 2017.09.11 308
16 HTTP 프로토콜을 이용한 Json Post 보내고 받기 file 황제낙엽 2017.08.03 816
15 HttpURLConnection 에서 세션 유지하기(쿠키 사용) 황제낙엽 2017.08.03 661
14 Android HttpURLConnection클래스로 POST 요청하기 황제낙엽 2017.08.01 65
13 Android’s HTTP Clients & Apache HTTP Client 어느것이 성능이 더 좋을까? 황제낙엽 2017.07.31 157
12 프로젝트의 AndroidManifest.xml 파일의 내용 file 황제낙엽 2017.07.25 52
11 구글의 안드로이드 개발자들이 만든 애플리케이션 모음 (Apps for Android ) file 황제낙엽 2017.07.25 56
10 크롬에서 디바이스(스마트폰) 연결 정보 확인 황제낙엽 2017.03.28 215
» JNI 사용시 Android.mk와 Application.mk에 대해서 황제낙엽 2017.03.28 28