안드로이드 ndk 컴파일링의 두 가지 방식 (ndk-build과 cmake) 설정
1.ndk-build
동적 로드 JNI 1.java 레이어 코드:
static {
System.loadLibrary("MyLibrary"); // libxxx.so libMyLibrary.so
}
2. jni C++(1)main 디렉터리에 jni 디렉터리를 새로 만듭니다.cpp가 최종적으로 생성됩니다.so 라이브러리, apk에 불러오기
(2) Android를 생성합니다.mk Application.mk 파일 컴파일 스크립트
Android.mk
# Android.mk LOCAL_PATH , , , , my-dir 。
LOCAL_PATH := $(call my-dir)
#CLEAR_VARS GUN MakeFile LOCAL_XXX ,LOCAL_PATH 。 , GUN Make , LOCAL_XXX 。
include $(CLEAR_VARS)
#LOCAL_MODULE , 。 。 , “foo” “libfoo.so” 。
LOCAL_MODULE := myjni
# C C++
LOCAL_SRC_FILES := JNI_C++.cpp
# GUN Makefile , “include$(CLEAR_VARS)” LOCALL_XXX , 。 hello-jni.a libhello-jni.so。
include $(BUILD_SHARED_LIBRARY)
요약: LOCALPATH는 명령을 호출하는 디렉터리입니다. 어느 디렉터리에서 cmd 명령을 사용하면 경로 주소로 되돌아갑니다. LOCALMODULE 당신이 생성한 파일의 이름은 무엇입니까? 출력한 후에 자동으로 이름의 앞뒤에lib과.so LOCAL_SRC_FILES에서 컴파일할 파일
Application.mk는 없습니다. 주로 so 호출 라이브러리 이름과 컴파일된 so가 대응하는 CPU 플랫폼이 없으면build에 있습니다.gradle에서 설정합니다. ndk-build이 아닌 시스템으로 컴파일합니다.
APP_MODULES := MyJni
APP_ABI := all all
3. 컴파일 방식 선택: app module 디렉터리에 있는build.gradle에서 라이브러리 파일 이름을 설정합니다.gradle 파일의 defaultConfig 를 찾아서 다음과 같은 내용을 추가합니다.
// c++ .so
defaultConfig {
......
ndk{
moduleName "JniLibName" // so
ldLibs "log", "z", "m" // , log
abiFilters "armeabi", "armeabi-v7a", "x86" // cpu so 。
}
}
externalNativeBuild {
ndkBuild { path file("src/main/java/jni/Android.mk")
}
}
sourceSets {
main {
jni.srcDirs('src/main/java/jni')
}
}
so app/build/intermediates/ndkBuild/debug
// .so apk
sourceSets {
main {
jniLibs.srcDirs('.\\libs') .so apk , main JniLibs ,
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.