2013-09-25 69 views
5

不同名稱的多個應用程序閱讀這篇文章,覺得有同樣的問題 - One code base, two applications on Android與相同的代碼庫

我已經創建了一個有一個像topicssplash screenslogoschartsrulesstatuses和項目申請testApp /或events

現在,我想從相同的代碼庫不同的應用程序(testApp_USAtestApp_CanadatestApp_Australia),並把他們在谷歌Play商店,這樣,如果用戶下載的應用程序,比方說,testApp_USA,則只有特定的物品到區域應該顯示像美國的閃屏,USA標識等。

所以我想根據國家配置多個應用程序,然後根據該應用程序的用戶已經下載設定的項目爲默認值。

目前,我有一個單一的應用程序是針對所有地區,我強加多種條件來區分或更改項目根據地區。

例如:

在許多Java文件中,我使用

if(rule.contains("USA")) 
{ 
//Show splash screen of USA 
} 

類似地,在許多的Java文件中,我使用

if(rule.contains("Australia")) 
{ 
//Show splash screen of Australia 
} 

這只是一個項目了許多在整個代碼重複。考慮到所有情況,它會更多。

應該有更好的方式來創建不同的名稱和設置在Android的多個應用程序。

我知道,iOS讓我可以很容易地改變應用程序的名稱和配置文件,以允許創建多個應用程序。但我不知道或者這是不容易對Android的代碼做。

我的問題:

是否有可能在Android的創建具有相同的源代碼不同的應用程序與項目不同的設置,並將它們發佈到谷歌Play商店?如果YES,如何設置這樣的配置?

UPDATE:

閱讀這篇文章 - multiple-android-application-package-apk-files-from-single-source-code

於是我想出了同樣的想法 -

1)以保存有關的應用程序類型,你要值一些字符串變量創建。

public static final String app_Name = "testApp_CANADA" ; 

2)有多個AndroidManifest.xml文件需要爲多個應用程序創建.apk for。

3)爲每個清單創建相應的啓動器活動。

但如何在一個應用程序中有多個AndroidManifest.xml文件?

UPDATE:

我的第一個AndroidManifest.xml主體工程文件夾(應用程序根文件夾)像往常一樣,我們有。考慮這個爲testApp_USA

我的第二個AndroidManifest.xml獨立的包主體工程。考慮這個testApp_CANADA

AndroidManifest.xml都有不同的啓動器活動和相應的啓動畫面,圖標定義。軟件包名稱在這兩個文件中都有所不同,因此它們將根據需要創建不同的.apk文件。

public static final String app_Name = "testApp_CANADA" ; 

OR

更清楚

如何調用特定AndroidManifest.xml根據:現在

,之間如何testApp_USA/testApp_CANADA提供我的主要的應用程序已經設置切換代碼值爲app_Name

隨着我現有的設置,只有第一個AndroidManifest.xml被稱爲總是。

+2

http://developer.android.com/guide/topics/resources/localization.html - values/rules.xml爲每個地區/本地化,並簡單地閱讀? – damian

+0

儘管鏈接很有幫助,但並未解決使用不同配置創建不同應用程序的問題。這是一種區域設置查找,並根據設備的配置使用區域設置來定義資源。 –

回答

9

我在將項目投放到不同市場(Google Play,三星,亞馬遜)時遇到了類似的問題。所有的代碼庫都是相同的,只是在賬單代碼上有所不同。

我發現的最佳解決方案是爲每個市場創建單獨的項目並將通用代碼推入庫項目。

更詳細地說,您需要在主項目中保留通用代碼,爲庫和子項目創建庫項目並啓用清單合併。 添加以下行主項目的project.properties:

android.library=true 
manifestmerger.enabled=true 

,這對每一個孩子項目的project.properties:

android.library.reference.1=../testApp //absolute or relative path to your main project 
manifestmerger.enabled=true 

你也需要附加的主要項目爲圖書館的ADT插件(在Eclipse中 - 項目屬性 - > Android)到所有子項目。 主項目清單不應包含任何啓動器活動,如果您有一些活動,它將被忽略,與appWidget xml和配置活動相同。

在子項目中,您可以通過擴展或僅使用所需的類作爲普通的Java庫來配置任何您想要的,並使用主代碼。此外,您可以像在子項目中一樣使用主項目活動,服務,廣播接收者等,而不會有任何重複的子項目清單。 完成所有配置後,您可以像往常一樣爲單個項目構建需要的國家/地區所需的項目,並且可以根據需要爲不同的國家/地區安裝不同的apk。

這裏是清單合併http://www.platoevolved.com/blog/programming/android/merging-android-manifest-files/

注意的更詳細的描述,在ADT 20版預覽3.

希望這有助於加入此功能。

2

從通用代碼庫獲取多個應用程序的方法是將通用代碼作爲庫項目,並讓每個應用程序使用庫項目(請參閱http://developer.android.com/tools/projects/index.html)。 每個項目都可以重寫strings.xml,常見的可以檢查包ID。

就您的情況而言,這似乎違反了Google Play政策(Cookie切割器應用程序),因此創建一個應用程序並讓用戶選擇一個國家可能會更好。

+0

謝謝!您可以向我展示(通過文檔,鏈接等)上述行如何違反Google Play政策。我閱讀了Google Play文檔,即http://play.google.com/about/developer-content-policy.html,https://developer.android.com/distribute/googleplay/policies/index.html和http ://play.google.com/about/developer-distribution-agreement.html,但沒有發現任何與我試圖達成的目標相反的內容。 –

1

爲此,您必須使用應用程序本地化概念。爲此,您必須創建不同的資源,耐用品。假設你想在日本運行你的應用程序,你必須創建可繪製的文件夾,如「res/drawable-ja」。這與創建支持平板電腦和小型設備的不同佈局相同。 這裏是參考鏈接: http://developer.android.com/guide/topics/resources/localization.html http://developer.android.com/distribute/googleplay/publish/localizing.html

+0

根據地區創建資源很好。最大的問題是如何根據地區對不同名稱的相同應用程序進行重命名(因此具有來自單一源代碼的不同.apk文件),並將其放在Google Play商店中。 –

1

我不知道你想要什麼。但在我的層面上,您可以獲得地理位置,在那裏您可以找出您的應用程序當前用完的位置,或者更容易從位置獲取位置,一旦找到語言環境或地理位置,您可以據此導航源。

3

我有同樣的問題。也許你現在已經找到了答案,但有些搜索最終導致我到this website,這解釋了Gradle

它似乎很好地解釋了所有的基礎知識。有關您的具體問題的答案,請參閱Build Variants下的部分Product Flavors

正如網站所解釋的,這個設計背後的目的之一就是讓它更具動態性,更容易讓多個APK使用基本相同的代碼來創建,這聽起來與您正在做的完全一樣。

我可能沒有解釋它是最好的,但該網站做得很好。