0

当我尝试构建 oculus mobile sdk 的示例项目时,我在下面遇到了一些错误。


错误:FAILURE:构建失败并出现异常。

  • 其中:构建文件 '~/oculus_sdk/ovr_sdk_mobile_1.0.0.1/VrSamples/Native/CinemaSDK/Projects/Android/build.gradle' 行:28

  • 出了什么问题:配置项目 ':VrSamples:Native:CinemaSDK:Projects:Android' 时出现问题。

    无法为 org.gradle.api.Project 类型的项目 ':VrSamples:Native:CinemaSDK:Projects:Android' 获取未知属性 'compileReleaseNdk'。

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。


有人可以解决这个问题吗?

我的开发环境如下。

  • 安卓工作室 2.2
  • Android NDK:android-ndk-r12b
  • Oculus 移动 SDK:1.0.0.1
  • OSX 10.11.6

Debug消息中提到的gradle文件内容是这样的......

apply plugin: 'com.android.application'

dependencies {
    compile name: 'VrAppFramework', ext: 'aar'
    compile project(':VrAppSupport:SystemUtils:Projects:AndroidPrebuilt')
    compile project(':VrAppSupport:VrGUI:Projects:AndroidPrebuilt')
    compile project(':VrAppSupport:VrLocale:Projects:AndroidPrebuilt')
    compile project(':VrAppSupport:VrSound:Projects:AndroidPrebuilt')
}

android {
    compileSdkVersion 19
    buildToolsVersion '24.0.1'

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            jniLibs.srcDir 'libs'
            res.srcDirs = ['res']
            assets.srcDirs = ['../../assets']
        }
    }
}

project.afterEvaluate {
  compileDebugNdk.dependsOn   'NDKBuildDebug'
  compileReleaseNdk.dependsOn 'NDKBuildRelease'
  clean.dependsOn             'NDKBuildClean'
}

android.applicationVariants.all { variant ->
      variant.outputs.each { output ->
            def alignedOutputFile = output.outputFile
            def unalignedOutputFile = output.packageApplication.outputFile
            def buildTypeName = variant.buildType.name

            def finalFileName = rootProject.name + "-" + buildTypeName + ".apk"
            def unAlignedFileName = rootProject.name + "-" + buildTypeName + "-unsigned" + ".apk"

            output.packageApplication.outputFile = 
                    new File(unalignedOutputFile.parent, unAlignedFileName)

            if (output.zipAlign) {
                output.outputFile = 
                    new File(alignedOutputFile.parent, finalFileName)
            }
    }
}
4

1 回答 1

0

我已经在类似问题上找到了一个很好的答案: 任务':app:compileDebugNdk'的执行失败未能运行此命令ndk-build.cmd

Error:Execution failed for task ':app:compileDebugNdk'.

意味着 gradle android 插件正在尝试调用 ndk-build 本身来编译您的源代码。您应该在日志窗口中获得比错误代码更多的详细信息。

无论如何,目前它使用自动生成的 Makefile 执行此操作并忽略您的,因为您需要集成 ffmpeg,所以它无法工作。

为了克服这个问题,您应该禁用插件的自动 ndk 集成,并使其使用标准位置来获取您的 .so 文件:

sourceSets.main {
    jniLibs.srcDir 'src/main/libs'
    jni.srcDirs = [] //disable automatic ndk-build call
}

从那里你可以自己调用ndk-build,或者让 gradle 为你调用它:

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

// call 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
    }
}

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

有关为什么这一切的更多信息,您可以查看此要点和我的博客文章

您需要做的就是通过在 build.gradle 文件中添加以下属性来禁用 ndk-build

sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = [] //disable automatic ndk-build call
    }

或删除第二行:jni.srcDirs = [...]

希望它会有所帮助

于 2016-08-10T15:17:45.023 回答