Я пытаюсь создать учебники, которые входят в комплект gstreamer-sdk-android-arm-debug-2013.6
. Файл Android.mk
в каталоге src/jni
(проект учебника 1) ссылается на переменные окружения, такие как GSTREAMER_SDK_ROOT
. Из того, что я прочитал, Android Studio не использует/пропускает переменные среды для скриптов сборки. Существует ли наилучшая практика для модификации make-файлов и для определения/получения пар ключ/значение, необходимых для скриптов сборки?Не удается построить обучающие материалы GStreamer с помощью Android Studio
ответ
Хорошо, у меня есть рабочее решение. Вы МОЖЕТЕ передавать переменные среды в ndk-build
(или любой другой процесс, порожденный gradle Exec). В моем случае я хотел установить их для задач clean
и build
. Это делается с использованием 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
Еще одна вещь: Эти примеры не будут строить, используя android-ndk-r10d
. Обязательно используйте android-ndk-r9d
.
Android Studio не может работать с Make-файлами, поэтому вам нужно будет настроить файлы сборки Gradle, если вы хотите использовать их как нечто большее, чем текстовый редактор. –
Я использую make-файлы с Android Studio для компонента ndk в других проектах, таких как mupdf, и он отлично работает. Единственная проблема, которую я вижу, - это эти переменные среды, используемые Android.mk для учебников GStreamer. Я мог бы жестко кодировать значения в файлах Android.mk, и я уверен, что он будет строить, но я предполагаю, что есть лучший способ. – svenyonson
Тем не менее, если есть способ конвертировать эти учебные пособия, чтобы использовать только файлы сборки Gradle, я буду для него все - но не знаю с чего начать. – svenyonson