0
votes

This is my Android.mk file

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_INSTALL_MODULES := on include $(OPENCV_ANDROID_SDK)/sdk/native/jni/OpenCV.mk

LOCAL_MODULE := face-lib LOCAL_SRC_FILES += $(LOCAL_PATH)/face-lib.cpp $(LOCAL_PATH)/FaceRecognitionLib/Facebase.cpp LOCAL_SRC_FILES += $(LOCAL_PATH)/FaceRecognitionLib/Eigenfaces.cpp $(LOCAL_PATH)/FaceRecognitionLib/Fisherfaces.cpp LOCAL_SRC_FILES += $(LOCAL_PATH)/FaceRecognitionLib/PCA.cpp $(LOCAL_PATH)/FaceRecognitionLib/LDA.cpp LOCAL_C_INCLUDES += $(EIGEN3_DIR) $(LOCAL_PATH)/FaceRecognitionLib/RedSVD/include LOCAL_LDLIBS += -llog -ldl LOCAL_CPPFLAGS += -std=gnu++11 -frtti -fexceptions

include $(BUILD_SHARED_LIBRARY)

Gradle file

externalNativeBuild {
        ndkBuild {
            path 'src/main/cpp/Android.mk'
        }
    }

The ERROR that I am getting

Error:A problem occurred configuring project ':app'. executing external native build for ndkBuild D:\FaceRecognition\FaceRecognitionApp\app\src\main\cpp\Android.mk

1

1 Answers

1
votes

You can build .so files using following code, don't forget to change your ndk path.

import org.apache.tools.ant.taskdefs.condition.Os

android {
       .
       .
    sourceSets.main {
            jniLibs.srcDir 'src/main/libs' //set libs as .so's location instead of jniLibs
            jni.srcDirs = [] //disable automatic ndk-build call with auto-generated Android.mk
        }

        // call regular ndk-build(.cmd) script from app directory
        task ndkBuild(type: Exec) {
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                commandLine 'D:\\sdk\\android-ndk\\ndk-build.cmd', '-C', file('src/main/jni').absolutePath
            } else {
                commandLine 'ndk-build', '-C', file('src/main/jni').absolutePath
            }
        }

        tasks.withType(JavaCompile) {
            compileTask -> compileTask.dependsOn ndkBuild
        }
}