일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- navigator
- flutter
- Cached Image
- WillPopScope
- Flutter Tutorial
- listview
- Image.network
- 반석천
- HTTP
- InkWell
- ListTile
- Flutter Example
- Row
- CrossAxisAlignment
- sqlite
- ListView.builder
- Scaffold
- Hello World
- Column Widget
- Networking
- Flutter 예제
- Row Widget
- Flutter 강좌
- AppBar
- Load Image
- Snackbar
- Flutter 앱 배포
- MainAxisAlignment
- FutureBuilder
- node.js
- Today
- Total
꿈꾸는 시스템 디자이너
Flutter 강좌 - 플랫폼간 메소드 호출 #2 - 네이티브 API 개발 | How to develop a native API using NDK 본문
Flutter 강좌 - 플랫폼간 메소드 호출 #2 - 네이티브 API 개발 | How to develop a native API using NDK
독행소년 2020. 4. 20. 14:30
Flutter Code Examples 강좌를 추천합니다.
- 제 블로그에서 Flutter Code Examples 프로젝트를 시작합니다.
- Flutter의 다양한 예제를 소스코드와 실행화면으로 제공합니다.
- 또한 모든 예제는 Flutter Code Examples 앱을 통해 테스트 가능합니다.
Flutter Code Examples 강좌로 메뉴로 이동
Flutter Code Examples 강좌 목록 페이지로 이동
Flutter Code Examples 앱 설치 | Google Play Store로 이동
Flutter 강좌 시즌2 목록 : https://here4you.tistory.com/149
지난 강좌에서는 Android Studio가 제공하는 Native C++ 프로젝트를 통해 NDK의 동작 방식에 대해서 알아보았다.
이번 강좌에서는 그 연장선으로 안드로이드에서 호출 가능한 네이티브 API를 개발해본다.
지난 강좌에서 살펴본 안드로이드 프로젝트를 계속 사용한다.
1. 네이티브 API 추가
네이티브 API를 추가하기 위해 새로운 cpp 파일(calculator.cpp)을 app/src/main/cpp 디렉토리에 추가한다.
int addition(int a, int b) {
return a + b;
}
int subtraction(int a, int b) {
return a - b;
}
간단한 덧셈과 뺄셈을 제공하는 함수를 추가했다.
2. JNI 인터페이스 추가
기존의 native-lib.cpp 파일에 추가한 두 함수의 JNI 인터페이스를 추가한다.
#include <jni.h>
#include <string>
#include "calculator.cpp"
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ndk_1test_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
extern "C" JNIEXPORT jint JNICALL
Java_com_example_ndk_1test_MainActivity_addition(
JNIEnv *env,
jobject /* this */,
jint a,
jint b) {
return addition(a, b);
}
extern "C" JNIEXPORT jint JNICALL
Java_com_example_ndk_1test_MainActivity_subtraction(
JNIEnv *env,
jobject /* this */,
jint a,
jint b) {
return subtraction(a, b);
}
3. MainActivity 파일에 native 메소드 추가
MainActivity에 native 메소드를 다음과 같이 추가하고, onCreate 메소드에서 호출하는 테스트 코드를 작성한다.
package com.example.ndk_test;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
System.out.println(" :::::::::::::::::::: ");
int additionResult = addition(10, 5);
System.out.println("10 + 5 = " + additionResult);
System.out.println(" :::::::::::::::::::: ");
int subtractionResult = subtraction(10, 5);
System.out.println("10 - 5 = " + subtractionResult);
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
public native int addition(int a, int b);
public native int subtraction(int a, int b);
}
4. 실행 결과
다음과 같이 덧셈과 뺄셈의 결과가 출력되는 성공한 것이다.
지금까지 두 번의 강좌를 통해 일반적인 안드로이드 프로젝트에서 네이티브 라이브러를 호출하는 방법과 네이티브 API를 추가하는 방법에 대해 알아보았다.
다음 강좌에서는 Android와 Flutter간 메소드 호출 방법에 대해서 알아본다.