【Android】2.0 第2章 初识Android App
分类:C#、Android、VS2015; 创建日期:2016-02-04
一、认识Android操作系统
Android最早由安迪•罗宾(Andy Rubin)创办,2007年被Google公司收购,Google公司凭借Android操作系统在智能手机上取得了巨大的成功。
1、Android操作系统的特点
Android操作系统是一个多用户的Linux系统,每一个应用程序都是一个独立的用户。系统默认为每一个应用程序分配一个唯一的Linux用户ID(这个ID只能被系统使用,并且对于应用程序来说,这个ID是未知的)。系统为一个应用程序的所有文件设置了权限,所以,只有分配给这个应用程序的用户ID才可以访问它们。
每一个进程有它主机的虚拟机(VM),所以一个应用程序的代码会独立于其它的应用程序运行。
默认情况下,每一个应用程序在它自己的Linux进程中运行。Android会在一个应用程序的任何一个组件需要被调用的时候启动这个进程。然后,当没有任何组件被调用或者系统需要为其它应用程序回收内存的时候,就关闭这个进程。
通过这种方式,Android系统实现了最少的特权原则。就是说,每一个应用程序,默认都只能调用它所需要的工作组件。这就创造了这样一种非常安全的环境,在这个环境中,一个应用程序不能访问没有被授予其权限的系统部分。
尽管如此,也有很多途径可以让一个应用程序和其它的应用程序共享数据,也可以让一个应用程序去调用系统服务:
- 为两个应用程序分配同一个Linux用户ID是可行的,这样它们就能访问对方的文件。为了节约系统资源,拥有相同用户ID的应用程序也可以被运行于相同的Linux进程 并且共享VM(必须用相同的证书签名)。
- 应用程序可以通过请求权限来访问设备数据,例如联系人、SMS信息、可插拔存储(SD卡)、相机、蓝牙、……等等。所有的应用程序权限必须在安装的时候由用户授予。
2、Android程序在系统中的存在方式
开发在Android操作系统上运行应用程序时,Android SDK工具负责编译代码,以及将任意数据并连同相关资源一块打包进一个Android包内,它实际上是一个以.apk为后缀的压缩文件。一个.apk文件中的所有代码就是一个Android应用程序。
在Android设备上安装应用程序就是安装.apk文件。
一旦安装成功,该Android程序就拥有了自己独立的运行沙盒(沙盒是在受限的安全环境中运行应用程序的一种做法,这种做法是要限制授予应用程序的代码访问权限)。
二、理解Android SDK和API版本
每个Android版本都有一个唯一的整数标识,称为API Level。由于用户使用的程序总是早于最新发布的API版本,所以实际的Android应用程序必须确保能在多版本API的环境中都能工作。
1、Android SDK和项目配置
Android SDK为我们提供了API链接库以及用于建立、测试与调试android应用的开发工具的集合。指定Android API版本配置前,要确保已经用Android SDK Manager安装了对应版本的Android SDK。
每个Android应用程序必须正确配置所使用的API级别,有三种:
- Target Framework – 使用哪种框架创建应用程序(编译用)。
- Minimum Android Version – 指定Android应用程序可使用的最低版本(运行用)。
- Target Android Version – 指定Android应用程序试图使用的版本(运行用)。
也可以将三种API设置为相同的值:

将“Target framework”更改为某个API版本,即可拥有该版本的所有API功能。如果希望兼容早期的Android版本,可修改“Minimum Android to target”选项:

上图中的选项表明开发的Android应用程序可以安装在Android 4.4.2到Android 6.0之间所有版本的手机上,即API 19~API 23。但是,虽然可以安装在这些平台上,可并不能保证应用程序都能在这些平台上正常运行。例如,将程序安装到Android 4.4.2(API 19)平台上,可代码中却调用了比API 19更高版本的API,但是却没有对应版本的编译器支撑,那么该程序肯定无法在Android 4.4.2平台上正常运行。因此,这种情况下,必须显式包含运行时检查。例如:
if (Android.OS.Build.Version.SdkInt >= Android.OS.BuildVersionCodes.Lollipop)
{
builder.SetCategory(Notification.CategoryEmail);
}
(注:Android.OS.BuildVersionCodes.Lollipop是指Android 5.0)
2、Android API版本对照表
下表列出了各种Android版本及其对应的信息:

从表中可以看出,Android的版本发布非常频繁,有时一年就发布几个版本。如何确保在如此多的版本中仍然能让应用程序可靠地运行?这就是API Level的作用。
3、API级别和自定义库
当创建Android Libraries项目时,应该让开发的库函数能应用于各种版本的API,因此一般不需要设置最低级别的API和最高级别的API,而是应遵循以下的最佳做法:
- 引用某个版本的API时,要确保应用程序运行的API版本不低于所引用的版本。
- 为其他安卓应用程序设计自定义的库函数时,要为该应用程序设置需要的最低API级别。
总之,要确保开发的库函数使用尽可能少的API,以便让所设计的库适用范围更广。
三、在Debug模式下调试应用程序
1、在模拟器中调试Android应用程序
由于模拟器启动较慢,所以无论是C#开发还是Java开发,最好的办法都是先将模拟器启动起来,然后再调试。
一般使用VS2015在Debug模式下用模拟器调试。由于调试模式下默认包含了可适用于多种CPU型号的调试信息,所以Debug模式下生成的.apk文件比较大。
2、在真机上调试Android应用程序
也可以直接在真机上调试应用程序,只需要通过USB将手机连接到电脑上即可,此时在调试选项中会自动出现手机型号。
四、部署应用程序到真机
Debug模式下调试完成后,先改为Release模式,然后将其发布到真机上(真机不再包含调试信息,此时生成的.apk文件会小很多)。
当然,也可以通过压缩扩展库进一步减少.apk文件的大小。比如第3章百度应用程序中调试环境下.apk文件较大,将.jar包分开后就会显著减少.apk文件的大小。
要将你的程序发布到手机上,需要先查看你手机上的Android操作系统版本,确保你编写的应用程序使用的编译器版本和你手机操作系统的版本一致。
下面以手机的Android操作系统版本为4.4.4为例,说明将你用C#编写的应用程序发布到手机上运行的具体实现步骤。
发布前,先将项目属性改为API Level 19(与手机的4.4.4版本对应),如下图所示:

