android ApplicationId 与 PackageName

Android Gradle使用详解(一)--设置applicationId 前言:在读完Android Gradle使用技巧-gradle使用详细介绍后,大家对Android Gradle已经有了整体的了解,接下来,我们开始详细的了解gradle的每一个部分; Android Gradle使用详解(一)–设置applicationId 每个 Android 应用均有一个唯一的应用 ID,像 Java 软件包名称一样,例如 com.example.myapp。此 ID 可以在设备上和 Google Play 商店中对您的应用进行唯一标识。如果您要上传新版本的应用,应用 ID(以及. 阅读详情

Android 应用都有自己的包名。包名是设备上每个应用程序的唯一标识,同样也是 Google Play 商店里的唯一标识。就是说,假如你已经使用某个包名来发布应用,就不能再去改变应用的包名,因为这样做会导致你的应用被视为一个全新的应用,你现有的用户也不会收到应用的更新通知。

旧版的 Android Gralde 构建系统中,应用的包名由 manifest 中根节点的 package 属性决定:

AndroidManifest.xml:

<?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 还有另一个作用:用来命名资源类 R(以及用于解析相关的 Activity)。在上面的示例中,最终生成的 R 类为 com.example.my.app.R,所以如果你在其他包中的代码需要引用资源,对应的 .java 文件需要导入 com.example.my.app.R。

在新的 Android Gradle 构建系统中,你可以轻松地构建多个不同版本的应用。例如,你可以同时构建免费版和专业版的应用(使用 flavor),并且它们在 Google Play 上也应该要有不同的包名,这样它们就能够在同一设备上安装并且能够单独购买使用等等。同样的,你也可以构建 “debug”、“alpha”、“beta” 版的应用(使用 build type),它们也同样可以有唯一的包名。

同时,代码中引用的 R 类要保持不变;在构建不同版本的应用时,对应的(引用了 R 的) .java 源文件也不能改动。

因此,我们将包名的两种作用解耦:

  • “application id” 对应 apk 中 manifest 定义的应用包名,同时用于设备以及 Google Play 的应用唯一标识。
  • “package” 用于在源码中引用 R 类以及解析注册相关的 activity/service,对应 Java 的包名概念。

你可以在 Gradle 文件中指定 application id,如下所示:

app/build.gradle:

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"
    }
    ...

像以前一样,你需要像前面的 AndroidManifest.xml 示例在 Manifest 中指定给代码用的 “package”。

关键部分:参照上面的做法,即能解耦 applicationId 和 package。意思是你能够完全自由地重构你的代码,改变用于 Activity 和 Service 的内部包,改变 Manifest 的 package,重构导入语句。这都不会影响到 app 的最终 id,app 的 id 对应 Gradle 文件中 applicationId 的值。

你可以通过以下的 Gradle DSL 方法来为不同的 flavor 和 build type 定义不同的 applicationId:
app/build.gradle:

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

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

(在 Android Studio 中,你可以通过 Project Structure 图形化界面来进行这些配置。)

注意:出于兼容性考虑,如果没有在 build.gradle 文件中定义 applicationId,那么 applicationId 将默认为 AndroidManifest.xml 中所指定的 package 的值。在这种情况下,applicationId 和 package 显然未解耦,此时重构代码也将会更改应用的 id !在 Android Studio 中,新建的项目会指定这两个值。

注意:package 始终必须在默认 AndroidManifest.xml 文件中指定。如果存在多个 manifest(例如一个 flavor 有特定的 manifest 或一个 buildType 有特定的 manifest),package 可不指定,但如果被指定,必须和主 manifest 中指定的 package 完全相同。

骚戴笔记公告 阅读详情

相关推荐

单细胞专题(1) | 单细胞转录组研究样本准备指南(上)

单细胞RNA测序(scRNA-seq)是目前最前沿,能进行大规模实验的转录组研究技术,为理解细胞组成和动态生物学过程提供了很多新的见解。单细胞研究已经为我们理解发育过程,老化和疾病(如癌症)等提供了大量数据。在这里,小编主要就前期的样本准备与保存需注意问题给大家进行讲解,以备大家在不同的研究场景和研究背景下,走好单细胞转录组学研究的第一步。

bioyigene的博客 4227

安卓application_defaultConfig——安卓gradle

目录一、前言二、defaultConfig1、搞清楚几个问题2、defaultConfig 的存在形式3、defaultConfig 中属性的意义4、defaultConfig 中方法的意义三、写在最后一、前言我们在安卓开发中,编译的任务是由 gradle 来负责的。但很多时候我们进入build.gradle文件中,有种似懂非懂的感觉,所以小盆友总结并分享自己学习到的点滴。话不多说,...

weixin_39713317的博客 698

KNX智能家居工程设计应用

KNX,是一个起源于欧洲的总线标准,主要应用于家居和楼宇中,对末端电气设备进行总线式的控制,比如照明、空调、地暖、电动窗帘和遮阳设备等等。根据2017年英国著名咨询公司BSRIA的数据报告显示,在中国的智能家居和灯光控制市场,KNX产品的市场份额为各类产品中排名第一,占据了42%的市场份额,远远领先于其他的标准协议。设备中一个继电器表示一路输出,某些功能可能需要用到多个输出,比如1个窗帘AC输出需要占用两路继电器输出,一个继电器用于控制正转,一个用于控制反转,而普通开关输出则需要占用一路继电器输出即可。

