5

gstreamer-sdk-android-arm-debug-2013.6 번들로 제공되는 자습서를 작성하려고합니다. src/jni 디렉토리 (자습서 1 프로젝트)에있는 Android.mk 파일은 GSTREAMER_SDK_ROOT과 같은 환경 변수를 참조합니다. 내가 읽은 것부터, Android Studio는 환경 변수를 빌드 스크립트에 사용/전달하지 않습니다. makefile을 수정하고 빌드 스크립트에 필요한 키/값 쌍을 정의/검색하는 모범 사례가 있습니까?Android Studio를 사용하여 GStreamer 자습서를 만들 수 없습니다.

+0

Android Studio에서 Makefile을 사용할 수 없으므로 텍스트 편집기 이상으로 사용하려면 Gradle 빌드 파일을 설정해야합니다. –

+0

mupdf와 같은 다른 프로젝트의 ndk 구성 요소에 Android Studio와 함께 makefile을 사용하고 있는데 제대로 작동합니다. 내가 볼 수있는 유일한 문제는 Android.mk에서 GStreamer 자습서에 사용되는 환경 변수입니다. Android.mk 파일의 값을 하드 코딩 할 수 있으며 빌드가 가능할 것이라고 확신합니다. 그러나 더 나은 방법이 있다고 생각합니다. – svenyonson

+0

그렇다면이 자습서를 Gradle 빌드 파일 만 사용하도록 변환 할 수있는 방법이 있다면 그 부분 만 활용할 수 있습니다. 그러나 시작할 위치를 모르겠습니다. – svenyonson

답변

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를 들어, 내가 생성 된 프로세스의 기본을 사용하고 내가 필요한 것을 추가.

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

이 프로젝트는 이제 빌드 및 실행 : 여기

build.gradle의 작업 버전입니다.

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를 사용하여 구축하지 않습니다 당신이 할 필요가있을 경우에만 다른 것들은 local.properties에 ndk.dir를 추가합니다. android-ndk-r9d을 사용해야합니다.

관련 문제