当前位置: 首页 > 知识库问答 >
问题:

Android v1p1beta1语音-java.lang.NoSuchMultiodError: No静态方法decdeBase64

程化
2023-03-14

当我使用Android Studio使用google v1speech library构建测试语音应用程序时,效果很好。使用v1p1beta1speech library,当它访问json凭据文件和旧式commons编解码器并生成以下错误时,会发生运行时错误:

JAVAlang.NoSuchMethodError:没有静态方法decodeBase64(Ljava/lang/String;)[B类Lorg/apache/commons/codec/binary/Base64;或其超类(在/system/framework/org.apache.commons.codec.binary.Base64中出现'org.apache.codec.Base64'声明)

如何使v1p1beta1语音库不使用旧的通用库版本?

以下是gradle文件,其中引用了最新的v1p1beta1speech和grpc库:

    apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'

ext {
    supportLibraryVersion = '25.4.0'
    grpcVersion = '1.4.0'
}

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.3'

    defaultConfig {
        applicationId "com.google.cloud.android.speech"
        targetSdkVersion 24
        versionCode 1
        versionName '1.0'
    }

    packagingOptions {
        pickFirst  '**'
    }

    signingConfigs {
        release {
            storeFile file(project.properties.storeFile)
            storePassword project.properties.storePassword
            keyAlias project.properties.keyAlias
            keyPassword project.properties.keyPassword
        }
    }

    productFlavors {
        dev {
            // Minimum version with platform multi-dex support
            minSdkVersion 22
        }
        prod {
            // Minimum version that can run gRPC (TLS extension)
            minSdkVersion 16
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
            multiDexEnabled true
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:3.0.2'
        resolutionStrategy.force "com.android.support:support-annotations:$supportLibraryVersion"
    }
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.3.0'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.plugins {
                javalite {}
                grpc {
                    option 'lite'
                }
            }
        }
    }
}

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

    // Support libraries
    compile "com.android.support:design:$supportLibraryVersion"
    compile "com.android.support:cardview-v7:$supportLibraryVersion"
    compile "com.android.support:recyclerview-v7:$supportLibraryVersion"

    // Google Cloud Speech beta
    compile "com.google.cloud:google-cloud-speech:0.74.0-beta"
    compile "com.google.api.grpc:grpc-google-cloud-speech-v1p1beta1:0.39.0"

    // gRPC
    compile "io.grpc:grpc-okhttp:$grpcVersion"
    compile "io.grpc:grpc-protobuf-lite:$grpcVersion"
    compile "io.grpc:grpc-stub:$grpcVersion"
    compile 'javax.annotation:javax.annotation-api:1.2'
    protobuf 'com.google.protobuf:protobuf-java:3.3.1'

    // OAuth2 for Google API
    compile('com.google.auth:google-auth-library-oauth2-http:0.12.0') {
        exclude module: 'httpclient'
    }

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

    // Support libraries
    //compile 'commons-codec:commons-codec:1.11'
    compile "com.android.support:design:$supportLibraryVersion"
    compile "com.android.support:cardview-v7:$supportLibraryVersion"
    compile "com.android.support:recyclerview-v7:$supportLibraryVersion"

    // Google Cloud Speech beta
    compile "com.google.cloud:google-cloud-speech:0.74.0-beta"
    compile "com.google.api.grpc:grpc-google-cloud-speech-v1p1beta1:0.39.0"

    // gRPC
    compile "io.grpc:grpc-okhttp:$grpcVersion"
    compile "io.grpc:grpc-protobuf-lite:$grpcVersion"
    compile "io.grpc:grpc-stub:$grpcVersion"
    compile 'javax.annotation:javax.annotation-api:1.2'
    protobuf 'com.google.protobuf:protobuf-java:3.3.1'

    // OAuth2 for Google API
    compile('com.google.auth:google-auth-library-oauth2-http:0.12.0') {
        exclude module: 'httpclient'
    }

以下是堆栈跟踪错误输出:

原因:java。lang.NoSuchMethodError:没有静态方法decodeBase64(Ljava/lang/String;)[B在课堂上

共有1个答案

端木皓君
2023-03-14

那个版本的库似乎有问题。以下是@ajaaym的变通方法

从依赖关系中删除:

compile "com.google.api.grpc:grpc-google-cloud-speech-v1p1beta1:0.39.0"

添加以下代码:

FixedCredentialsProvider fixedCredentialsProvider = FixedCredentialsProvider.create(GoogleCredentials.create(null));
    try(SpeechClient client = SpeechClient.create(SpeechSettings.newBuilder().setCredentialsProvider(fixedCredentialsProvider).build())) {
    } catch (IOException e) {
      e.printStackTrace();
    }

我建议使用最新的可用库

 类似资料:
  • rank ▲ ✰ vote url 31 549 117 733 url 静态方法 Python有没有静态方法使我可以不用实例化一个类就可以调用,像这样: ClassName.StaticMethod ( ) 是的,用静态方法装饰器 class MyClass(object): @staticmethod def the_static_method(x): pri

  • 我们可以把一个方法赋值给类的函数本身,而不是赋给它的 "prototype"。这样的方法被称为 静态的(static)。 在一个类中,它们以 static 关键字开头,如下所示: class User { static staticMethod() { alert(this === User); } } User.staticMethod(); // true 这实际上跟直接将其

  • 问题内容: 到目前为止,我有以下代码: } 当我尝试在末尾设置double 时,出现错误消息“无法对非静态方法进行静态引用”。它说解决方法是也使该方法静态化,但是我的教授告诉我不要将该字段静态化。有一个简单的解决方案我只是想念吗? 问题答案: 静态方法属于该类,非静态方法属于该类的 实例 。 当您从呼叫时,您会收到错误消息,因为它与任何实例都没有关联。 您需要创建该类的实例: 然后,您可以调用实例

  • PowerMockito.when(ConnectionFactory.getConn(“ABC”).getCurrentStatus()).thenReturn(ConnectionStatus.Connected); 对于上面的陈述,我得到了一个NPE。 我在junit测试类的开头已经有@PrepareForTest({fxallConnectionFactory.class,Connecti

  • 我正在尝试用Java编写下面用Kotlin编写的代码。我无法创建DefaultElementsAdapter,因为我无法获得正确的语法。 我无法获得正确的Java代码 Kotlin班是这样的 我正在尝试使用图书馆https://github.com/m7mdra/HtmlRecycler

  • 我正在使用ChrisJenx的书法库。今天早上突然我的项目开始抛出奇怪的错误。有人知道吗?我还尝试了查看TintTypeArray.java:119。gradle缓存中的有getFont方法,它是v26.0.2,但在sdk/附加项中没有,它是v25.3.1。我认为gradle缓存代码将用于此,但它仍然是抛出错误。请帮助。 Logcat: 12-06 16:52:40.516 18533-18533