ndk 에서 aes 암호화 함수를 사용을 하려고 .a 라이브러리 파일을 만드는 것까지는 성공을 했는데
.so 파일 만들때 라이브러리를 추가하려고 하는데 안되내요
run 을 하면 특별하게 에러가 나지는 않는대. .so 파일을 생성을 못해서 샘플 앱(aes 함수를 실행해보려는)이 실행이 안됩니다.
계속 하다하다 안되서 질문 올려봅니다.
안드로이드 스튜디오는 1.0.0 버전 입니다.
Android.mk 내부에서는 아래와 같이 넣었습니다.
LOCAL_PATH := $(call my-dir)
LIB_PATH := $(abspath $(LOCAL_PATH)/../../../src/main/obj/local)
LIB_HEADER := $(abspath $(LOCAL_PATH)/../../../src/openssl)
include $(CLEAR_VARS)
LOCAL_MODULE := libopenssl-static
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libopenssl-static.a
LOCAL_EXPORT_C_INCLUDES := $(LIB_HEADER)
LOCAL_C_INCLUDES := $(LIB_HEADER)
include $(PREBUILT_STATIC_LIBRARY)
# build JNI
include $(CLEAR_VARS)
LOCAL_MODULE := mbcore
LOCAL_SRC_FILES := mbcore.c
LOCAL_STATIC_LIBRARIES := libopenssl-static
#LOCAL_WHOLE_STATIC_LIBRARIES += libcrypto-static libssl-static
#LOCAL_LDLIBS := $(LIB_PATH)/$(TARGET_ARCH_ABI)/libopenssl-static.a \ $(LIB_PATH)/$(TARGET_ARCH_ABI)/libcrypto-static.a \ $(LIB_PATH)/$(TARGET_ARCH_ABI)/libssl-static.a \
include $(BUILD_SHARED_LIBRARY)
build.gradle 파일에는 아래와 같이 했습니다.
defaultConfig {
(.....)
ndk {
moduleName "mbcore"
}
sourceSets.main{
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
task buildNative(type: Exec, description: 'Compile JNI source via NDK') {
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
'-j', Runtime.runtime.availableProcessors(),
'all',
'NDK_DEBUG=1'
}
task cleanNative(type: Exec, description: 'Clean JNI object files') {
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
commandLine "$ndkDir/ndk-build",
'-C', file('src/main/jni').absolutePath,
'clean'
}
clean.dependsOn 'cleanNative'
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn buildNative
}
}