2012-06-11 7 views
5

Ho due applicazioni Android che condividono il 90% del loro codice e a causa di motivi politici (penso anche motivi tecnici) devono avere nomi di pacchetti separati (quindi appariranno sotto URL diversi in Google Play)Posso in qualche modo alias R in Android?

Io uso git con due rami per ogni app e sincronizzo manualmente i due rami prima di ogni rilascio. Quando si esegue un comando diff dei due rami, molti dei miei file sono diversi quando in realtà l'unica cosa diversa è il nome del pacchetto del file generato automaticamente R, quindi per la prima applicazione ho 15 file con

import pkg.name.one.R; 

e per l'altra applicazione

import pkg.name.two.R; 

voglio importare in qualche modo R allo stesso modo per entrambe le categorie.

Ho provato avvolgendo R modo:

pacchetto thescene;

public class RWrapper { 

    public class R extends pkg.name.one.R {} 

} 

(che renderebbe RWrapper l'unico file diverso tra i due rami per quanto riguarda l'origine o la R) ma ahimè R è una classe finale (e io non sono nemmeno sicuro che questo avrebbe mai funzionato comunque)

Quindi c'è un modo per in qualche modo aliasare la classe R in un modo che mi permetterebbe di sostituire import pkg.name.one.R;/import pkg.name.two.R; con una dichiarazione di importazione unificata?

Sono aperto anche ad altri suggerimenti che potrebbero risolvere i miei guai sincronizzazione :)

+0

la sua migliore per importare 'R in importazione statement' e rimuovere pacchetto inutile usando' CTRL + MAIUSC + O' –

+0

Non è davvero una risposta alla tua domanda, ma hai inserito il codice duplicato in un progetto di libreria a cui fai riferimento da ciascuna applicazione o le due app sono completamente separate e hanno il 90% dello stesso codice? E si dovrebbe mantenere il file R così com'è, e non provare a usare lo stesso per entrambi i progetti. – banzai86

+3

Sposta il codice condiviso nella libreria di Android. Quindi includilo in entrambe le applicazioni. – pawelzieba

risposta

0

Non potreste modificare RWrapper fare R un campo statico invece di una classe? Il tuo codice sarebbe poi accedere R via RWrapper.RClass...

Esempio

public class RWrapper 
{ 
    public static pkg.name.one.R R; 
} 

e

public class RWrapper 
{ 
    public static pkg.name.two.R R; 
} 

Faresti accedere ai campi R con:

RWrapper.R.<blah> 
+0

Non ha funzionato, non mi dà accesso ai valori ... – daniel

0

seggy aveva quasi ragione, ma è necessario esporre ciascuna classe R. individualmente. Se il sottomodulo ha il proprio spazio dei nomi, è possibile riutilizzare il nome della classe R e non è necessario modificare nulla nel sottomodulo.

package the.submodule.package; 

public final class R { 
public static the.app.package.R.string string; 
public static the.app.package.R.drawable drawable; 
public static the.app.package.R.id id; 
//public static the.local.appPackage.R.anythingElse anythingElse; 
} 

Nota: Non sto apologia condivisione R attraverso i progetti, ma a volte i vincoli di tempo, ecc

Problemi correlati