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 ...
随机推荐
- Servlet简介与生命周期
一:Servlet是什么 Servlet是运行在Web服务器上的Java程序,作为处理来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层.JSP在w ...
- 索引快速扫描(index fast full scan)
一.索引快速扫描(index fast full scan) 索引快速全扫描(INDEX FAST FULL SCAN)和索引全扫描(INDEX FULL SCAN)极为类似,它也适用于所有类型的B ...
- java 自增和自减运算符
/** 自增和自减运算符: ++: 如果是++b,则表示先对变量b+1,再执行其他的操作: 如果是b++,则表示先执行表达式操作,再对变量自身+1 --: 用法和++相同 */ //Test.java ...
- java 数组声明方法
//数组 public class Test16{ public static void main(String args[]){ //声明一: int [] x; x = new int[3];// ...
- VS2017自带VS2015编译器等在命令行下无法使用问题
1.起因 早前把VS2015卸了,安装了VS2017.因为VS2017安装的时候可以选择安装VS2015编译套件,也就安装了.使用上一直没有什么问题,所以也没有注意到这个细节. 后来使用cmake生成 ...
- OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法
OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法 在OSS控制台设置了CORS规则以后,通过JS程序去调用的时候报No 'Access-Cont ...
- Linux-中断的本质
更好的参考:CPU的内部的中断 学习中断是为了理解信号,因为信号即软中断. 中断不是轮询!比如最常见的在UART通信过程中(收发数据),有两种方式,一种是中断,一种是轮询.如果中断是轮询,这两者就没区 ...
- 时间选择器(js,css,html)
忘了从哪下载的了, 整理电脑, 做个记录, 效果图: 下载链接: 链接: https://pan.baidu.com/s/1qfYkcfn8dtLFg0oniB2GHA 提取码: 2amm
- Android百度地图相关内容汇总
Android百度地图知识讲解 1.百度地图开发环境搭建 http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程 h ...
- JavaScript 数组(Array)对象
Array 对象 Array 对象用于在单个的变量中存储多个值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, e ...