Blog

Ho il tempo per un post veloce, dopo aver passato un pomeriggio ad aggiornare la mia app myChatDroid for Facebook alla versione 4.3.0.

Per la precisione ho impiegato 1 ora tra l’aggiornamento del SDK di Facebook per Android (che rende deprecato il permesso “offline_access”), la traduzione dell’interfaccia in lingua italiana (prima era solo in inglese) e altri fix minori. Altre 3 ORE le ho passate per capire il motivo per cui, dopo l’invio del pacchetto aggiornato a Google Play (ex Android Market), l’aggiornamento sul dispositivo falliva restituendo un errore abbastanza assurdo, dal mio punto di vista:

File pacchetto non firmato correttamente


o in inglese…

Package file not signed correctly


… l’assurdità stava nel fatto che, al contrario di quanto sosteneva il mio dispositivo Android, il pacchetto APK era stato compilato e firmato utilizzando esattamente la stessa procedura, con lo stesso keystore di sempre e la stessa password. E, tra l’altro, il pacchetto era stato accettato dal pannello sviluppatori di Google Play, il quale invece, in caso di errore del certificato, dovrebbe impedire il caricamento del pacchetto APK.

Bene, dopo tanti sbattimenti ho scoperto che l’aggiornamento del JDK (Java Development Kit) da Sun JDK 6 a Oracle JDK 7 sul mio portatile ha cambiato il funzionamento di qualcosa, probabilmente del programma jarsigner, che a quanto pare firma i pacchetti in modo diverso dalla versione precedente, non permettendo ad Android di riconoscere la firma.

Il problema non riguarda soltanto gli aggiornamenti, per i quali poteva tradursi in un difetto di firma “diversa” da quella del pacchetto già installato, ma anche le nuove installazioni delle app… il tool di JDK 7 genera dei pacchetti non validi e quindi è completamente inutilizzabile!!

Credo che questo problema dovrebbe essere quanto meno documentato nel manuale di Android…

La sostituzione di JDK 7 con JDK 6 ha risolto il problema e, dopo aver ricompilato e ripubblicato myChatDroid, adesso l’app si riesce a scaricare correttamente su tutti i dispositivi :)

Un ringraziamento a @GeekMike per aver pubblicato il post che mi ha messo sulla giusta strada!

UPDATE: da un’indagine più approfondita è emerso che la causa del problema è il diverso algoritmo “digest” di default tra le JDK; Java 6 utilizza SHA1, mentre Java 7 utilizza SHA-256.
L’attuale SDK Android r18 non supporta ne’ questo algoritmo, ne’ l’impostazione di un algoritmo diverso da quello di default, ma a partire dalla r20 tutto ciò dovrebbe essere gestito correttamente. E’ già possibile scaricare una preview della r20 dal sito tools.android.com.

Link al bug tracker ufficiale


  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Rss
Paolo @ May 15, 2012 00:30

Grande. Mi è capitato qualcoda di analogo, ma non ci sarei mai arrivato…

Name


Email


Website/Blog


Add comment