2014-01-22 61 views
0

我有一個支持不同域的應用程序。我的代碼是在包com.example下開發的。我想在不同的軟件包發佈多個應用程序,如:在同一包下發布多個應用程序 - Android

com.example.domain1,com.example.domain2等

在清單中,我定義:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.domain1" 

.... 和域2:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.domain2" 

親我面臨的瑕疵是,一旦我將基礎包名稱從domain1更改爲domain2,我需要重命名src文件夾中的所有包以及佈局。我正在尋找的是保持相同的基礎包裝com.example並在其子域下分發不同的應用程序。

有沒有更好的方法?

說明: 更改包名稱時,資源文件從com.example.R更改爲com.example.domain2.R。這意味着我必須進入所有src java類和佈局等,並更新生成的R文件位置。這並不方便。

回答

1

我最終將我的主項目標記爲庫,然後爲每個域創建項目並鏈接到庫。

沒有必要玩清單或R.java文件。

感謝@ Tenfour04指引我朝着正確的方向!

+0

你能更具體地說明你是如何做到的嗎? –

0

在你的清單中,每個Activity,Service,Provider和Receiver都有一個name屬性。默認情況下,它們使用類似".MainActivity"的快捷方式。前導.是清單頂層的package名稱的快捷方式。

所以,如果你不想在所有那些包裝重命名src文件夾,只需鍵入出來的活動,服務提供商和接收明確的名稱在您的清單,例如,android:name="com.example.sharedmultiprojectdomainname.MainActivity"

+0

是的,解決了Manifest文件。但我的src包仍然是com.example,而不是com.example.domain1,我認爲這是每個Android規範所必需的。 – checklist

+0

我不認爲這是真的。 Google Play不會讓你上傳它們嗎? – Tenfour04

+0

如果您使用任何庫,那些庫都包含各種源代碼包,我從來沒有遇到任何問題。如果您使用Facebook SDK,則必須將com.facebook.LoginActivity添加到清單,並且工作正常。 – Tenfour04

0

如果您使用Gradle作爲構建系統,您可能需要將構建變體合併到構建中,這將解決包問題。更多關於這個可以在這裏找到Google I/O speech

希望這會有所幫助。

+0

抱歉,我不使用Gradle。無論如何,在開始構建解決方案之前,我需要知道如何手動解決問題:-) – checklist

+0

我明白了。但Gradle支持它,所以你不必手動完成。它已經爲你完成了。 –

相關問題