无法使用位于不同目录

时间:2016-09-06 02:58:57

标签: android c++ android-ndk java-native-interface

我正在尝试在Android中使用Z压缩库。到目前为止,我已经使用NDK设置了Android Studio,示例项目正在顺利进行。一旦我将C文件添加到JNI文件夹,几个头文件就位于各个子文件夹中,并且Android Studio无法包含这些头文件,它说:cannot find 'xxxxx.h'

以前对同一个问题有答案,但许多已经过时且过时。我使用的是Android Studio 2.1.3,这是我的应用的build.gradle文件:

    apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = '23.0.2'

        defaultConfig {
            applicationId = 'com.example.hellojni'
            minSdkVersion.apiLevel = 4
            targetSdkVersion.apiLevel = 23
        }
        /*
         * native build settings: taking default for almost everything
         */
        ndk {
            moduleName = 'hello-jni'
            toolchain = 'clang'
            stl "stlport_shared"
            CFlags.addAll(['-Wall'])
        }
        buildTypes {
            release {
                minifyEnabled = false
                proguardFiles.add(file('proguard-rules.txt'))
            }
        }
        productFlavors {
            // for detailed abiFilter descriptions, refer to "Supported ABIs" @
            // https://developer.android.com/ndk/guides/abis.html#sa
            create("arm") {
                ndk.abiFilters.add("armeabi")
            }
            create("arm7") {
                ndk.abiFilters.add("armeabi-v7a")
            }
            create("arm8") {
                ndk.abiFilters.add("arm64-v8a")
            }
            create("x86") {
                ndk.abiFilters.add("x86")
            }
            create("x86-64") {
                ndk.abiFilters.add("x86_64")
            }
            create("mips") {
                ndk.abiFilters.add("mips")
            }
            create("mips-64") {
                ndk.abiFilters.add("mips64")
            }
            // To include all cpu architectures, leaves abiFilters empty
            create("all")
        }
    }
}

我试过了:

  • 包括cFlags += "-I" + file("src/main/jni/").absolutePath
  • 在gradle中添加stl "stlport_shared"

基于其他答案,但没有人确实解决了这个问题。如果有人之前已经解决了同样的错误,请帮助我。

1 个答案:

答案 0 :(得分:0)

假设我有一个名为Project的文件夹,它包含两个文件夹,其中包含类似命名的标题foo / foo.h和bar / bar.h。 Foo想要.. bar.h,但它不能在它的当前文件范围内执行此操作。它必须将一个目录放在Project后面。为此,可以使用通用符号#include "../bar/bar.h"

#include

故事的道德:文件夹名称在meteor声明中完全合理。