2012-06-11 7 views
5

Mam dwie aplikacje na Androida, które dzielą ze sobą 90% kodu, a ze względów politycznych (chyba też z przyczyn technicznych) muszę mieć oddzielne nazwy pakietów (aby pojawiały się pod różnymi adresami URL w Google Play)Czy mogę jakoś aliasować R w systemie Android?

Używam gita z dwoma gałęziami dla każdej aplikacji i synchronizuję dwie gałęzie ręcznie przed każdym wydaniem. Po uruchomieniu polecenia diff dwóch gałęzi, wiele moich plików jest różnych, podczas gdy w rzeczywistości jedyną rzeczą, która jest inna, jest nazwa pakietu generowanego automatycznie pliku R, więc dla pierwszej aplikacji mam 15 plików z

import pkg.name.one.R; 

i dla innych aplikacji

import pkg.name.two.R; 

Chcę jakoś zaimportować R w ten sam sposób dla obu klas.

Próbowałem owijać R tak:

pakiet thescene;

public class RWrapper { 

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

} 

(co uczyniłoby RWrapper jedyny inny plik pomiędzy tymi dwoma oddziałami w odniesieniu do źródła lub R), ale niestety R jest ostateczna klasy (i nie jestem nawet pewien, że to będzie już pracował tak)

Czy istnieje sposób na alias klasy R w sposób, który pozwoliłby mi zastąpić import pkg.name.one.R;/import pkg.name.two.R; ujednoliconą instrukcją importu?

Jestem również otwarty na inne propozycje, które rozwiązać mój nieszczęścia synchronizacji :)

+0

jej lepiej importować 'R w imporcie statement' i usunięcia zbędnych przy użyciu pakietu' CTRL + SHIFT + O' –

+0

Naprawdę nie jest to odpowiedź na twoje pytanie, ale czy umieściłeś duplikat kodu w projekcie bibliotecznym, do którego się odwołujesz z każdej aplikacji, czy te dwie aplikacje są całkowicie rozdzielone i mają 90% ten sam kod? Powinieneś zachować plik R taki, jaki jest, i nie próbować używać tego samego dla obu projektów. – banzai86

+3

Przenieś udostępniony kod do biblioteki Androida. Następnie umieść go w obu aplikacjach. – pawelzieba

Odpowiedz

0

nie mógłbyś zmodyfikować RWrapper aby R polu statycznym zamiast klasę? Twój kod będzie wtedy dostęp R poprzez RWrapper.RClass...

Przykład

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

i

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

by uzyskać dostęp do pól R z:

RWrapper.R.<blah> 
+0

To nie działa, nie daje mi dostępu do wartości ... – daniel

0

seggy miał prawie prawo, ale musisz osobno wystawić każdą R. klasę. Jeśli podmoduł ma swoją własną przestrzeń nazw, możesz ponownie użyć nazwy klasy R i nie musisz niczego modyfikować w swoim podmodule.

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; 
} 

Uwaga: nie jestem akceptowanie udostępniania R w projektach, ale czasami ograniczenia czasowe itp

Powiązane problemy