hhhh5555666的博客 934

Android开发之HelloWorld

本文使用的版本是 Android2.2 今天給大家介绍的是Adndroid的第一个程序,也是我们最爱的Helloworld, 上一篇文章为大家介绍了Android的开发环境搭建,今天我们实现第一个HelloWord。 创建第一个Android应用程序 Android应用程序目录结构简单介绍 运行Android应用程序 因为作者也是初学者,所以不会讲的很深,基本都是学习...

177

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 185

NC65增加自定义参照并且参照数据要根据选择的财务组织过滤

1、首先定义一个参照类 package nc.pub.jzcm.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.ui.bd.ref.IRefDocEdit; import nc.ui.bd.ref.IRefMaintenanceHandler; public class PMPrPayDefaultRefModel extends AbstractRefModel { public PMPrPayDefaultRefModel(){ ...

xyl的博客 3494

android 获取APP的唯一标识applicationId

获取APP唯一标识applicationId的方法为: getApplicationInfo().processName(), 或getApplication().getPackageName(), 或getApplicationInfo().packageName 经测试,获取的都是gradle.build中的applicationId,而不是AndroidManifest.xml中的包...

zhuawalibai的博客 6228

【华为OD机试】真题E卷-一种字符串压缩表示的解压(C++)

有一种简易压缩算法:针对全部为小写英文字母组成的字符串,将其中连续超过两个相同字母的部分压缩为连续个数加该字母,其他部分保持原样不变。例如:字符串aaabbccccd 经过压缩变成字符串 3abb4cd请您编写解压函数,根据输入的字符串, 判断其是否为合法压缩过的字符串若输入合法则输出解压缩后的字符串 否则输出字符串!error来报告错误。

u014481728的博客 892

applicationId的使用

applicationIdapplicationId在安卓设备和商店中是作为应用的唯一标识,所以,一旦发布了应用程序,就不应该再修改applicationId,否则将被视为完全不同的应用。applicationId是在创建项目时,匹配的packagename,除了这个时候他们有关联以外,他们是彼此独立的。

薇琪的专栏 1万+

Android 14.0 首次开机默认授予app运行时权限(去掉运行时授权弹窗)

在14.0的系统rom产品定制化开发中,在6.0以后对于权限的申请,都需要动态申请,所以会在系统首次启动后,在app的首次运行时, 会弹出授权窗口,会让用户手动授予app运行时权限,在由于系统产品开发需要要求默认授予app运行时权限,不需要用户默认授予运行时弹窗,所以需要在首次开机默认授予所有app运行时权限

安卓兼职framework和app工程师的博客 2531

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2569

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 理论上来讲applicationId是android设备以及google play所公认的...

快乐李同学的博客 1万+

大模型测试人员完整学习体系(分层成长路线 + 知识框架 + 落地实操)

本文系统构建了大模型测试工程师的4级能力成长体系:L1(测试执行)-L2(专项测试)-L3(质量体系)-L4(行业标准),详细拆解了每个阶段的核心技能图谱。重点包括:入门层需掌握传统测试基础和大模型产品逻辑;进阶层需精通Prompt用例设计、RAG测试、安全对齐、自动化评测等专项能力;高级层聚焦评测平台搭建与质量体系建设;专家层深入算法对齐与行业标准制定。文章配套提供了分阶段技术工具栈、3-12个月学习路径及5类实战项目建议,形成了一套完整的大模型测试人才能力培养框架。

SmallBull的博客 453

Android Studio-ApplicationId 与 PackageName

Android Studio-ApplicationId 与 PackageName

qq_43667831的博客 753

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Android ApplicationId 与 PackageName

android中的包名一共有两个作用,一个是作为一个程序的标识(两个程序是否为同一个程序,看它们的包名),一个是在代码中使用,比如导入R文件,或者在manifest中声明如activity时,可以不声明全称,用.xx.Activity就可以,前提是Activity所在的包名的前缀秘你的程序的包名一致。 这样下来就会有一个问题,比如我前期包名没起好,想改一下,但是这样一改,你的程序就变成一个新的程

每天进步一点点 2037

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android官方技术文档翻译——ApplicationId 与 PackageName

ApplicationId 与 PackageName 所有的 Android 应用程序都有一个包名。包名是设备上的这个应用程序的唯一标识,也是在谷歌Play商店上的唯一标识。这意味着,一旦你已发布的程序使用了这个包名, 你就永远都无法改变它;否则会导致你的应用程序被当作是一个全新的应用程序,你之前的应用程序的用户将不会看到作为更新的安装包。 在此前Android Gradle 构建系统中,您的应用程序的包名由你的manifest文件的根元素里的package属性决定:

一个码农的博客 3万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android中applicationId 和packageName 的区别

manifest文件中packageName 作为应用的唯一标识。以及在R资源类中作为包名。 在gradle中的applicationId覆盖了packageName 可以在使用varians时配置不同的applicationId来构建不同的应用。

XTC博客 626
上一篇: android RXJava入门(Rxjava1.0)
下一篇: android RXJava2.0(一)
missingcall
博客等级 码龄10年 8粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值