Android Studio 1.1.0不再支持NDK。

6

目前正在运行 Android Studio 1.1.0 版本。已经安装了 NDK,并将链接添加到 build.gradle 文件中。构建项目会生成一个跟踪信息,其中包含以下文本。

WARNING [Project: :app] Current NDK support is deprecated.  Alternative will be provided in the future.

android-ndk-r10d\ndk-build.cmd'' finished with non-zero exit value 1
< p > Android Studio是否不支持NDK r10d?< /p >

1
可能是Android Studio,Gradle和NDK的重复问题。 - Dan Albert
3个回答

10

目前的NDK支持仍适用于简单项目(即不依赖其他NDK预构建库的C/C++源码),包括使用最新的r10d NDK时也可以。

但它的功能非常有限,正如警告所说,它已被弃用。

我建议的做法是简单地禁用它,并让gradle直接调用ndk-build。这样你就可以保留经典的Android.mk/Application.mk配置文件,并且从你的项目中调用ndk-build将与eclipse项目一样工作:

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

...

android {  
  ...
  sourceSets.main {
        jniLibs.srcDir 'src/main/libs' //set .so files location to libs instead of jniLibs
        jni.srcDirs = [] //disable automatic ndk-build call
    }

    // add a task that calls regular ndk-build(.cmd) script from app directory
    task ndkBuild(type: Exec) {
        if (Os.isFamily(Os.FAMILY_WINDOWS)) {
            commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
        } else {
            commandLine 'ndk-build', '-C', file('src/main').absolutePath
        }
    }

    // add this task as a dependency of Java compilation
    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn ndkBuild
    }
}

那个“absolutePath”是什么? - dharmendra

1

我使用以下方法构建ndk-build的绝对路径:

def getNdkBuildExecutablePath() {
    File ndkDir = android.ndkDirectory
    if (ndkDir == null) {
        throw new Exception('NDK directory is not configured.')
    }
    def isWindows = System.properties['os.name'].toLowerCase().contains('windows')
    def ndkBuildFile = new File(ndkDir, isWindows ? 'ndk-build.cmd' : 'ndk-build')
    if (!ndkBuildFile.exists()) {
        throw new Exception(
            "ndk-build executable not found: $ndkBuildFile.absolutePath")
    }
    ndkBuildFile.absolutePath
}

用法:

commandLine getNdkBuildExecutablePath(), '-C', ...

1

1
那个发布说明中写着“抱歉,此版本尚未包含C/C++支持”的人?除非这是一个不同的功能,否则听起来像是指NDK。 - kaay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接