Android安卓中,applicationId和packageName,以及在Manifest中使用${applicationId}写法

1 applicationId和packageName

1.1 IDE为Eclipse时

applicationId基于gradle编译,Eclipse IDE 不存在applicationId,也不能使用它,请忽略。

1.2 IDE为Android Studio时

1.2.1 applicationId

  1. 理论上来讲applicationId是android设备以及google play所公认的唯一标示。
  2. 若未配置applicationId时,google play无法上线(据查)
  3. 配置applicationId可以用作同一工程发布略有差异的不同apk,比如收费版和免费版、代码相同标示不同的渠道包等。
  4. 配置方法(在app的build.gradle中):

一般配置

android {
    ......
    defaultConfig {
        applicationId "sp.com.learncomposite"
        ......
    }
}

设置不同的applicationId配置
其中关于productFlavors的应用可以参考这篇文章.或者参考官方文档:文档1文档2

android {
    ......
    productFlavors {
        pro {
            applicationId = "sp.com.learncomposite.pro"
        }
        free {
            applicationId = "sp.com.learncomposite.free"
        }
    }

    buildTypes {
        ......
        debug {
            applicationIdSuffix ".debug"
        }
    }
}

当release打包时,在签名界面,可以选择你将要打出的包,也可以多选并同时打出:

当debug调试时,可以再Android studio左下角的Build Variants标签中选择当前调试的是哪个包:

1.2.2 packageName

将仅被代码(如资源文件R.java)或Manifest清单中声明(如类的包路径和packageName相同时,activity的name缩写为”.xxxActivity“)使用。

1.2.3 两者纠缠的关系

当applicationId不存在时,applicationId将默认为packageName。
当applicationId存在时,packageName仅有其本身的功能,而applicationId将作为唯一标示。

3. 在Manifest中使用${applicationId}

如Provider在声明android:authorities(该值必须唯一)时,如前缀为写死的包名字符串,当出现需要同一工程分包、分渠道打包时,安装在同一android设备将导致 INSTALL FAILED CONFLICTING PROVIDER 的报错(使用adb安装会有提示),这时可以使用${applicationId},这将避免android:authorities值非唯一的问题。

<provider
    android:name="xxxx.xxxx.xxx.xxxProvider"
    android:authorities="${applicationId}.xxxx"
    android:grantUriPermissions="true"
    android:exported="false"/>

${applicationId}也可以用在Manifest中其他需要唯一的取值情况,这种使用方式很灵活。

猜你喜欢

转载自blog.csdn.net/wq6ylg08/article/details/89847996