2012-06-11 81 views
5

我有兩個Android應用程序彼此共享其代碼的90%,並且由於政治原因(我認爲還有技術原因)需要單獨的軟件包名稱(因此它們將出現在Google Play中的不同網址下)我能以某種方式在Android中別名R嗎?

我爲每個應用程序使用兩個分支的git,並且在每次發佈之前手動同步這兩個分支。當運行這兩個分支的diff命令時,我的很多文件在實際中唯一不同的是自動生成的文件R的包名,因此對於第一個應用程序,我有15個文件,其中包含

import pkg.name.one.R; 

和其他應用程序

import pkg.name.two.R; 

我想在這兩個類以同樣的方式在某種程度上導入R

我試過像這樣包裝R:

package thescene;

public class RWrapper { 

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

} 

(這將使RWrapper在問候源或R這兩個分支之間的唯一不同的文件),但可惜R是一個final類(和我什至不知道這會工作過呢)

那麼有沒有辦法以某種方式別名R類的方式,使我可以用統一的導入語句取代import pkg.name.one.R;/import pkg.name.two.R;

我也開來,將解決我的同步困境:)

+0

其更好地進口statement'導入'R和刪除使用'CTRL + SHIFT + O'不必要的包 –

+0

對你的問題不是一個真正的答案,而是你把重複的代碼放到你從每個應用程序中引用的庫項目中,還是兩個應用程序完全分開,並且有90%的代碼相同?你應該保持R文件原樣,而不是嘗試使用相同的兩個項目 – banzai86

+3

將共享代碼移動到android庫。然後將其包含在兩個應用程序中 – pawelzieba

回答

0

無法修改RWrapper使R靜態字段,而不是一類別的建議嗎?然後,您的代碼將訪問R通過RWrapper.RClass...

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

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

你會訪問將R領域有:

RWrapper.R.<blah> 
+0

它沒有工作,它不允許我訪問值... – daniel

0

seggy有它差不多吧,但你需要單獨暴露每個R.class。如果子模塊具有自己的名稱空間,那麼您可以重新使用類名稱R,而不需要修改子模塊中的任何內容。

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

注:我不是跨項目縱容共享R,但有時時間緊迫等

相關問題