升级GStreamer。预期的NDK STL共享对象文件

问题描述 投票:0回答:1

我一直试图在我的安卓应用程序中把GStreamer从1.14升级到1.16版本,但遇到了一些问题。根据gstreamer的网站,1.16版本需要Android NDK r18b。当我尝试用NDK r18b运行GStreamer 1.16时,我在android studio中得到一个错误。

Expected ndk stl shared object file at /home/exjobb/Documents/android-ndk-r18-b-linux-x86_64/android-ndk-r18b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a /libgnustl_shared.so

cxx-stl文件夹不在我的电脑上,后面的文件夹文件也不在。

我上网查了一下,似乎一般的建议是降级到r17c。如果GStreamer 1.16需要r18b,我就不能这么做了。

这里可能是什么问题?

EDIT.我有两个不同的build.gradle。

我有两个不同的 build.gradle 文件。

这是第一个文件。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "se.liu.mrleo"
        minSdkVersion 23
        versionCode 1
        versionName "1.0"

        externalNativeBuild {
            ndkBuild {
                def gstRoot
                if (project.hasProperty('gstAndroidRoot'))
                    gstRoot = project.gstAndroidRoot
                else
                    gstRoot = System.env.GSTREAMER_ROOT_ANDROID
                if (gstRoot == null)
                    throw new FileNotFoundException('GSTREAMER_ROOT_ANDROID not set')

                arguments "NDK_APPLICATION_MK=jni/Application.mk",
                        "GSTREAMER_JAVA_SRC_DIR=src",
                        "GSTREAMER_ROOT_ANDROID=$gstRoot",
                        "GSTREAMER_ASSETS_DIR=src/main/assets"

                targets "gstmredge"

                abiFilters  'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }
    }


    externalNativeBuild {
        ndkBuild {
            path 'jni/Android.mk'
            //path 'jni/Application.mk'
        }
    }

    buildToolsVersion = '28.0.3'
    compileOptions {
        sourceCompatibility = '1.8'
        targetCompatibility = '1.8'
    }
}

afterEvaluate {
    if (project.hasProperty('compileDebugJavaWithJavac')) {
        project.compileDebugJavaWithJavac.dependsOn 'externalNativeBuildDebug'
    }
    if (project.hasProperty('compileReleaseJavaWithJavac')) {
        project.compileReleaseJavaWithJavac.dependsOn 'externalNativeBuildRelease'
    }
}


dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    api project(':rtplibrary')

    // Edge
    implementation 'com.obsez.android.lib.filechooser:filechooser:1.1.19'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'

    // ARCore
    implementation 'de.javagl:obj:0.3.0'
    implementation 'com.google.ar:core:1.9.0'
}

这是第二个

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.6.3'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

android android-ndk gstreamer gstreamer-1.0 java-gstreamer
1个回答
0
投票

如果我的假设是对的,错误信息实际上是 "Expected NDK STL shared object"(大写的 "NDK "和 "STL"),这个错误来自android gradle插件。

https:/android.googlesource.complatformtoolsbase+refsheadsstudio-master-devbuild-systemgradle-coresrcmainjavacomandroidbuildgradleinternalndkNdkR19Info.kt#31。

没有 NdkR18Info......libstdc++和stlport的支持被取消了。r18而不是r19。使用AGP 3.6和NDK r18就可以简单地重现这种情况。

* What went wrong:
Execution failed for task ':app:generateJsonModelArm8Debug'.
> Expected NDK STL shared object file at /usr/local/google/home/danalbert/Android/Sdk/ndk/18.1.5063045/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_shared.so

这只是AGP 3.6(或更高)和NDK r18组合中的一个错误。你不能将它们一起使用。最简单的解决方法是更新NDK(反正r18已经很老了,r21b是最新的)。添加 ndkVersion "21.1.6352462"android 的块中就可以了。

我已经发了一个补丁来修复这个bug,但是由于之前没有人报告过这个问题,所以很难说这个问题的影响足够大,需要进行回溯。我会看看是否至少能把它放到 4.0 或 4.1 中。

© www.soinside.com 2019 - 2024. All rights reserved.