5

にバンドルされているチュートリアルをビルドしようとしていgstreamer-sdk-android-arm-debug-2013.6ます。ディレクトリ内のAndroid.mkファイルsrc/jni(チュートリアル 1 プロジェクト) は、GSTREAMER_SDK_ROOT. 私が読んだことから、Android Studio はビルド スクリプトに環境変数を使用/渡しません。makefile を変更し、ビルド スクリプトに必要なキーと値のペアを定義/取得するためのベスト プラクティスはありますか?

4

1 に答える 1

4

わかりました、私は実用的な解決策を持っています。環境変数を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

もう 1 つ: これらの例は、 を使用してビルドされませんandroid-ndk-r10d。必ずご利用くださいandroid-ndk-r9d

于 2014-12-17T22:40:04.180 に答える