ApplicationId 与 PackageName 的区别

想第一时间获取我的最新文章,请关注公众号: 技术特工队

在 Android Gradle Build System 之前,PackageName 就是 App 的进程 id。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.my.app"
    android:versionCode="1"
    android:versionName="1.0" >

此处的 package 属性有两个用途:

  1. App 的进程 ID
  2. R 的包名以及 Manifest 中 Activity 等四大组件的相对包名。

但是,Android 利用 Gradle 作为 Build System 之后就“起风了”。

apply plugin: 'com.android.application'
android {
    compileSdkVersion 19
    buildToolsVersion "19.1"

    defaultConfig {
        applicationId "com.example.my.app"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

com.android.application 插件的 android 这个 DSL container 中定义了一个 applicationId,这个 applicationId 取代 package name 成为 App 的进程 id。

不同的 flavor 或者 build type 可以拥有不同的 application id,也就是不同的进程 id。

productFlavors {
    pro {
        applicationId = "com.example.my.pkg.pro"
    }
    free {
        applicationId = "com.example.my.pkg.free"
    }
}

buildTypes {    
    debug {
        applicationIdSuffix ".debug"
    }
}

所以,application id 与 package name 分工明确。

总结:

  1. application id 负责 App 的进程 ID
  2. package name 负责 R 的包名以及 Manifest 中 Activity 等四大组件的相对包名
  3. 如果 build.gradle 中没有指定 applicationId,那么 application id 的默认值就是 manifest 的 package 属性值。

想第一时间获取我的最新文章,请关注公众号: 技术特工队

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,638评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Correctness AdapterViewChildren Summary: AdapterViews can...
    MarcusMa阅读 8,949评论 0 6
  • ——语言学科的工具性和人文性 暮春三月,阳光明媚,春暖花开。3月25日早上6:00,怀着无比激动的心情,在马、梦校...
    简单点儿Jenny阅读 379评论 0 0
  • 说起最近各大新闻很火关于起名字的一件事,话说一对奇葩父母给自己的孩子起名“王者荣耀”。这对父母绝对是王者...
    天空很晴阅读 577评论 0 0