2014-12-17 16 views
5

Ich versuche, die Tutorials zu erstellen, die mit gstreamer-sdk-android-arm-debug-2013.6 gebündelt sind. Die Datei Android.mk im Verzeichnis src/jni (Tutorial 1 Projekt) verweist auf Umgebungsvariablen wie GSTREAMER_SDK_ROOT. Nach dem, was ich gelesen habe, verwendet Android Studio keine Umgebungsvariablen zu den Build-Skripten. Gibt es eine bewährte Methode zum Ändern von Makefiles und zum Definieren/Abrufen der Schlüssel/Wert-Paare, die von den Erstellungsscripts benötigt werden?Ich kann keine GStreamer-Tutorials mit Android Studio erstellen

+0

Android Studio kann nicht mit Makefiles arbeiten, daher müssen Sie Gradle-Build-Dateien einrichten, wenn Sie es als mehr als einen Texteditor verwenden möchten. –

+0

Ich benutze Makefiles mit Android Studio für die ndk-Komponente in anderen Projekten, wie mupdf und es funktioniert gut. Das einzige Problem, das ich sehe, ist mit diesen Umgebungsvariablen, die von Android.mk für die GStreamer-Tutorials verwendet werden. Ich könnte die Werte in den Android.mk-Dateien fest codieren und ich bin mir ziemlich sicher, dass es sich entwickeln würde - aber ich vermute, dass es einen besseren Weg gibt. – svenyonson

+0

Das heißt, wenn es eine Möglichkeit gibt, diese Tutorials zu konvertieren, nur Gradle Build-Dateien zu verwenden, wäre ich dafür - aber ich weiß nicht, wo ich anfangen soll. – svenyonson

Antwort

4

Ok, ich habe eine funktionierende Lösung. Sie können Umgebungsvariablen an ndk-build übergeben (oder an einen anderen Prozess, der durch Ausführen von Exec hervorgebracht wird). In meinem Fall wollte ich diese sowohl für die clean und build Aufgaben festlegen. Dies geschieht mit tasks.withType(Exec). Der Umgebungsparameter wird hier für alle Exec-Tasks festgelegt.

Für GSTREAMER_SDK_ROOT, habe ich einen Eintrag local.properties:

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

Für PATH, ich verwendet, um die Standardeinstellung für den erzeugten Prozess und fügte hinzu, in dem, was ich brauchte.

Hier ist eine funktionierende Version von 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' 
     } 
    } 
} 

Das Projekt jetzt baut und läuft. Die einzige andere Dinge, die Sie benötigen, ist ndk.dir zu local.properties hinzufügen zu tun:

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 

Eine weitere Sache: Diese Beispiele bauen nicht android-ndk-r10d verwenden. Verwenden Sie unbedingt android-ndk-r9d.