当我尝试构建oculus mobile sdk的示例项目时,我遇到了以下一些错误。
Error:FAILURE: Build failed with an exception.
-
地点:构建文件"~/oculus_sdk/ovr_sdk_mobile_1.0.0.1/VrSamples/Native/CinemaSDK/Projects/Android/Build"。gradle' line: 28
-
哪里出错了:配置项目':VrSamples:Native:CinemaSDK:Projects:Android'时出现问题。
无法获取项目':VrSamples:Native:CinemaSDK:Projects:Android'的未知属性'compileReleaseNdk',类型为org.gradle.api.Project.
-
试题:使用——stacktrace选项运行以获取堆栈跟踪。使用——info或——debug选项运行以获得更多的日志输出。
有人能解决这个问题吗?
我的开发环境如下。
- Android studio 2.2 Android NDK: Android - NDK -r12bOculus Mobile 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)
}
}
}
我已经在类似的问题上找到了一个很好的答案:执行任务失败':app:compileDebugNdk'运行命令失败ndk-build.cmd
Error:Execution failed for task ':app:compileDebugNdk'.
表示gradle android插件正在尝试调用ndk-build本身来编译你的源代码。你应该得到更多的细节日志窗口中的错误代码。
无论如何,目前它使用自动生成的Makefile和忽略您的文件,因为您需要集成ffmpeg,因此无法工作。
为了克服这个问题,你应该禁用插件的自动ndk集成并使它使用标准的库位置来获取您的所以文件:从这里你可以自己调用ndk-build,或者让gradle调用它给你:sourceSets.main { jniLibs.srcDir 'src/main/libs' jni.srcDirs = [] //disable automatic ndk-build call }
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 }
有关这一切的更多信息,您可以查看此要点和我的博客。
你所需要做的就是通过在构建中添加以下属性来禁用ndk-build。gradle文件。
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = [] //disable automatic ndk-build call
}
或删除第二行:jni.srcDirs = [...]
希望对大家有所帮助