2014-12-17 18 views
5

gstreamer-sdk-android-arm-debug-2013.6 ile birlikte gelen eğiticileri oluşturmaya çalışıyorum. src/jni dizinindeki (eğitim 1 projesi) Android.mk dosyası, GSTREAMER_SDK_ROOT gibi ortam değişkenlerine başvurur. Okuduğum kadarıyla, Android Studio, oluşturma değişkenlerine ortam değişkenlerini kullanmıyor/geçirmiyor. Makefile'leri değiştirmek ve derleme komut dosyalarının gerektirdiği anahtar/değer çiftlerini tanımlamak/almak için en iyi uygulama var mı?Android Studio kullanarak GStreamer eğiticileri oluşturulamıyor

+0

Android Studio, Makefiles ile çalışamaz, bu yüzden onu bir metin düzenleyiciden başka bir şey olarak kullanmak istiyorsanız Gradle derleme dosyaları oluşturmanız gerekir. –

+0

Android Studio ile mupdf gibi diğer projelerde ndk bileşeni için makefiles kullanıyorum ve iyi çalışıyor. Gördüğüm tek sorun, GStreamer öğreticileri için Android.mk tarafından kullanılan bu ortam değişkenleri ile ilgilidir. Android.mk dosyalarındaki değerleri kodlayabilirim ve yapacağıma gayet eminim - ama sanırım daha iyi bir yol var. – svenyonson

+0

Bu öğreticilerin yalnızca Gradle derleme dosyalarını kullanacak şekilde dönüştürülmesinin bir yolu varsa, bunun için her şeyden önce gelirim - ama nereden başlayacağımı bilmiyorum. – svenyonson

cevap

4

Tamam, bir çalışma çözümüm var. Ortam değişkenlerini ndk-build (veya Exec tarafından yakalanan başka herhangi bir işlem) geçirebilirsiniz. Benim durumumda bunları hem clean hem de build görevler için ayarlamak istedim. Bu tasks.withType(Exec) kullanılarak yapılır. Tüm Exec görevleri için ortam parametresi burada ayarlanır. GSTREAMER_SDK_ROOT için

, ben local.properties bir giriş ekledi:

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

PATH için, ben kökenli işlemi için varsayılan kullanılır ve gerekeni eklendi.

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

proje şimdi oluşur ve çalışır: Burada

build.gradle bir çalışma versiyonudur.

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 

Bir şey daha:: Bu örnekler android-ndk-r10d kullanarak inşa etmeyeceğini yapmanız gereken tek başka şeyler local.properties için ndk.dir eklemektir. android-ndk-r9d'u kullandığınızdan emin olun.