Exception java.lang.NoSuchMethodError: decodeBase64 in Android devices with API < 28
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Ambito
- mobile-dev
Direzione di ricerca
Inizia con com.google.api.client.util.Base64.java e PemReader, dove lo stack trace raggiunge la chiamata incompatibile a decodeBase64, quindi esamina come viene risolta la dipendenza Apache Commons Codec per Android. Riproduci il problema con l'esempio vocale di Android su un'API inferiore a 28 e verifica che il caricamento delle credenziali non generi più NoSuchMethodError.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi,
We have found that the library is throwing an exception in any Android device with and API < 28 (Android 9.0) after version com.google.cloud:google-cloud-speech:0.70.0-beta. The problem is related with this issue. As far as we know, Apache common codec library dependency version is 1.10 in this project, but Android in versions below 9.0 has the same classes in boot classpath, so classes from the version 1.10 will never be loaded. This issue will not be solved in Android, thus we would like to ask for a solution here, removing/replacing the dependency in some way.
Thanks in advance.
Please include as much information as possible:
Environment details
- OS: Android API < 28
- Java version:1.8
- google-cloud-java version(s): from 0.71.0-beta
Steps to reproduce
1. Zip file attached or get Android speech example source code from:
https://github.com/GoogleCloudPlatform/android-docs-samples/tree/master/speech/SpeechRecognitionClient
2. Import app into Android Studio.
3. Modify build-gradle (module app) file to update dependencies in
section dependencies:
// add these dependencies for the speech client
implementation 'io.grpc:grpc-okhttp:1.18.0'
implementation 'com.google.cloud:google-cloud-speech:0.71.0-beta'
4. Build app with Android Studio and run in development mode on Android device below API 28.
Stacktrace
2019-02-21 10:56:28.171 12310-12310/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.google.cloud.examples.speechrecognition, PID: 12310
java.lang.NoSuchMethodError: No static method decodeBase64(Ljava/lang/String;)[B in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at com.google.api.client.util.Base64.decodeBase64(Base64.java:101)
at com.google.api.client.util.PemReader.readNextSection(PemReader.java:106)
at com.google.api.client.util.PemReader.readFirstSectionAndClose(PemReader.java:135)
at com.google.auth.oauth2.ServiceAccountCredentials.privateKeyFromPkcs8(ServiceAccountCredentials.java:290)
at com.google.auth.oauth2.ServiceAccountCredentials.fromPkcs8(ServiceAccountCredentials.java:280)
at com.google.auth.oauth2.ServiceAccountCredentials.fromJson(ServiceAccountCredentials.java:210)
at com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:174)
at com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:141)
at com.google.cloud.examples.speechrecognition.MainActivity$mSpeechClient$2$1$1.getCredentials(MainActivity.kt:69)
at com.google.cloud.examples.speechrecognition.MainActivity$mSpeechClient$2$1$1.getCredentials(MainActivity.kt:47)
at com.google.api.gax.rpc.ClientContext.create(ClientContext.java:132)
at com.google.cloud.speech.v1.stub.GrpcSpeechStub.create(GrpcSpeechStub.java:94)
at com.google.cloud.speech.v1.stub.SpeechStubSettings.createStub(SpeechStubSettings.java:126)
at com.google.cloud.speech.v1.SpeechClient.<init>(SpeechClient.java:144)
at com.google.cloud.speech.v1.SpeechClient.create(SpeechClient.java:126)
at com.google.cloud.examples.speechrecognition.MainActivity$mSpeechClient$2.invoke(MainActivity.kt:68)
at com.google.cloud.examples.speechrecognition.MainActivity$mSpeechClient$2.invoke(MainActivity.kt:47)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.google.cloud.examples.speechrecognition.MainActivity.getMSpeechClient(MainActivity.kt)
at com.google.cloud.examples.speechrecognition.MainActivity.onResume(MainActivity.kt:105)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1270)
at android.app.Activity.performResume(Activity.java:6830)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3407)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3470)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1528)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6121)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
Code snippet
private val mSpeechClient by lazy {
// NOTE: The line below uses an embedded credential (res/raw/sa.json).
// You should not package a credential with real application.
// Instead, you should get a credential securely from a server.
applicationContext.resources.openRawResource(R.raw.google_cloud_credentials).use {
SpeechClient.create(SpeechSettings.newBuilder()
.setCredentialsProvider { GoogleCredentials.fromStream(it) }
.build())
}
}
Any additional information below
Thanks!
- Lingua principale
- Java
- Stelle
- 1.4k
- Fork
- 476
- Merge medio
- 10h 47m
- PR unite (30g)
- 3
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di googleapis/google-http-java-client
-
Core: Validate header names and values to prevent CRLF injectionForse già presa @insaf021 l’ha presa 106 giorni fa. Apertapriority: p3
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Core: XmlPullParser processes external DTD entities (XXE) — disable FEATURE_PROCESS_DOCDECL in Xml#createParser()Forse già presa @insaf021 l’ha presa 106 giorni fa. Apertapriority: p3
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Core: LowLevelHttpResponse not disconnected when HttpResponse construction throws RuntimeExceptionForse già presa @insaf021 l’ha presa 106 giorni fa. Apertapriority: p3
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
type: cleanup
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
org.apache.http.conn.ssl.SSLSocketFactory is deprecatedForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Apertapriority: p2 type: cleanup
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
Tutte le issue di googleapis/google-http-java-client
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
-
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 84/100
cpp-best-practices/project_validator#251 ·
I maintainer di solito rispondono entro 1 giorno
-
backend enhancement
Difficoltà 2/5 Mezza giornata Idoneità per principianti 70/100
damodharg6/payledger#16 ·
-
[Bug]: An initiative list with no current entry logs an error on every changeForse già presa @dwizard0 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
I maintainer di solito rispondono entro 1 giorno