Unable to build GStreamer tutorials using Android Studio

前端 未结 1 812
灰色年华
灰色年华 2020-12-18 07:26

I am trying to build the tutorials that are bundled with gstreamer-sdk-android-arm-debug-2013.6. The Android.mk file in the src/jni di

相关标签:
1条回答
  • 2020-12-18 08:03

    Ok, I have a working solution. You CAN pass environment variables to ndk-build (or any other process spawned by gradle Exec). In my case, I wanted to set these for both the clean and build tasks. This is is done using tasks.withType(Exec). The environment parameter is set here for all Exec tasks.

    For GSTREAMER_SDK_ROOT, I added an entry to local.properties:

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

    For PATH, I used the default for the spawned process and added in what I needed.

    Here is a working version of 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'
            }
        }
    }
    

    The project now builds and runs. The only other things you will need to do is add ndk.dir to 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
    

    One more thing: These examples will not build using android-ndk-r10d. Be sure to use android-ndk-r9d.

    0 讨论(0)
提交回复
热议问题