分类: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应用商店中销售。