我花了几个星期的时间学习如何从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的错误日志:
寻求帮助来完成我的论文,我很感谢这里的每一个建议。非常喜欢XOXO
发布于 2016-08-23 01:55:07
我以前还没有见过用于定义Gradle exec任务的这种语法。
task ndkBuild(type: Exec) {
executable "sh"
workingDir "src/main/jni"
args "build.sh"
}
根据Gradle docs,我会这样定义它
task ndkBuild(type: Exec) {
if (isWindows()) {
commandLine 'cmd', '/c', 'src/main/jni/build.bat'
}
else {
commandLine 'src/main/jni/build.sh'
}
}
发布于 2016-10-02 18:38:18
我也在与同样的问题作斗争(也是使用IBR DTN)。我可以通过将NDK-path添加到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
发布于 2017-10-05 15:34:37
好吧,对于初学者,我建议您使用与他们测试时完全相同的ndk版本。ndk。下载并解压缩它,然后直接在src/main/jni/build.sh
中更改变量path。然后运行脚本,它将构建该脚本,最后运行./gradlew
。我一次又一次地测试它,它只能在Linux上工作。我用的是mac,但有一些可怕的错误。我也在写论文。
https://stackoverflow.com/questions/39071161
复制相似问题