我有一个支持不同域的应用程序。我的代码是在com.example包下开发的。我想在不同的包下发布多个应用程序,如:
com.example.domain1,com.example.domain2等
在清单中我定义:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.domain1"
.... 对于domain2:
<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文件位置。这不方便。
答案 0 :(得分:1)
我最终将我的主项目标记为库,然后为每个域创建项目并链接到库。
无需使用清单或R.java文件。
感谢@ Tenfour04指出我正确的方向!
答案 1 :(得分:0)
在您的清单中,每个Activity,Service,Provider和Receiver都有name
属性。默认情况下,他们使用".MainActivity"
之类的快捷方式。前导.
是清单顶级package
名称的快捷方式。
因此,如果您不想重命名src文件夹中的所有这些包,只需在清单中键入活动,服务,提供商和接收者的显式名称,例如android:name="com.example.sharedmultiprojectdomainname.MainActivity"
。
答案 2 :(得分:0)
如果您使用Gradle作为构建系统,您可能希望将构建变体合并到构建中,这将解决包问题。有关详情,请参阅此Google I/O speech
希望这有帮助。