Search code examples
androidc++android-ndkbuild.gradlendk-build

How to set NDK lib path in Gradle?


I'm working on a PDF viewer application using ebookdroid & MuPDF CPP files. I am having lots of problem with NDK integration in Gradle. I've gone through many answers but they have not fixed my problem.

Gradle is giving me the following error message:

Error:Execution failed for task ':app:compileDebugNdk'.
Error: Your project contains C++ files but it is not using a supported native build system.
Consider using CMake or ndk-build integration with the stable Android Gradle plugin:
    https://developer.android.com/studio/projects/add-native-code.html
    or use the experimental plugin:
    http://tools.android.com/tech-docs/new-build-system/gradle-experimental.

Solution

  • Edit your build.gradle, add defaultConfig.externalNativeBuild.ndkBuild, externalNativeBuild.ndkBuild and sourceSet.main.jni.srcDir options. See the comments below.

    android {
            compileSdkVersion 22
            buildToolsVersion "27.0.0"
    
            defaultConfig {
                minSdkVersion 18
                targetSdkVersion 22
                versionCode 1
                versionName "1.0"
    
                //add arguments passed to ndkBuild 
                externalNativeBuild {
                    ndkBuild {
                        arguments "NDK_TOOLCHAIN_VERSION=clang", "APP_SHORT_COMMANDS=true", "APP_ALLOW_MISSING_DEPS=true"
                        arguments "-j" + Runtime.runtime.availableProcessors()
                        cFlags "-fexceptions"
                    }
                }
    
                ndk {
                    abiFilters "armeabi-v7a"
                }
            }
    
            //specify jni source file path
            sourceSets.main {
                java.srcDir "src"
                res.srcDir "res"
                jni.srcDir "jni"
            }
    
    
            buildTypes {
                debug {
                    debuggable true
                    jniDebuggable true
                }
            }
    
            //specify makefile / CMake file
            externalNativeBuild {
                ndkBuild {
                    path 'jni/Android.mk'
                }
            }
        }