2013-01-31 56 views
1

我正在開發一個通用的Android遊戲引擎,將在我的許多Android應用程序中用作基本系統。問題是,在我所有的Java文件目前,我有硬編碼這樣的包名:動態(編譯時生成的)Java程序包名稱

package com.example.mygameengine; 

但因爲我想用我的通用遊戲引擎的代碼在許多不同的應用程序,我需要找到一種在編譯時指定Java文件的包名的方法,因爲我不想僅僅因爲包名稱的不同而保留我的Java源的多個副本。我想要一箇中央源代碼樹,根據我即將編譯的應用程序,包名應該可以動態更改。

那麼,有沒有辦法做這樣的事情:

package $(PACKAGE_NAME) 

在Java源代碼其中$(PACKAGE_NAME)是在編譯時與真正的包名被取代?也許javac有一個選項,允許我爲它傳遞的文件指定一個包名稱,而不是從文件本身獲取它?請注意,我沒有使用Eclipse,而是準備了像ant和make這樣的命令行工具。

編輯:我不明白爲什麼這被標記爲重複。我問了一個關於Java語言中的「包」指令是否需要源代碼中的硬編碼字符串參數或者是否可以在編譯時使用編譯器指令來設置此包名的基本問題。這是相當於這個問題與此處鏈接的問題不同,它與Android構建系統密切相關的推測性「原始」問題。我的問題是關於Java語言的基礎知識,而不是關於Android構建系統。

+2

這是一個非常糟糕的主意。只要在任何地方使用相同的軟件包名稱,並將相同的類捆綁到不同的應用程序中。這不像你將在每個應用程序中爲'java.util'使用不同的包名,是嗎? –

+0

我希望你實際上沒有使用'com.example'作爲你的包前綴。 –

回答

1

你不能。這不是代碼重用的正確方法。

只需將常用代碼打包到一個jar文件中,並將該jar包含在您想要的每個項目中(在Android中,您可以通過將類添加到classpath中,然後將其標記爲導出爲「Order & Export」選項卡)

0

這是不可能的,因爲它對你的類

一個軟件包的核心元數據的一部分是相關的Java實體(如類,接口,異常,錯誤和枚舉)的集合。軟件包用於:

通過在類名前加上包名稱來解決類的命名衝突。例如,com.zzz.Circle和com.yyy.Circle是兩個不同的類。雖然它們共享相同的類名Circle,但它們屬於兩個不同的包:com.zzz和com.yyy。這兩個類可以在同一個程序中使用,並使用完全限定的類名 - 包名和類名進行區分。這種機制被稱爲名字空間管理。

訪問控制:除了公共和私有,Java有兩個訪問控制修飾符 - 保護和默認 - 與包有關。受保護的實體可以通過同一個包及其子類中的類訪問。沒有訪問控制修飾符的實體(即默認)只能由同一個包中的類訪問。

用於分發可重用類的集合,通常採用稱爲Java歸檔(JAR)文件的格式。

5

您可以將您的通用遊戲引擎代碼構建到獨立的JAR中。

然後,您可以將它作爲依賴項包含在您的每個使用它的Android應用程序中。

通過適當的版本控制,您將只有一個存儲此代碼的中心位置。

+0

或者即使您不將它放入單獨的jar中,也可以在主jar文件中捆綁來自不同包的類。 –