2011-09-07 6 views
17

Continuando a sviluppare la mia applicazione e testare su un telefono reale, ho bisogno di avere la versione di rilascio dello stesso sullo stesso telefono, a scopo dimostrativo (la versione di rilascio è molto più reattiva, grazie ai no-logs) .Come avere entrambi gli apk di debug e release sullo stesso dispositivo?

Il problema è che l'unico modo per far coesistere due applicazioni sullo stesso dispositivo in Android è avere nomi di pacchetti diversi.

Ma i nomi dei pacchetti richiedono una nuova factoring e un sacco di moltiplicazione correzioni manuali ... per non parlare che questo confonde il controllo di versione ...

Idealmente, Eclipse + ADT permetterebbero aggiungendo una variabile modificatore che avrebbe generato automaticamente un nome di pacchetto diverso per il debug/release e consentirebbe tale coesistenza, ma non sono riuscito a trovare alcun meccanismo che consenta di farlo.

Sei a conoscenza di un modo per aggirare questo problema?

Soluzioni e idee creative sono benvenute.

risposta

0

si consiglia di provare a utilizzare this techniqueant, Jenkins e forse altri strumenti per automatizzare il pacchetto rinomina come suggerito da @LAS_VEGAS.

Anche se non è quello che hai chiesto, this cool code snippet può aiutarti a scoprire in fase di esecuzione se il tuo codice è di debug o di rilascio.

Un altro tentativo simile interessante è disponibile in this thread. Non sono sicuro se funziona su Android.

2

L'unico modo che conosco è di cambiare il nome del pacchetto nel file manifest dell'applicazione. Eclipse dovrebbe gestire tutte le ridenominazioni del codice per te.

+0

Wow! Quello ha funzionato quasi. Ho aggiunto una "d" alla fine del nome del pacchetto nel file manifest, pulito il progetto da ricostruire ed Eclipse non si lamentava affatto. Ho proceduto felicemente a eseguirlo ma poi "chiuso forzatamente". Risulta che la mia applicazione utilizza reflection (class factory) e Android non ha gradito la discrepanza tra il nome del pacchetto manifest e il nome del pacchetto .java. +1 per essere così vicino. – an00b

+0

se la build del rilascio ha attivato l'offuscamento proguard e se hai aggiunto alcune _rules_ personalizzate a proguard.cfg, anche quelle potrebbero contenere il nome del pacchetto.Inoltre, se hai creato widget di visualizzazione personalizzati e li hai aggiunti in qualche layout XML, vengono anche denominati con il pacchetto. – superjos

2

Potrebbe inserire tutto il codice in un Library Project e quindi avere solo due progetti normali, con nomi di pacchetti diversi e includere solo il progetto di libreria in entrambi?

Questo dovrebbe mantenere tutto il codice in un unico posto. I progetti normali molto probabilmente necessitano solo di un file manifest valido che punti alle attività nel progetto di libreria.

+0

Il Progetto Biblioteche è la registrazione di debug, anche ... (IOW, un progetto Libreria richiede edificio condizionale, proprio come l'applicazione). Questa soluzione non funziona per me, ma +1 per il suggerimento creativo. – an00b

4

utilizzare Android Studio perché Gradle rendere molto più facile la tua vita - basta usare applicationIdSuffix

android { 
    ... 
    buildTypes { 
    release {...} 
    debug { 
     applicationIdSuffix '.debug' 
    } 
    } 
} 

Per di più vai here.

0

In Android Studio, Aggiunta di varianti di build utilizzando i prodotti Flavours che possono essere facilmente personalizzati per vari ambienti e per testare più varianti di app della stessa app affiancate. Controlla questo link per ulteriori informazioni - Configuring Gradle

Problemi correlati