2014-01-22 34 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支持它,所以你不必手动完成。它已经为你完成了。 –

相关问题