2012-03-16 74 views
1

有許多示例顯示如何在運行時在代碼中獲取包名稱。條件編譯:在編譯時獲取並測試包名稱

在我的情況下,我需要在編譯時間測試軟件包名稱。

這是我的情況:我有兩個利用庫項目的Android項目(免費和專業版)。 免費版本有一個「獲取專業版」菜單項,其他版本中不存在。 我的菜單處理代碼是這樣的:

if (item.getItemId()==R.id.getProVersion) { 
    //... 
} 

Proguard的抱怨,建立親包時R.id.getProversion不存在。 所以我需要測試哪個項目正在構建,以便從編譯中排除這部分代碼。

有沒有辦法在編譯時知道包名?
這個問題有沒有變化的解決方案?以Android爲中心或以Java爲中心的解決方案都可以。

回答

0

你可以把菜單項目庫項目,然後使用運行時包名稱檢查來實際決定是否顯示消息

+0

不是我所希望的。但是我做了什麼! – tos 2012-03-16 16:06:17

+0

我在代碼中做的是我在庫中有一個基本活動,然後將它擴展到自由和專業程序中,覆蓋「shouldDisplayAd」方法。但是,這隻適用於主要活動... – miniBill 2012-03-17 12:35:17

+0

這確實是一種可能性。然而,在我目前的項目中,src文件夾適用於專業和免費的子項目。一切都在圖書館裏。但我也曾經在一個項目目錄不是空的。 – tos 2012-03-30 17:37:37

0

你可以通過編寫一個簡單的註釋來自動跳過這段代碼。 Myabe這是矯枉過正,但它也是進入預處理的好辦法...

這似乎是關於這一主題的好(KISS)教程: http://blog.christoffer.me/2011/08/how-to-enforce-static-methods-on-class.html

+0

有趣。我想在android上對java進行條件編譯的官方支持。您的解決方案對於單個變量有點矯枉過正。我可以用它來處理更復雜的情況。與此同時,我沿着miniBill提出的路線:創建一個菜單並使其不可見。沒有最好的,但我需要繼續前進。 – tos 2012-03-16 16:05:36