• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android程序中--不能改变的事情,android程序--改变

Android程序中--不能改变的事情,android程序--改变

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android程序源代码,android程序,android 退出程序,android应用程序开发,android驱动usb程序等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android程序中--不能改变的事情,android程序--改变


有时,开发人员会对应用程序进行更改,当安装为以前版本的更新时出现令人惊讶的结果 - 快捷方式断开,小部件消失或甚至根本无法安装。 应用程序的某些部分在发布后是不可变的,您可以通过理解它们来避免意外。

你的包名和证书

其中最明显和最可见的是“manifest package name”,它是在AndroidManifest.xml中为您的应用程序提供的唯一名称。 该名称使用Java语言风格的命名约定,具有Internet域所有权有助于避免名称冲突。 例如,由于Google拥有域“google.com”,因此所有应用程序的清单文件包名称应以“com.google”开头。开发人员必须遵守此约定,以避免与其他开发人员发生冲突。

一旦您的应用程序在其清单包名称下发布,这就是应用程序的唯一永久标识。 切换到不同的名称会产生一个全新的应用程序,无法安装为现有应用程序的更新。

与manifest包名称一样重要的是应用程序签名的证书。 签名证书表示应用程序的作者。 如果您更改应用程序已签署的证书,则它现在是一个不同的应用程序,因为它来自不同的作者。 此不同的应用程序不能作为对原始应用程序的更新上传到Market,也不能作为更新安装到设备上。

在以这两种方式之一安装更改的应用程序时,用户看到的确切行为是不同的:

  • 如果清单包名称已更改,则新应用程序将与旧应用程序一起安装,因此它们同时在用户的设备上共存。
  • 如果签名证书更改,尝试将新应用程序安装到设备上将失败,除非卸载旧版本。

如果更改应用程序的签名证书,则应始终更改其清单包名称,以避免在安装时出现故障。 换句话说,来自不同作者的应用程序使它成为一个不同的应用程序,并且应该适当地改变其包名称以反映它。 (当然,使用相同的软件包名称作为使用测试密钥签名的应用程序的开发版本,因为这些文件没有发布)。

你的AndroidManifest.xml是一个公共API

不只是你的包名是不可变的。AndroidManifest.xml的主要功能主要是从应用程序中声明一个公共API,供其他应用程序和Android系统使用。 您在清单中声明的每个组件都不是私有的(即其android:exported状态为true),都应被视为公共API,并且绝不能以破坏兼容性的方式进行更改。

构成兼容性中断的一个微妙但重要的方面是您的Activity、service和接收器组件的android:name属性。 这可能是令人惊讶的,因为我们认为android:name指向实现我们的应用程序的私有代码,但它也是(与清单包名称相结合)组件的官方唯一的公共名称,由ComponentName 类表示。

更改应用程序中的组件名称可能会对用户产生负面影响。一些例子是:

  • 如果应用程序的MainActivity的名称发生更改,则用户对其进行的任何快捷方式将不再工作。快捷方式是一个Intent,它直接指定应该运行的ComponentName。
  • 如果实施动态壁纸的服务名称发生更改,则启用动态壁纸的用户在获取新版应用时会将壁纸还原为系统默认值。对于输入法,辅助功能服务,Honeycomb的新高级Widget等也是如此。
  • 如果实现设备管理器的接收器的名称改变,则与活动壁纸示例一样,当应用更新时,设备管理器将被禁用。这也适用于其他类型的接收器,如App Widget。

这些行为Intent系统在Android上使用的结果。有两种主要的意图:

  • 隐式意图(Implicit Intents)仅指定它们应该匹配的“what”,使用动作,类别,数据,MIME类型等。它们将找到的确切组件仅在运行时由包管理器与当前应用程序匹配来确定。
  • 显式意图通过ComponentName指定他们应该匹配的单个显式“who”。无论在意图中是什么,它只与在其ComponentName中给出的确切的清单包名称和类名称相关联。

这两种类型的意图对于Android如何与您的应用程序交互都很重要。一个典型的例子是用户如何浏览和选择动态壁纸。

为了让用户选择一个动态壁纸,Android必须做的第一件事是显示一个可用的动态壁纸服务的列表。它通过使用动态壁纸的适当动作构建一个隐式Intent,并询问程序包管理器所有支持此Intent的服务。结果是向用户显示的动态壁纸的列表。

当用户实际选择他们想要使用的特定动态壁纸,然而,Android现在必须建立一个明确的Intent,标识特定的动态壁纸。这是什么被交给WallpaperManager告诉它显示哪个壁纸。

这就是为什么更改清单中组件的名称将导致壁纸消失:之前保存的显式Intent现在无效,因为它引用的ComponentName不再存在。没有可用信息来指示组件的新名称。 (例如,考虑您的应用程序是否有两个不同的动态壁纸服务)相反,Android必须将活动壁纸视为已卸载,并恢复为默认壁纸。

这是输入法,设备管理员,客户经理,应用程序窗口小部件,甚至应用程序快捷方式的工作原理。 ComponentName是您在清单中声明的??组件的公共唯一名称,如果对其他应用程序可见,则不能更改。

总之:你的应用程序的某些部分不能改变。 请小心。

本文翻译自:https://android-developers.googleblog.com/2011/06/things-that-cannot-change.html 

转发请注明出处:http://www.cnblogs.com/jycboy/p/android_thingnotchange.html

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android程序中--不能改变的事情,android程序--改变
  • Android程序版本更新--通知栏更新下载安装,android程序版本

相关文章

  • 2017-05-26使用GNU parallel
  • 2017-05-26Android热补丁动态修复技术(三)—— 使用Javassist注入字节码,完成热补丁框架雏形(可使用)
  • 2017-05-26Android 涂鸦最佳实践
  • 2017-05-26安卓中Paint类和Canvas类的方法汇总,安卓中canvas
  • 2017-05-26Android 接入 OpenCV库的三种方式,androidopencv
  • 2017-05-26Android学习笔记-ImageView(图像视图),android-imageview
  • 2017-05-26天兔监控服务器和mysql,redis等监控
  • 2017-05-26Google Play发布App中遇到"多个APK:版本1未提供给任何设备配置使用。"问题的解决方法,appapk
  • 2017-05-26androd 获得wifi列表,androdwifi列表
  • 2017-05-26商城热卖,淘宝热卖商城

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android常用的图片加载库,
    • 安卓图片加载之使用universalimageloader加载圆形圆角图片
    • 自定义控件详解(四):Paint 画笔路径效果,paint画笔
    • 一个规范的自定义View——Android开发艺术探索笔记
    • Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
    • 仿《雷霆战机》飞行射击手游开发--防破解,《雷霆战机》射击手
    • Android Volley框架的使用(4),androidvolley
    • Android 6.0 Permission权限与安全机制,androidpermission
    • 手机影音7--视频播放器的基本功能(4),7--基本功能
    • Java入门(二)——果然断更的都是要受惩罚的。。。,java受惩罚

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有