반응형
Notice
Recent Posts
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 | 31 |
Tags
- Flavors
- Firebase
- Android
- socket.io
- hung-up
- Galaxy Watch
- mqtt
- firebase-database
- git-push
- 워치
- OZViewer
- TIZEN
- Java8
- AWS
- BottomSheetDialog
- JNI
- git
- socket-server
- ozd
- mosquitto
- socket-client
- cloud-firestore
- 오즈뷰어
- ActivityResult-API
- NoSuchMethodError
- Dva
- Kotlin
- gradle
- firebase-storage
- google-login
Archives
- Today
- Total
Hyeyeon blog
[Android] JNI를 이용해 안드로이드에서 c파일 사용하기 본문
반응형
1. NDK 설치
- Preferences > System Settings > Android SDK > SDK Tools > NDK 설치
2. External Tool 생성
- Preferences > Tools > External Tools > + 버튼을 클릭하여 Tool 생성
Name: ndk-build
Description: .so 파일 생성
Program: ndk-build 위치
- File > SDK Location > Android NDK location 과 동일하게 작성
Arguments : (공백)
Working directory: 현재 프로젝트의 jni 폴더 위치
3. src/main/jni 폴더 생성 후 하위에 각 파일 생성
(1) Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test-jni << Java에서 호출할 모듈 명 (원하는 명으로 지정)
LOCAL_SRC_FILES := test-jni.c << c 파일 명
include $(BUILD_SHARED_LIBRARY)
(2) Application.mk
APP_ABI := all
(3) test-jni.c
#include <jni.h>
JNIEXPORT jsting JNICALL Java_com_example_demo_MainActivity_getText(JNIEnv *env, jobject thiz){
return (*env)->NewStringUTF(env, "Hello JNI");
}
4. .so파일 생성
- - MainActivit 우측 마우스 버튼 클릭 > External Tools > ndk-build 선택
- - src/main/libs에 .so파일이 생성됨
5. build.gradle(Moduel: app)
android {
sourceSets.main{
jniLibs.srcDir 'src/main/libs' // .so파일 위치 지정
}
packagingOptions {
pickFirst '**/*.so'
}
}
6. 호출하기
(1) Kotlin
MainActivity : AppCompatActivity() {
companion object {
@JvmStatic
external fun getText() : String
@JvmStatic
fun load(){
System.loadLibrary("test-jni")
}
}
init {
// 앱 실행 시 로드
load()
}
override fun onCreate (...) {
..
val text = getText() // Hello JNI
}
}
(2) Java
class MainActivity extends AppCompatActivity() {
public native String getText();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
..
load();
String text = getText(); // Hello JNI
}
public static void load(){
System.loadLibrary("test-jni")
}
}
관련 글
728x90
'개발 > Android' 카테고리의 다른 글
[Android] No matching client for package name '..' 해결 (0) | 2021.02.08 |
---|---|
[Android] JNI에서 사용되는 문법 정리 (0) | 2021.02.01 |
[Android] Socket.io를 이용하여 소켓 서버와 안드로이드 앱 통신하기 (0) | 2020.12.11 |
[Android] onActivityResult를 대체하는 ActivityResult API (0) | 2020.12.07 |
[Android] 화면 잠금 상태 여부 가져오기 (0) | 2020.11.30 |
Comments