2011-02-10 13 views
23

Sono nuovo per Android Dev e sono quasi pronto per rilasciare una prima versione della mia app :)come gestire la versione di debug e release sul dispositivo Android?

Durante il test dell'apk di rilascio firmato sul mio telefono, si rifiuta di installare perché la versione di debug è installata con la firma di debug.

Quindi devo disinstallare la versione di debug ma cancella tutto il mio database (e lo farà ai miei amici che lo stanno testando).

C'è un modo per gestire una versione di debug e una versione della stessa app senza perdere i dati?

+0

Sarei molto interessato a una soluzione anche per questo. Tuttavia, sono abbastanza sicuro che, a meno di cambiare i nomi dei pacchetti, questo non sarà possibile. :/ – Victor

risposta

4

Io non sono a conoscenza di un modo semplice per fare girare la disinstallazione/reinstallazione processo, in modo che le opzioni includono ...

  • Acquista un secondo dispositivo per il test (alcuni dispositivi Android sono molto a buon mercato ora , in particolare su eBay)
  • utilizzare l'emulatore per testare

vedo lo stesso problema, ma è da aspettarselo, per cui uso il telefono per il debug dev, e la tavoletta per il test di produzione. Quando sono vicino a una versione, eseguo il test della versione di produzione su entrambi i dispositivi e sull'emulatore.

Con i tuoi tester, ti consigliamo di dare sempre loro versioni di rilascio, ma potresti includere una registrazione estesa per risolvere i problemi. Le versioni di debug sono quindi utilizzate solo da te e rilasciano versioni da loro. Se si fornisce ai tester una versione di rilascio, essi utilizzano e accumulano dati, quando arrivano all'aggiornamento alla versione successiva, i dati possono essere conservati (o aggiornati, se si modifica lo schema) per migrare i propri dati.

Non vedo l'esigenza che i tester utilizzino le versioni di debug & di debug.

+0

è perché fornisco un menu di debug con alcune azioni avanzate disponibili solo quando l'app è firmata wish debug signature –

+0

In tal caso, suggerirei di aggiungere un flag booleano nella build per includere o meno quel menu e inserirlo la tua produzione Un'altra opzione è quella di "nasconderla" nell'interfaccia utente, magari come una lunga pressione sul logo dell'app, qualcosa che la maggior parte delle persone non farà, ma se vuoi che persone specifiche possano accedervi, possono farlo. Quindi, una volta terminato il test, si esegue una corretta release di produzione e la si rimuove. –

+3

@Geobert Penso che sia una cattiva idea inviare mandate di debug ai tester, molto meglio inviare loro i rilasci di produzione. Fornisce loro un'esperienza più vicina al risultato finale, ad es. per esempio, verifica che stiano testando una versione che utilizza la chiave di MapView di produzione.Le build di debug sono per te, produzione per i tuoi tester e utenti finali –

2

Perché disinstallare l'app? Normalmente, l'installazione della nuova versione della stessa app (identificata dall'ID del pacchetto) conserva tutti i dati dell'app.

MODIFICA: per conservare manualmente i dati delle applicazioni, copiarli da /data/data/my.package.name/... in un luogo sicuro, quindi ripristinare se necessario.

+1

La stessa app sovrascriverà quella precedente mantenendo i dati, sì, ma non è possibile installare una seconda app con lo stesso pacchetto, ma una firma diversa, come ha fatto @Geobert. Ecco cosa succede. – Nanne

+0

Non ho modificato l'ID del pacchetto ma non l'installazione. Ho disinstallato la versione di debug, quindi installo quella di rilascio. Poi, quando ho provato a lanciare in modalità debug da Eclipse, si dice: –

+0

[2011-02-10 18:11:24 - Radis] Caricamento radis.apk sul dispositivo '10006609c6cb' [2011-02-10 18:11: 24 - radis] Installazione di radis.apk ... [2011-02-10 18:11:25 - radis] La reinstallazione non è riuscita a causa di diverse firme dell'applicazione. [2011-02-10 18:11:25 - radis] È necessario eseguire una disinstallazione completa dell'applicazione. ATTENZIONE: questo rimuoverà i dati dell'applicazione! [2011-02-10 18:11:25 - radis] Esegui "adb uninstall fr.geobert.Radis" in una shell. [2011-02-10 18:11:25 - radis] Lancio annullato! –

29

Molti progetti Android stanno iniziando a utilizzare il sistema gradle build (ci siamo passati ad esso quando abbiamo iniziato ad utilizzare Android Studio). Fortunatamente, gradle rende molto semplice installare sia una versione di sviluppo che una versione di rilascio contemporaneamente, ognuna con i propri dati indipendenti.Il Android docs copertura questo, è sufficiente aggiungere un applicationIdSuffix al vostro tipo di generazione di debug in questo modo:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 
+0

Non sono così familiare (ancora) con gradle, ma almeno secondo quello che ho letto finora, penso che questa dovrebbe essere la risposta accettata, dal momento che è la migliore soluzione alla domanda dell'OP. – Andre

+0

Se si utilizzano le autorizzazioni, è necessario aggiungere ulteriori trucchi: https://blog.grandcentrix.net/how-to-install-different-app-variants-on-one-android-device/ – Gavriel

2

Grazie @Evan la soluzione funziona perfettamente:

android { 
    buildTypes { 
     debug { 
      applicationIdSuffix ".debug" 
     } 
    } 
} 

Per aggiungere "(DEBUG)" per il titolo app durante l'esecuzione in modalità di debug, inserire questo codice nel onCreate del vostro attività:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
    //The .debug specified in gradle 
    if (pInfo.packageName.equals("YOUR_PACKAGE_NAME_HERE.debug")) { 
     setTitle(getTitle() + " (DEBUG)"); 
} 
0

per quanto mi riguarda, ho anche bisogno di aggiungere:

<permission                    
     android:name="${applicationId}.permission.C2D_MESSAGE"         
     android:protectionLevel="signature" />             

<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 

In caso contrario, sia avrebbe ricevuto la stessa autorizzazione C2D_MESSAGE che ha comportato:

Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=<your applicationId>.permission.C2D_MESSAGE pkg=<your applicationId>] 
Problemi correlati