2010-05-21 14 views
13

Come firmo un APK con più di un certificato, in modo che io possa fare questo quando pubblico per l'Android Market:Come firmare un APK con più di un certificato?

versione 1.0 => Firmato con Certificato Un
versione 2.0 => Firmato con certificato a & B
versione 3.0 => Firmato con certificato B

L'Android Market non darmi qualche speranza, ma io non sono sicuro di cosa fare di esso, quando carico con un diverso certificato di segno mi dà questo messaggio :

"L'apk deve essere firmato con almeno un certificato in comune con la versione precedente."

Motivo:
Ho pubblicato un app sul mercato utilizzando lo strumento di firma Android come parte di MOTODEV Studio per Android. Il problema è che gestisce le chiavi stesse e non c'è modo (documentato) di ottenerle. Voglio cambiarlo per usare un keystore e un certificato che ho più controllo e posso usare anche se non uso più MotoDev Studio. Inoltre sembra che MotoDev Studio ti blocchi da nuove funzionalità come le librerie condivise.

AGGIORNAMENTO 5/3/2011:
Sono stati in realtà molto semplice e chiederà ad aggiornare MOTODEV Studio ma sembra che io credo che Google dovrebbe ancora fornire un lavoro in giro per coloro che vogliono cambiare i certificati di loro applicazioni. L'aggiornamento dell'applicazione a tutti utilizza lo stesso certificato, creandone di nuovi nel tempo e possibilmente creando uno nuovo in modo da poter consegnare agli altri il supporto e la distribuzione della propria applicazione.

risposta

12

Se si desidera firmare un APK più di una volta, è sufficiente farlo.
Tuttavia, Google Play non accetta gli APK con più firme.

es. È possibile sign an APK dalla riga di comando utilizzando jarsigner in questo modo:
jarsigner -keystore original-keystore my-app-unsigned.apk key-alias alias

Poi basta ripetere questo con la seconda chiave:
jarsigner -keystore new-signing-keystore my-app-unsigned.apk key-alias

Non dimenticare di eseguire zipalign seguito:
zipalign -v 4 my-app-unsigned.apk my-app.apk


Ho appena riletto la parte relativa allo studio MotoDev. In tal caso, puoi semplicemente firmare l'APK prima usando MotoDev come al solito, quindi firmare con la nuova chiave nella riga di comando come sopra.

+0

Ok vedrò se Android Market lo accetterà assegnato con il vecchio certificato poi quello nuovo e quindi caricherò un altro aggiornamento con solo quello nuovo e vedrà se funziona. Questo è quello che stavo pensando, ma sono nuovo per la firma del codice in generale e non menziona una volta un modo per cambiare i certificati. – ddcruver

+0

Beh, almeno nei documenti Android. – ddcruver

+2

Sembra funzionare bene, questo sembra essere il modo per cambiare il certificato su un'applicazione Android Market. – ddcruver

2

ho avuto il problema di oggi e qui è quello che ho fatto:

  1. Eseguire il backup del vecchio file motodev.keystore
  2. Usa uno studio MOTODEV recente (2.0.1) per cambiare la mia MOTODEV.password keystore (modificarla nella vista motodev in cui è possibile importare un keystore)
  3. Convertire il file keystore di motodev (di tipo JCEKS) in un normale file di archivio di chiavi di Android (di tipo JKS) utilizzando il programma keytool.exe in bundle con java:

keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS

Ora il file android.keystore può essere utilizzato nelle plugin Google Eclipse per esportare l'applicazione per un APK firmato

+0

In jdk1.7.0_45, hanno modificato alcuni dei nomi dei parametri. Ora srcstorestype e deststoretype. –

3

sono stato veramente contento di vedere questo post fino a quando ho visto @ ddcruver di commento (2010-06-05) e commento di @cistearns (2011-03-01).

Tuttavia, c'è in realtà un importante problema di sicurezza con il metodo di transizione che descrivi (se dovesse funzionare come ti aspetteresti), rendendo abbastanza semplice per un utente malintenzionato sostituire la tua app se può far installare gli utenti la loro roba:

  • si rilascia l'app firmato con il certificato A.
  • l'attaccante ottiene l'apk, in aggiunta firma con certificato di M, e distribuisce l'applicazione.
  • L'utente malintenzionato può quindi rilasciare un'app dannosa firmata con il certificato M per sostituire la propria e ottenere l'accesso a tutti i dati che può essere archiviata.

Normalmente, se un utente malintenzionato ha tentato di sostituire qualcosa, l'installazione si rifiuterebbe a meno che l'originale non venga rimosso - a quel punto i dati vengono cancellati.

D'altra parte, ci sono ancora diversi casi d'uso validi per la transizione di una chiave/certificato: rinnovo della chiave, consegnare ad un altro sviluppatore, ecc

Ciò potrebbe essere fatto in modo più sicuro, autorizzando il passaggio alla una nuova chiave dalla vecchia chiave. Si prega di consultare lo issue in the Android project.

+0

"L'hacker ottiene l'apk, inoltre lo firma con il certificato M e distribuisce l'app." - che, in base ai commenti che hai citato, sembra essere bloccato dalla console degli sviluppatori. – CommonsWare

+0

Sì esattamente. Così com'è, non è un problema di sicurezza. Sto dicendo che se fosse/fosse possibile passare una chiave in quel modo, allora sarebbe un problema di sicurezza. –

+0

Nota anche che Google Play (e la console per sviluppatori) non è l'unico modo di distribuire i file apk. –

Problemi correlati