2013-08-22 17 views
0

我正在爲使用完全相同的代碼的各種客戶開發應用程序(它只顯示WebView)。唯一的區別是一個配置文件,圖標和android包的名稱,都是通過自定義的ant任務生成的。在ADT/ant build中爲生成的類配置特定的包

如果我運行ant release目標或在eclipse中生成項目,生成的Java類(如R)將在名爲android的包中生成。因此,在我的項目中導入這些類是無效的,因爲它們的包已經更改。

Newsnet.java

package ch.newsnet.app; 

import ch.newsnet.app.R; // <- cannot be found after build 

public class Newsnet extends FragmentActivity { 
    //... 
} 

運行我的自定義Ant目標將我的Android包設置爲ch.customer1.app,至極使R A類包ch.customer1.app的。但我希望它始終是ch.newsnet.app。我如何在a)ant build和b)eclipse構建器中實現這一點?我不想設置20個以上的項目,並且當我可以將所有代碼都放在一個代碼庫中時維護它們的構建文件和資源。

+0

我強烈建議您設置一個包含所有邏輯的庫項目 - 然後爲每個客戶創建一個shell項目。 –

+0

這正是我想要避免的。我會有很多重複的配置代碼 – thobens

+0

類'R'是由Android自動生成的,它將始終在應用程序的包中 - 您無法控制它。之後您可以嘗試重命名/移動/編輯它,但我不會推薦它。 –

回答

0

對於那些誰面臨着同樣的問題,我解決了如下這個問題(allthough它不是最好的解決辦法,但它的工作對我來說):

我創建Ant目標moveGeneratedFiles,在那裏我複製生成的包到正確的一個,替換包名並刪除生成的包(這在eclipse中不會真正起作用,因爲類將再次生成)。

<target name="moveGeneratedFiles"> 
    <loadproperties> 
     <file file="assets/customer.properties"/> 
    </loadproperties> 
    <copy todir="gen/ch/newsnet/app" overwrite="true"> 
     <fileset dir="gen/ch/${customer.name}/app" /> 
    </copy> 
    <replace dir="gen/ch/newsnet/app" token="package ch.${customer.name}.app;" value="package ch.newsnet.app;" /> 
    <delete> 
     <fileset dir="gen/ch/${customer.name}/app" /> 
    </delete> 
</target> 

在項目屬性中,我添加了一個執行此目標的ant構建器,因此生成的類將在保存後同步。