首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows或Linux Android Studio上的ndkBuild进程‘命令'sh’失败

Windows或Linux Android Studio上的ndkBuild进程‘命令'sh’失败
EN

Stack Overflow用户
提问于 2016-08-22 11:51:51
回答 4查看 2.7K关注 0票数 1

我花了几个星期的时间学习如何从IBR-DTN Github编译IBR-DTN源码,现在我被Android NDK的东西卡住了。在这里我的失败日志在Android Studio上,我尝试Windows版本和Linux版本总是有相同的错误

代码语言:javascript
运行
复制
Error:Execution failed for task ':app:ndkBuild'. 
> A problem occurred starting process 'command 'sh''

这是我的build.gradle

代码语言:javascript
运行
复制
    apply plugin: 'android-sdk-manager'
    apply plugin: 'com.android.application'

def createVersionName() {
    if (System.getenv().containsKey("BUILD_NUMBER")) {
        if (System.getenv().containsKey("GIT_COMMIT")) {
            return rootProject.ext.versionName + "-" + System.getenv("GIT_COMMIT").substring(0, 7)
        } else {
            return rootProject.ext.versionName + "-" + System.getenv("BUILD_NUMBER")
        }
    } else {
        return rootProject.ext.versionName
    }
}

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    buildToolsVersion rootProject.ext.buildToolsVersion

    defaultConfig {
        applicationId "de.tubs.ibr.dtn"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode System.getenv("BUILD_NUMBER") as Integer ?: rootProject.ext.versionCode
        versionName createVersionName()
    }
    signingConfigs {
        release {
            storeFile file(System.getenv("KEYSTORE") ?: "publish.keystore")
            storePassword System.getenv("KEYSTORE_PASSWD")
            keyAlias System.getenv("KEY_ALIAS") ?: android.defaultConfig.applicationId
            keyPassword System.getenv("KEY_PASSWD")
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jniLibs.srcDir 'src/main/libs'
        jni.srcDirs = []
    }
}

// enable signing if the keystore exists
if (android.signingConfigs.release.storeFile.exists()) {
    android.buildTypes.release.signingConfig = android.signingConfigs.release
}

task ndkBuild(type: Exec) {
    executable "sh"
    workingDir "src/main/jni"
    args "build.sh"
}
preBuild.dependsOn ndkBuild

dependencies {
    compile 'de.tubs.ibr.dtn:library:1.1.2'
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.jjoe64:graphview:3.1.+'
    compile 'com.google.zxing:core:3.2.+'
    compile 'com.google.zxing:android-integration:3.2.+'
}

以下是Android Studio的错误日志:

寻求帮助来完成我的论文,我很感谢这里的每一个建议。非常喜欢XOXO

EN

回答 4

Stack Overflow用户

发布于 2016-08-23 01:55:07

我以前还没有见过用于定义Gradle exec任务的这种语法。

代码语言:javascript
运行
复制
task ndkBuild(type: Exec) {
    executable "sh"
    workingDir "src/main/jni"
    args "build.sh"
}

根据Gradle docs,我会这样定义它

代码语言:javascript
运行
复制
task ndkBuild(type: Exec) {
    if (isWindows()) {
        commandLine 'cmd', '/c', 'src/main/jni/build.bat'
    }
    else {
        commandLine 'src/main/jni/build.sh'
    }
}
票数 0
EN

Stack Overflow用户

发布于 2016-10-02 18:38:18

我也在与同样的问题作斗争(也是使用IBR DTN)。我可以通过将NDK-path添加到src/main/jni/build.sh脚本中的PATH变量来解决这个问题。

代码语言:javascript
运行
复制
#!/bin/sh
PATH=/…/android-sdk/ndk-bundle/:$PATH
export PATH
…

此链接也可能对您有所帮助:

https://github.com/ibrdtn/ibrdtn/wiki/Build-IBR-DTN-for-Android

票数 0
EN

Stack Overflow用户

发布于 2017-10-05 15:34:37

好吧,对于初学者,我建议您使用与他们测试时完全相同的ndk版本。ndk。下载并解压缩它,然后直接在src/main/jni/build.sh中更改变量path。然后运行脚本,它将构建该脚本,最后运行./gradlew。我一次又一次地测试它,它只能在Linux上工作。我用的是mac,但有一些可怕的错误。我也在写论文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39071161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档