Android基础知识之Manifest文件的组织结构
原文:http://android.eoe.cn/topic/android_sdk
是AndroidManifest.xml文件中的根标签,她必须包含一个标签和指定的xmlns:android、 package两个属性。
属性:
xmlns:android
定义了Android的命名空间。这个属性一般可以设置为:
"http://schemas.android.com/apk/res/android".
package
一个Java语言风格的应用程序包名,这个包名必须唯一。这个包名可以包含大写或小写字母('A'到'Z'、'a'到'z')、数字和下划线('_')。当然个别 包名最好还是以字母开头比较好。
为了避免和其他开发人员冲突,你应该使用互联网域名作为你的基础包名(域名的反写)。例如,Google发布的应用程序包名是以com.google开头的,所以你绝不要使用usr.example来发布你的应用程序。
包名作为应用程序的唯一标示,同时它也是应用进程(application process)属性的默认名称(详情参考标签的android:process属性),也是activity的任务关联(task affinity)属性的默认值(详情参考标签的taskAffinity属性)。
* 注意* :你一旦发布了应用程序,包名就不能修改了。这个包名定义了你的应用程序的身份,所以如果你修改包名,它会被认为是一个完全不同的应用程序,从而以前版本的用户无法更新到新的版本。
android:sharedUserId
指定一个Linux用户的ID,这个ID会被其他应用程序所共享。通常情况下,Android会给每个应用程序分配一个唯一标示他们的ID。然而,如果多个应用程序的android:sharedUserId属性值相同且签署了相同的证书,它们将共享相同的ID。共享相同ID的应用程序可以访问彼此的数据,如果需要的话,还会运行同一个进程中。
android:sharedUserLabel
为android:sharedUserId而生的一个用户只读标签,这个标签设值的时候必须引用string资源文件,而不能直接使用string。
这个属性在API Level3里将介绍到。只有android:sharedUserId属性设置的时候android:sharedUserLabel属性才有意义。
android:versionCode
内部版本号。这个数字用来确定当前版本是否比另一个版本更新,数字越大版本越新。这个版本号并不会展现给用户,真正展现给用户的版本号是versionName这个属性的值。
这个值必须是整数,比如“100”。你可以任意定义它的值,只要后续版本是更高的数字。例如,它可以是一个编号:x.y这种格式的,你只需要把x和y单独的转化成数字就可以了(可以通过lower and upper 16 bits),或者你你可以在发布新版本的时候简单加1。
android:versionName
这个版本号就是展现给用户的。这个属性可以直接设值或引用string资源文件。这个版本号展现给用户并没有别的目的,这个versionCode属性意味着有重大的版本变化。
android:installLocation
应用程序的默认的安装位置。
以下关键字字符串:
<!-- 表格开始 -->
{|style="border-spacing: 0px;margin: 4px 4px; width: 90%; border-left:1px solid #ccc;border-top:1px solid #ccc; "
<!-- 这段是表头 -->
|-style="background:#DEE8F1; "
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 关键字
! style="border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px;" | 描述
<!-- 这段是表格 -->
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "internalOnly"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序会只在内部存储设备上安装。如果设了这个值,这个应用程序就不会在外部存储设备上安装,如果这时候内部存储设备空间满了,系统就不会安装这个应用程序了。如果你不定义android:installLocation属性的话,它的默认值就是internalOnly。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "auto"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序可以安装在外部存储设备上,但是系统默认安装在内部存储设备上。不过尽管已经安装完成,用户还是可以通过系统设置来把应用程序移动到内部存储设备上或者外部存储设备上(移动到SD卡 or 移动到手机内存)。
|- style=" vertical-align:top;"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | "preferExternal"
| style=" border-right:1px solid #ccc;border-bottom:1px solid #ccc; padding:5px 15px; " | 应用程序大多会安装到外部存储设备上(SD卡),但是系统并不会保证这个请求会被优先处理。比如说当外部存储设备不可用或者满了或者应用程序使用了forward-locking(不支持外部存车设备的机制)机制,这个时候应用程序就会被安装到内部存储设备上,不过尽管已经安装完成,用户还是可以通过系统设置来把应用程序移动到内部存储设备上或者外部存储设备上(移动到SD卡 or 移动到手机内存)。
|}
<!-- 表格结束 -->
* 注意:* 如果你使用了Google Play的Copy Protection组件,你的应用程序将不会安装到SD卡上,不过你可以用同是Google Play的Application Licensing来代替,这样你的应用程序就又可以安装不管是内部还是外部存储设备上,当然包括SD。
* 提示:* 默认情况下,你的应用程序只能安装到内部存储设备上,而不能安装到外部存储设备上,除非你定义了android:installLocation的属性值为auto" or "preferExternal"。
当应用程序安装到外部存储设备上的时候:
* apk安装文件会保存在外部存储设备上,但是与应用程序相关的任何数据(比如数据库)仍然会保存在内部存储设备上。
* 保存apk安装文件的容器(SD卡)会对其进行加密,只允许在当前设备上运行(用户是没有办法直接把SD卡移动到另一台设备上并进行安装的)。尽管如此,同一个设备还是可以使用多个SD卡。
* 当用户有需求的时候,应用程序还是可以移动到内部存储设备(手机内存)上的。
当然用户也会有这样的需求:把应用程序从内部存储设备移动到外部存储设备。但是如果应用程序使用了默认的android:installLocation属性即internalOnly属性,系统是不能够把应用程序从内部存储设备移动到外部存储设备上的。
关于android:installLocation这个属性,详情请参考App Install Location (包括如何处理向后兼容的问题)
参考:API Level 8。
参考:
API Level1下的所有属性,在属性描述中单独注明的除外
Android基础知识之Manifest文件的组织结构的更多相关文章
- Android基础知识之Manifest文件中的用户权限元素
原文:http://android.eoe.cn/topic/android_sdk 分任务原文链接一:http://developer.android.com/guide/topics/manife ...
- Android基础知识之Manifest中的Intent-filter元素
原文:http://android.eoe.cn/topic/android_sdk :指定活动.服务.或者广播接收者能支持的intent的类型.一个意图过滤器声明了其父组件的能力——一个活动或者服务 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- android基础知识13:AndroidManifest.xml文件解析
注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...
- Android基础知识(一)
前言 前言 从软件测试最终目的发现问题缺陷来看,Findyou比较认同一个观念,测试的能力大致可以划分成三个能力层次:发现问题.定位问题.预防问题.有机会探讨一下这个分类. 发现问题各种方式方法,比如 ...
- Android基础知识巩固:关于PendingIntent和广播
平时使用广播的场合比较多,但细节的东西,看过了也没有总结,以至于某些场合有小问题,还是要把原理和属性搞清楚才能运用自如. 其实也是自己比较懒,先看别人的blog,有个概念再去官网看英文的能好理解一些. ...
- Android基础知识之拼写检查框架
原文:http://android.eoe.cn/topic/android_sdk 拼写检查器框架 Android平台提供了一个拼写检查器的框架,来方便你在你的应用中实现并使用拼写检查.这个框架是A ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Android基础知识之API等级介绍
原文:http://android.eoe.cn/topic/android_sdk :可以让开发者通过一个表示API级别的整数来描述程序在android平台上的兼容性,系统会将与系统本身提供的API ...
随机推荐
- JavaBean与XML转换——XStream使用笔记
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6648131.html 一:View层与Control层的数据交互 做过Web项目的人都知道,当对一个requ ...
- edit-distance-动态规划,计算两词之间变换的最小步数
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- 转:Flash 插件面板 DragonBonesDesignPanel 的绿色安装方法
最近在cocos2d-js下捣腾Dragonbones.转一个文章,大家可以参考安装Dragonbones.关于这个Dragonbones,5月份的时候还用得好好的,cocos2d-js还能妥妥的加载 ...
- cocos2d-js 粒子系统使用自定义图片,还原原来的图片宽高
粒子系统使用自定义图片很简单只需要在plist最后一行设置png的名称即可.但是,在实际使用中,发现自定义图片无法使用原来的形状,例如设置了一长条的图片,结果出来确实一个个圆球. 翻了plist和cc ...
- 仿饿了么增加购物车旋转控件 - 自带闪转腾挪动画 的button
本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 转载请标明出处: http://blog.csdn.net/zxt0601/article/details/54235736 本文出 ...
- python之模块pydoc
# -*- coding: cp936 -*- #python 27 #xiaodeng import pydoc #主要用于从python模块中自动生成文档,这些文档可以基于文本呈现,也可以生成we ...
- MySQL存储引擎--MYSIAM和INNODB引擎区别
参考:http://blog.csdn.net/memray/article/details/8914042 MYSIAM和INNODB引擎区别主要有以下几点: 1.MyISAM查询性能比InnoDB ...
- url 中非法字符替换,java 正则替换
url在传输时不允许的一些字符串,参考自:http://www.ietf.org/rfc/rfc1738.txt 以下字符用java正则替换为"_",一句话搞定: "{& ...
- 基于 CoreText 实现高性能 UITableView
引起UITableView卡顿比较常见的原因有cell的层级过多.cell中有触发离屏渲染的代码(譬如:cornerRadius.maskToBounds 同时使用).像素是否对齐.是否使用UITab ...
- 使用 WM_COPYDATA 在进程间共享数据
开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...