然后选择下面介绍的两种办法之一发布即可。
1、第1种办法
先将【Debug】模式改为【Release】模式(这一步很重要,否则无法发布),然后选择主菜单的【工具】à【Android】à【Publish Android Application】,如下图所示:

在弹出的发布窗口中,选择【Create New KeyStore】,输入【Password】,单击【Next】,然后输入别名(Alias)、口令(Password)、你编写的程序有效年数(Validity years)、你的姓名(First and Last Name)等信息:

单击【Next】,输入发布的目标文件夹,应用程序文件名,然后单击【Create】,它就会自动在目标文件夹下创建PhonewordApp-Aligened.apk文件。

注意:要确保手机的【应用程序设置】勾选了“允许未知来源的应用程序”。
将发布生成的PhonewordApp-Aligened.apk文件拷到你的手机上,然后双击安装、运行。
用这种方式发布的应用程序也可以在Android应用商店中销售。
2、第2种办法
先将【Debug】模式改为【Release】模式(这一步很重要,否则无法发布)。
鼠标右击项目名,然后选择【Export Android Package】,如下图所示:

此时它就会自动在Release文件夹下生成多个.apk文件。
根据你的手机类型,将生成的某个匹配的PhonewordApp-Signed.apk文件(在项目的Release文件夹下)拷到你的手机上,然后双击安装、运行。
用这种方式发布的应用程序只能直接在真机上运行,无法在Android应用商店中销售。
【Android】2.0 第2章 初识Android App的更多相关文章
- Android群英传笔记——第九章:Android系统信息和安全机制
Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...
- Android群英传笔记——第一章:Android体系与系统架构
Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起 ...
- Android群英传笔记——第二章:Android开发工具新接触
Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...
- android 9.0 Launcher3 去掉抽屉式,显示所有 app
效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAp ...
- Android Studio3.0 Error:Execution failed for task ':app:javaPreCompileDebug' 错误
Error:Execution failed for task ':app:javaPreCompileDebug'. > Annotation processors must be expli ...
- Android 4.0 ICS SystemUI浅析——StatusBar结构分析
Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...
- Android进阶之光-第1章-Android新特性-读书笔记
第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...
- Android的学习第六章(布局一LinearLayout)
今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...
- Google Android 6.0 权限完全解析
注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...
随机推荐
- Aspect实现对方法日志的拦截记录
在实际的业务系统中,我们通常都希望程序自动的打印方法的入参和返回值,某些特定的方法可能不想打印返回值(返回数据过大,打印日志影响效率),特有了下面的实现. 1.忽略返回值的java注解类 import ...
- 技术实战:基于 MHA 方式实现 MySQL 的高可用(转)
转自:http://os.51cto.com/art/201307/401702_all.htm MHA故障转移可以很好的帮我们解决从库数据的一致性问题,同时最大化挽回故障发生后的数据.本文分享了基于 ...
- NTP国内时钟服务器
阿里云linux时钟服务器 ntp1.aliyun.comntp2.aliyun.comntp3.aliyun.comntp4.aliyun.comntp5.aliyun.comntp6.aliyun ...
- 转:开源3D引擎介绍
Delta3D:Delta3D是一个功能齐全的游戏引擎,可用于游戏,模拟或其他图形应用.其模块化设计集成了其他的开源项目,如‘开放场景图’,‘开放动力学引擎’,‘人物动画库’和‘OpenAL’ .De ...
- 图像检索:一维直方图+欧几里得距离+flann+KNN
在F盘生成了一个文件名称为"文件夹"的文本文件. 第一步:批处理提取图像的一维颜色直方图,并保存到.xml中的featureHists 第一个參数:图像的路径 第二个參数:保存的. ...
- @Transient注解的使用
转自:https://blog.csdn.net/sinat_29581293/article/details/51810805 java 的transient关键字的作用是需要实现Serilizab ...
- hihocoder217周 树形DP
题目链接 一棵树,树中包含TRUE.FALSE.AND.OR四种结点,其中TRUE和FALSE是叶子结点,AND和OR结点的儿子包含多个结点,现在要求执行最少次数的以下操作: 把AND变成OR 把OR ...
- Python装饰器几个有用又好玩的例子
装饰器是一种巧妙简洁的魔术,类似于Java中的面向切面编程,我们可以再函数执行前.执行后.抛出异常时做一些工作.利用装饰器,我们可以抽象出一些共同的逻辑,简化代码.而简化代码的同时,就是在增加代码鲁棒 ...
- 进阶之路(基础篇) - 020 放弃Arduino IDE,拥抱Sublime Text 3
本帖转载:Arduino讨论区相信大家对Arduino IDE的不能输入中文,排版不方便,没有行号,界面难看......深恶痛绝.我也是.经过vs2012,eclipse等IDE的试用,配置麻烦,ID ...
- 蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
蓝牙HC-05与HC-06对比指令集 高电平->AT命令响应工作状态 低电平->蓝牙常规工作状态 <重新上电表示完成复位> HC-05 可以主从切换模式,但是HC-06 ...