Android Package Name Vs Application ID
原文链接:https://blog.mindorks.com/android-package-name-vs-application-id-ad95b08815a6
为不同目的创建多APK
PackageName vs ApplicaitonId
如今,我们经常遇到需要为APK创建不同包名的情况。大多数人很容易就做到这点了,但是有时候我们因为applicationId和packageName而卡住。我们必须知道packageName和applicationId的区别。还有就是Java的package。
以下三者经常搞混:
- applicationId:BuildConfig.APPLICATION_ID
- packageName:getApplicationContext().getPackageName()
- Java package:BuildConfig.class.getPackage().toString()
让我们看一个例子。
下面是从例子Android应用中截取的build.gradle的代码片段
这里有两个不同的APK。
- 发布版本:com.mindorks.example.release
- 测试版本:com.mindorks.example.debug
下面是从相同的应用的maniffest文件截取的片段
下面是工程包片段
那么,让我们创建一个调试apk并看看三者的值。
仔细查看这些值。
下面展示了APK创建之后的AndroidManifest文件。
getPackageName与applicationId值一样,并且覆盖了AndroidManifest的包名。所以最终的AndroidManifest包含相同的applicationId。所以,在最后时刻,getPackageName与applicationId相同,因为applicaitonId覆盖了AndroidManifest的packageName。
但是对于Java代码,包名与工程结构一致。代码中使用包名来引用R类,以及解析任何相关的activity,service注册,都需要调用manifest中定义的包名。因此,AndroidManifest应当使用与Java包名一致的包名来解析相关的activity,service。
因此,使用相同的java包名,我们可以创建任意数量的具有唯一applicationid的APK。
但是最终的AndroidMainfest只包含唯一的applicationId。
如果必须改变工程结构,则需要修改Manifest.xml中的packageName。
如果在manifest文件重命名了包名,即使他们具有相同的名称,也不会影响与applicationId。
使用如上方法设置productFlavors可创建多个APK。
记住,只要在Google Play商城发布了应用,**ApplicationId
就不可改变了**。
applicationId的故事到此为止。
哈啤寇丁:)