Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Android
- 프로그래머스
- 데일로코테
- JavaScript
- 개발영어
- 일일코테
- CMAKE
- 기술인터뷰
- 안드로이드
- 3진수
- Cpp
- C++
- MediaExtractor
- Python
- MediaCodec
- 파이썬설치
- 이직
- 알고리듬
- AAudio
- 크레인인형뽑기
- 데일리코테
- 코딩시험
- pyenv
- sdkmanager
- NDK
- 알고리즘
- 완주하지못한선수
- 커맨드라인툴
- 코테
- 코딩테스트
Archives
- Today
- Total
Nomad Engineer
안드로이드 기존 프로젝트에 c++ 코드를 사용하는 방법 본문
필요한 것
- NDK 및 CMake 설치
- ExternalNativeBuild Gradle 플러그인 설정하기
- CMakeLists.txt 파일 정의 하기
- Java 코드에서 native 함수 정의 하기
- 라이브러리 로드 하기
- jni를 사용한 cpp 소스 파일
NDK 및 CMake 설치
안드로이드 SDK Manager 에서 NDK와 CMake를 설치 한다.
Gradle에 CMake 빌드 종속성 추가 하기
어플리케이션 모듈(기본적으로 app)에 속한 build.gradle 파일에 다음을 추가한다.
android {
...
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-std=c++17"
}
}
}
...
// CMakeList.txt의 종송석을 추가해 준다.
externalNativeBuild {
cmake {
path "CMakeLists.txt" version "3.10.2"
}
}
}
CMakeLists.txt 만들기
{모듈루트}/src 아래 CMakeLists.txt 파일을 만든다. 그리고 다음 내용을 추가한다.
cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib
SHARED
src/main/cpp/test.cpp)
find_library(log-lib
log)
target_link_libraries(native-lib
${log-lib})
Java 클래스에 바인딩하기
Java 클래스는 다음 작업을 해주어야 한다.
- 시스템 라이브러리 로드
- 테이티브 함수 정의
- 네이티브 함수 호출
package your.package.path
class MainActivity : AppCompatActivity() {
// ...
private external fun stringFromJNI(): String
init {
System.loadLibrary("native-lib")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val result = stringFromJNI()
Log.i("Native Test", "Native string is $result")
}
...
}
Cpp 코드 작성하기
다음 순서로 cpp코드를 작성한다.
- cpp 소스 파일 추가하기
- 코드 내용 작성하기
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_your_package_path_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /*this*/)
{
std::string hello = "Hello From C++";
return env->NewStringUTF(hello.c_str());
}
빌드하고 호출해 보기
이제 빌드하고 테스트 해보자.
다음 해볼 것
다음은 파이프라인에서 자동으로 ndk를 빌드 할 수 있게. 도커로 빌드 할 수 있는 환경을 만들어 보도록 하겠다.
References
- 안으로이드 공식문서 : NDK 및 CMake 설치 및 구성
- 안드로이드 공식문서 : C++ 라이브러리 지원
- 은드로이드 스튜디오로 Hello-CMake만들기
- 공식문서 : C 및 C++코드를 프로젝트에 추가
반응형
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드(Android) NDK 개발 유용한 사이트 모음 (0) | 2021.01.31 |
---|---|
안드로이드 NDK 명령줄에서 설치 및 빌드하기 (0) | 2021.01.31 |
Android AudioTrack (0) | 2021.01.24 |
Android 미디어 개발 How To 목록 (0) | 2021.01.24 |
Android 미디어 관련 Reference (0) | 2021.01.24 |