清单包和applicationID可以与应用程序的真实java包不同?

时间:2017-11-15 08:46:12

标签: android android-studio android-gradle android-manifest

让我们分析一下这种情况:

gradle文件上的清单包和应用程序ID:com.myweb.mysuperapppackagenamewithaso

我的应用程序源代码中的真实java包:

com.mysourcecode.package1
com.mysourcecode.package2

使用MainActivity:

com.mysourcecode.package1.MainActivity.java

这可行且安全吗?清单包和applicationID可能与应用程序的真实java包不同吗?

1 个答案:

答案 0 :(得分:0)

下面给出了我们需要考虑的三件事,

   applicationId: BuildConfig.APPLICATION_ID
   packageName: getApplicationContext().getPackageName()
   Java package: BuildConfig.class.getPackage().toString()

getPackageName提供了与gradle文件最后一刻创建的applicationId相同的overrides AndroidManifest包。最终的 AndroidManifest包含相同的applicationId 。getPackageName与applicationId相同,因为applicationId会在最后时刻覆盖AndroidManifest中的packageName。

但是对于Java代码,包与项目结构相同。源代码中用于引用R class并解析任何相关活动,服务注册的包继续被称为清单中定义的包。因此,AndroidManifest应该具有与Java包相同的包来解析相关活动,服务。

因此,使用相同的java包,我们可以使用所有唯一的applicationId创建任意数量的APK。

示例:application flavors

参考:Android Package Name Vs Application ID