【问题标题】:Unable to build GStreamer tutorials using Android Studio无法使用 Android Studio 构建 GStreamer 教程
【发布时间】:2015-02-16 06:39:09
【问题描述】:

我正在尝试构建与gstreamer-sdk-android-arm-debug-2013.6 捆绑在一起的教程。 src/jni目录下的Android.mk文件(教程1项目)引用了GSTREAMER_SDK_ROOT等环境变量。根据我的阅读,Android Studio 不使用/将环境变量传递给构建脚本。是否有修改 makefile 和定义/检索构建脚本所需的键/值对的最佳实践?

【问题讨论】:

  • Android Studio 无法与 Makefile 一起使用,因此如果您想将其用作文本编辑器以外的任何东西,则必须设置 Gradle 构建文件。
  • 我在其他项目(例如 mupdf)中将 makefile 与 Android Studio 一起用于 ndk 组件,它工作正常。我看到的唯一问题是 Android.mk 用于 GStreamer 教程的这些环境变量。我可以硬编码 Android.mk 文件中的值,我很确定它会构建 - 但我猜有更好的方法。
  • 也就是说,如果有办法将这些教程转换为仅使用 Gradle 构建文件,我会全力以赴 - 但不知道从哪里开始。

标签: android android-studio gstreamer android-ndk-r5 ndk-build


【解决方案1】:

好的,我有一个可行的解决方案。您可以将环境变量传递给ndk-build(或由 gradle Exec 生成的任何其他进程)。就我而言,我想为cleanbuild 任务设置这些。这是使用tasks.withType(Exec) 完成的。此处为所有 Exec 任务设置环境参数。

对于GSTREAMER_SDK_ROOT,我在local.properties添加了一个条目:

gst.dir=/Users/svenyonson/sdk/gstreamer-sdk-android-arm-debug-2013.6

对于PATH,我使用生成进程的默认值并添加了我需要的内容。

这是build.gradle的工作版本:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "com.gst_sdk_tutorials.tutorial_1"
        minSdkVersion 19
        targetSdkVersion 19
    }

    sourceSets.main {
        jni.srcDirs = []
        jniLibs.srcDir 'src/main/libs'
        java.srcDirs += 'src/main/jni/src'
    }

    tasks.withType(Exec) {

        def localProperties = new Properties()
        localProperties.load(project.rootProject.file('local.properties').newDataInputStream())
        def gstDir = localProperties.getProperty('gst.dir')

        environment = [:]
        environment['PATH'] = System.getenv("PATH")+ ":/usr/local/bin"
        environment['GSTREAMER_SDK_ROOT'] = gstDir
    }


    task buildNative(type: Exec, description: 'Compile JNI source via NDK') {

        def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
        commandLine "$ndkDir/ndk-build",
            '-C', file('src/main/jni').absolutePath,
            '-j', Runtime.runtime.availableProcessors(),
            'all',
            'NDK_DEBUG=1',
            'V=1',
            'APP_PLATFORM=android-19'

    }

    task cleanNative(type: Exec, description: 'Clean JNI object files') {
        def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
        commandLine "$ndkDir/ndk-build",
            '-C', file('src/main/jni').absolutePath,
            'clean'
    }

    clean.dependsOn 'cleanNative'

    tasks.withType(JavaCompile) {
        compileTask -> compileTask.dependsOn buildNative
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

项目现在构建并运行。您需要做的唯一其他事情是将ndk.dir 添加到local.properties:

sdk.dir=/Users/svenyonson/sdk/android-sdk
ndk.dir=/Users/svenyonson/sdk/android-ndk-r9d
gst.dir=/Users/svenyonson/sdk/gstreamer-sdk-android-arm-debug-2013.6

还有一件事:这些示例不会使用android-ndk-r10d 构建。请务必使用android-ndk-r9d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多