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
Antwort
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
.
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. –
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
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