您的位置:首页 > 移动开发

[译]Android Package Name Vs Application ID

2017-11-15 18:18 295 查看

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的故事到此为止

哈啤寇丁:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android