1

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

Error:Execution failed for task ':app:ndkBuild'. 
> A problem occurred starting process 'command 'sh''

这是我的 build.gradle

    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 的错误日志: 这是来自 Android Studio 的错误日志

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

4

4 回答 4

1

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

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

根据Gradle 文档,我会这样定义它:

task ndkBuild(type: Exec) {
    if (isWindows()) {
        commandLine 'cmd', '/c', 'src/main/jni/build.bat'
    }
    else {
        commandLine 'src/main/jni/build.sh'
    }
}
于 2016-08-22T17:55:07.033 回答
0

我正在与同样的问题作斗争(也与 IBR DTN)。我可以通过将 NDK 路径添加到src/main/jni/build.sh脚本内的 PATH 变量来解决问题。

#!/bin/sh
PATH=/…/android-sdk/ndk-bundle/:$PATH
export PATH
…

这个链接也可能有帮助:

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

于 2016-10-02T10:38:17.897 回答
0

首先,我建议您使用与他们测试过的完全相同的 ndk 版本。ndk _ 下载并解压,然后直接在 src/main/jni/build.sh. 然后运行它将构建它的脚本,最后运行./gradlew. 我一次又一次地测试它,它只适用于Linux。我使用了mac,但出现了一些可怕的错误。我也在做论文

于 2017-10-05T07:34:36.683 回答
-1

我认为您的应用程序需要 ROOT 权限。

于 2016-08-22T05:23:14.707 回答