【问题标题】:Publishing multiple apps under same package - Android在同一个包下发布多个应用程序 - Android
【发布时间】:2014-01-22 16:39:33
【问题描述】:

我有一个支持不同域的应用程序。我的代码是在包下开发的:com.example。我想在不同的包下发布多个应用程序,例如:

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 文件位置。这不方便。

【问题讨论】:

    标签: android packaging


    【解决方案1】:

    我最终将我的主项目标记为一个库,然后为每个域创建一个项目并链接到该库。

    无需使用清单或 R.java 文件。

    感谢@Tenfour04 为我指明了正确的方向!

    【讨论】:

    • 你能说得更具体些吗?
    【解决方案2】:

    在您的清单中,每个 Activity、Service、Provider 和 Receiver 都有一个name 属性。默认情况下,它们使用".MainActivity" 之类的快捷方式,前导. 是清单顶层package 名称的快捷方式。

    因此,如果您不想重命名 src 文件夹中的所有这些包,只需在清单中输入活动、服务、提供者和接收者的明确名称,例如,android:name="com.example.sharedmultiprojectdomainname.MainActivity"

    【讨论】:

    • 是的,这解决了 Manifest 文件。但是我的 src 包仍然是 com.example 而不是 com.example.domain1 我认为这是每个 Android 规范所必需的。
    • 我认为这不是真的。 Google Play 是否不允许您上传它们?
    • 如果你使用任何库,那些库中充满了各种源代码包,我从来没有遇到过任何问题。如果您使用 Facebook SDK,则必须将 com.facebook.LoginActivity 添加到清单中,这样可以正常工作。
    • 使用这种方法实际上更糟糕,因为我必须在域应用程序之间进行更改时更新所有 Activites(和其他类)。
    • 不,使用此方法,您必须在项目之间更改的唯一代码行是清单中的 package 行。除非我误解了你想要做什么。
    【解决方案3】:

    如果您使用 Gradle 作为构建系统,您可能希望将构建变体合并到您的构建中,这将解决包问题。更多信息可以在Google I/O speech 中找到

    希望这会有所帮助。

    【讨论】:

    • 对不起,我不使用 Gradle。无论如何,在去构建解决方案之前,我需要知道如何手动解决:-)
    • 我明白了。但是 Gradle 开箱即用地支持它,因此您不必手动操作。它已经为您完成了。
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多