2014-05-18 3 views
0

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의 원천없이이 물건을해야합니다. 당신이 저를 도와 준다면 그것은 좋을 것입니다!

답변

0

1 단계 : 로컬 공유 라이브러리로 미리 만들어진 모듈을 참조 예를 들어

include $(CLEAR_VARS) 
LOCAL_MODULE := MyPrebuiltLib 
LOCAL_SRC_FILES = path/to/libSuper.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := DroidJNILib 
LOCAL_SRC_FILES := AwsomeCode.cpp 
LOCAL_SHARED_LIBRARIES := MyPrebuiltLib 
include $(BUILD_SHARED_LIBRARY) 

원본이있는 경우

include $(CLEAR_VARS) 
LOCAL_MODULE := MyPrebuiltLib 
LOCAL_SRC_FILES =mysource.cpp 
include $(BUILD_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := DroidJNILib 
LOCAL_SRC_FILES := AwsomeCode.cpp 
LOCAL_SHARED_LIBRARIES := MyPrebuiltLib 
include $(BUILD_SHARED_LIBRARY) 
+0

감사 : 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

+0

speciallib.so는 arm arch를위한 것입니까? – nizammoidu

+0

실제로 .. 그 중 하나에 대해 확실하지 않습니다 .. gcc를 사용하여 gcc -shared 명령을 사용하여 파일을 생성했습니다. 팔 아치를 위해 .so 파일을 얻기 위해 더 이상 필요한 인수가 있습니까? – yashdosi

관련 문제