原文: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下的所有属性,在属性描述中单独注明的除外

转载于:https://www.cnblogs.com/vus520/p/3152718.html

Android基础知识之Manifest文件的组织结构相关推荐

  1. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  2. 100天精通Andriod逆向——第2天:Android基础知识和jadx的使用

    目录 一.Android基础知识介绍 1.1 Android 历史版本 1.2 apk 包文件结构 1.3 Android系统目录介绍 二.jadx的使用 2.1 jadx 的简介 2.2 jadx ...

  3. Android 基础知识+app测试权限问题

    Android 基础知识(权限篇)** 前言 ​ Android是一个开源的,基于Linux的移动设备操作系统,主要用于移动设备,如智能手机和平板电脑.Android是由谷歌及其他公司带领的开放手机联 ...

  4. Android基础知识【项目实训-实现二级导航“今日活动”及读取数据库】【5】

    [该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 ...

  5. Android基础知识——完善

    首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...

  6. android基础知识

    技术型男 随笔 - 20, 文章 - 0, 评论 - 4, 引用 - 0 android基础知识 1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速 ...

  7. Android基础知识~入门进阶,一步步走到高手

    Android基础知识~入门进阶,一步步走到高手 2011年09月01日 [b]希望新入手ANDROID设备的朋友认真阅读本帖,一些简单的问题就可以自己解决了!!! 一:基础知识[/b] [b]1.什 ...

  8. Android基础知识巩固系列 Android之四大组件——ContentProvider(内容提供者)

    因为最近要面试,于是打算整理整理一下Android的基础知识,由于之前本人已经学习过大概的Android基础知识,这里主要讲这四大组件.五大存储.六大布局.网络请求等这些内容,其他一些等有时间再整理, ...

  9. Android基础知识:在UI线程中运行代码

    本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...

最新文章

  1. “饶毅举报”事件尘埃落定,裴钢表示未发现裴钢造假。网友:我有信心一年发20篇SCI...
  2. 1.13 总结-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  3. python itertool_函数式编程的Python实践(2):Itertool
  4. Struts2整合SiteMesh
  5. node中的js-核心模块
  6. mysql和mdy_Liunx下安装MySql
  7. xp彻底删除mysql_xp彻底清除mysql数据库
  8. MySQL 5.7.18的安装及主从复制(主从同步)
  9. 计算机485通讯原理,用RS-485设计的多机通信接口电路
  10. 天勤2022数据结构(四)数组、矩阵与广义表
  11. 联想服务器怎么备份系统软件,联想电脑管家备份电脑驱动程序教程
  12. 体积渲染(1)——光线步进简单示例
  13. 解决vue报错:Avoided redundant navigation to current location
  14. Vue 腾讯防水墙验证
  15. Elsevier论文模板没有author biography的解决办法
  16. 佛蒙特大学给机器人口述「形态学」,使其「理解」人类指令
  17. 【IoT】 产品设计:结构设计之加胶和减胶
  18. 设置Layui表格字段的字体颜色
  19. 为你推荐10款开发常用的代码编辑器
  20. BLE Mesh(六)配网流程

热门文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. golang int64转string_Golang 并发数据冲突检测器与并发安全
  3. python 开发板-MicroPython:STM32 上 的 Python 开发
  4. 高精度运算(C++实现)
  5. 日常刷python总结
  6. java date类_Java的败笔-Date类
  7. 使用Python,OpenCV计算图像直方图(cv2.calcHist)
  8. 数据结构和算法:(1)数据结构的基本知识
  9. keras 的 example 文件 mnist_hierarchical_rnn.py 解析
  10. c语言arr什么意思6,初识C语言(六)