Android NDK 개발 - 단순 데모(둘)
4146 단어 NDK
public class MainActivity extends AppCompatActivity {
// “native-lib” 。
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 = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
// C/C++
public native String stringFromJNI();
}
위에서 설명한 javah -jni 명령 도구를 사용하면 헤더com 생성 가능example_lynnlee_ndkdemo_MainActivity.h 파일
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class com_example_lynnlee_ndkdemo_MainActivity */
#ifndef _Included_com_example_lynnlee_ndkdemo_MainActivity
#define _Included_com_example_lynnlee_ndkdemo_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_lynnlee_ndkdemo_MainActivity
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_lynnlee_ndkdemo_MainActivity_stringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
함수명
Java_com_example_lynnlee_ndkdemo_MainActivity_stringFromJNI
구성: 클래스명방법명 구성.매개변수 JNIEnv * 및 jobject에는 JNIEnv의 jvm 포인터가 있어야 하며 jobject는 이 함수를 호출하는 java 클래스 참조를 가리킵니다.jni 디렉터리에 새 jnitest를 만듭니다.c 파일, 방금comexample_lynnlee_ndkdemo_MainActivity.h이름이 너무 길어서 jnitest로 변경되었습니다.h.
//
// Created by LynnLee on 2018/8/5.
//
#include "jnitest.h"
JNIEXPORT jstring JNICALL Java_com_example_lynnlee_ndkdemo_MainActivity_stringFromJNI(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env, "LynnLee");
}
함수 구현은 "LynnLee"문자열을 되돌려줍니다.
jni 디렉터리에 새 안드로이드를 만듭니다.mk 파일, Android.mk 파일은 안드로이드의 makefile 파일입니다.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := jnitest.c
include $(BUILD_SHARED_LIBRARY)
매크로 함수 'my-dir' 는 컴파일러 시스템에서 제공하며, 현재 안드로이드를 포함하고 있는 것을 되돌려줍니다.mk 파일의 디렉토리 경로
CLEAR_컴파일 시스템에 의해 제공되는 VARS 제거 LOCALPATH 이외의 다른 LOCALXXX 변수
컴파일된 대상 객체, LOCALMODULE 변수는 당신이 안드로이드에 있다는 것을 표시하기 위해 정의해야 합니다.mk 파일에 기술된 모든 모듈입니다.이름은 고유해야 하며 공백이 없어야 합니다.주의: 컴파일 시스템은 자동으로 적합한 접두사와 접두사를 생성합니다. 다시 말하면,native-lib로 명명된 공유 라이브러리 모듈은'libnative-lib'를 생성합니다.so'파일.
include $(BUILD_SHARED_LIBRARY)
컴파일된 라이브러리 유형 지정 1.BUILD_SHARED_LIBRARY:동적 라이브러리,2.BUILD_STATIC_LIBRARY: 정적 라이브러리;3.BUILD_EXECUTEABLE: 실행 파일
Application.mk
APP_ABI := all
APP_ABI는 네 가지 유형(기본값armeabi)이 있는데,armeabi,armeabi-v7a,x86,mips를 설정할 때 빈칸으로 구분하고,all는 모든 것을 표시합니다.
라이브러리 생성
app/CMakeLists를 수정해야 합니다.txt 파일은 다음과 같이 수정되었습니다.
CMakeLists.txt.png
전편에서 만든 ndk -build 명령 도구로 라이브러리 만들기
소고.png
라이브러리 작업
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
/*externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}*/
그렇지 않으면 오류 보고:
오류png
gradle 수정 아래 그림
gradle.png
실행 효과.png
git 코드 경로:https://github.com/lynnleescz/NDKdemo
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android를 위한 Boost 구축 기술어떻게든 Boost를 이용해야 하는 상황(사용하고 싶은 라이브러리에서 Boost를 사용하고 코드를 다시 쓰는 것은 번거롭다 등) Boost 기능을 모두 사용하는 것은 아님 Android의 경우 NDK 관계로 인해 컴...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.