2016-08-22 68 views
1

几个星期,我学会了如何编译来自IBR-DTN Github的IBR-DTN源码,现在我被卡在Android NDK的东西。 在Android工作室在这里我失败日志,我试过Windows版本和Linux版本总有相同的错误在Windows或Linux上失败的ndkBuild进程'命令sh'Android Studio

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中的错误日志: Here is the error log from Android Studio

寻求帮助完成我的论文,我欣赏每一个单一的建议在这里。很喜欢XOXO

+0

我没有直接从工作室运行它,我总是使用命令行。这个回购更容易 – Abk

回答

0

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

+0

这是应用程序构建过程中的一个问题。它与手机的root访问无关。 – Manuel

0

我还没有见过用于定义Gradle执行任务的语法。

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' 
    } 
} 
+0

语法真的有点不常见,但实际上两个版本都工作正常。 – Manuel

0

好了首发我会建议你使用完全相同反对,他们测试了相同的NDK版本。 ndk。下载并解压缩,然后直接在src/main/jni/build.sh中直接更改变量路径。然后运行它将构建它的脚本,最后运行./gradlew。我一次又一次地测试它,它只能在Linux上运行。我使用了mac,但有一些可怕的错误。我也在做它的论文