Android JNI에서 손을 잡고 있습니다. 지금까지 기본 Hello World Android JNI 앱을 작성했습니다. .so 파일을 별도로 빌드 할 수 있다면 지금 생각 중입니다. 그런 다음 JNI Layer C 코드에서 해당 라이브러리를 사용하십시오.Android JNI C 코드에 사전 빌드 된 .so 파일 사용
기본적으로 저는 libsample.so를 Windows에서 명령 행 gcc를 사용하여 빌드하려고합니다. 그렇다면 JNI에서이 .so 파일을 사용하여 안드로이드 앱을 작성합니다. 내 이해에서부터 Android.mk 파일을 편집하여이 작업을 수행 할 수 있어야합니다.
하지만 편집 내용은 무엇입니까?
EDIT : 첨부 된 소스 코드.
jnitest.cpp -
#include <jni.h>
#include "specialPrint.h"
extern "C" jstring Java_com_example_hwjni_MainActivity_helloFromJni(JNIEnv *env, jobject thiz) {
return env->NewStringUTF(SpecialPrint("This is external .so talking."));
}
specialPrint.h -
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif
char* SpecialPrint(char* s);
#ifdef __cplusplus
}
#endif
specialPrint.c -
#include <stdio.h>
#include "specialPrint.h"
char* SpecialPrint(char* s) {
return s;
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyPrebuiltLib
LOCAL_SRC_FILES = specialPrint.c
include $(BUILD_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest
LOCAL_SRC_FILES := jnitest.cpp
LOCAL_SHARED_LIBRARIES := MyPrebuiltLib
include $(BUILD_SHARED_LIBRARY)
P. - 지금은 소스로이를 시도하고 있지만. 하지만 결국 나는 specialPrint의 원천없이이 물건을해야합니다. 당신이 저를 도와 준다면 그것은 좋을 것입니다!
감사 : 2 단계 모듈로 미리 만들어진 라이브러리를 선언 답장. 하지만 난이 오류가있어 : D : /android-ndk-r9d-windows-x86_64/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-strip : ./ libs/armeabi/speciallib.so : 파일 형식이 인식되지 않습니다 – yashdosi
speciallib.so는 arm arch를위한 것입니까? – nizammoidu
실제로 .. 그 중 하나에 대해 확실하지 않습니다 .. gcc를 사용하여 gcc -shared 명령을 사용하여 파일을 생성했습니다. 팔 아치를 위해 .so 파일을 얻기 위해 더 이상 필요한 인수가 있습니까? – yashdosi