MICHELEPISANI.IT
  • Mobile
  • Android
  • Articoli
  • No static method encodeBase64String in Base64 or Cannot resolve this method
 

Impossibile risolvere il metodo encodeBase64String oppure il metodo non esiste nella classe Base64

No static method encodeBase64String in Base64 or Cannot resolve this method

No static method encodeBase64String in Base64 or Cannot resolve method
Settembre 26
07:372015

Per utilizzare funzionalità presenti in Apache Commons Code in versioni uguali o superiori alla 1.4, come ad esempio quella del metodo encodeBase64String presente in Base64 non è sufficiente aggiornare il framework all'interno dell’applicazione perché la stessa utilizzerà a runtime le classi della versione precedentemente caricata, a parità di nome.

Pertanto l’utilizzo del seguente comando per ottenere una stringa codificata in Base64 non produrrà alcun errore in fase di compilazione ma genererà a runtime un’eccezione:

String hash = org.apache.commons.codec.binary.Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));


L'errore che ne risulta è:

No static method encodeBase64String([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/ext.jar

Per evitare questo tipo di conflitti è necessario modificare il namespace delle classi, nel caso specifico il package di Commons Codec.

La soluzione è quella di rinominare il package ad esempio da org.apache.commons.codec in android.org.apache.commons.codec e per farlo è necessario o effettuare la modifica manualmente sul codice sorgente di commons-codec e ricompilare il file in jar oppure seguire la procedura descritta di seguito:

Scaricare i Commons Codec più recenti dal sito ufficiale di Apache, nel caso specifico “commons-codec-1.10-bin.zip” ed estrarne il contenuto.

Il file che ci interessa all’interno dell’archivio è commons-codec-1.10.jar

Scaricare il file jarjar-1.4.jar (o la versione più recente) da https://code.google.com/p/jarjar/downloads/list che servirà per apportare modifiche ad un file jar già compilato, come nel nostro caso.

Creare un file e chiamarlo commons-codec.rules (per crearlo, con il Mac, ho utilizzato il terminale ed i comandi “sudo nano [nome_file]” ed utilizzato i comandi suggeriti dal terminale; da Windows basta un semplice file creato con Notepad opportunamente rinominato) contenente una sola riga:

rule org.apache.** android.org.apache.@1


Questa sarà la regola che jarjar seguirà per rinominare il package della libreria di nostro interesse.

Da terminale, facendo attenzione a rispettare i path nei quali si trovano i singoli file interessati dal comando, lanciare:

java -jar jarjar-1.4.jar process commons-codec.rules commons-codec-1.10/commons-codec-1.10.jar commons-codec-1.10/commons-codec-1.10-rep.jar


Verrà creato un nuovo file, commons-codec-1.10-rep.jar, che andrà inserito nella cartella libs del progetto e aggiunto come libreria.

Dopodichè la chiamata dovrà essere rinominata come di seguito:

String hash = android.org.apache.commons.codec.binary.Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));


E dopo un rebuilt e avvio dell’app il problema non si presenterà più in quanto la chiamata al metodo avrà un nuovo puntatore definito e univoco.


Tags
Condividi

Autore

Michele Pisani

Michele Pisani

Ho uno spiccato orientamento al problem-solving, se è troppo facile non mi diverto :)
Credo nella volontà e nel cambiamento perchè hanno fatto della mia passione il mio pane quotidiano.
Se devo descrivermi con una sola parola direi... "Concretezza", la mia stretta di mano è una garanzia.

0 Commenti

Non ci sono commenti

Nessuno ha ancora commentato questo articolo, fallo tu per primo!

Scrivi un Commento

Scrivi un Commento

Il tuo indirizzo email non sarà pubblicato.
I campi contrassegnati da un * sono obbligatori

Articoli e Argomenti correlati

Categorie popolari

Iscriviti alla mia newsletter

La tua e-mail con me sarà al sicuro.
Non fornirò mai le tue informazioni a nessuno!

Ultimi commenti

Michele Pisani

Grazie Paolo,
spero possa tornarti utile per i tuoi scopi.

Paolo

salve,mi interessa il progetto sensore gas ,per applicazioni in agricoltura.Vedremo gli …

Michele Pisani

Ciao Rossana,
strano problema, una domanda: continui a visualizzare entrambe le pagine o una …

Rossana

Ciao Michele, il mio problema è che Facebook non mi risponde. Mi è successo tre volte: faccio …