分类: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的更多相关文章

  1. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  2. Android群英传笔记——第一章:Android体系与系统架构

    Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起 ...

  3. Android群英传笔记——第二章:Android开发工具新接触

    Android群英传笔记--第二章:Android开发工具新接触 其实这一章并没什么可讲的,前面的安装Android studio的我们可以直接跳过,如果有兴趣的,可以去看看Google主推-Andr ...

  4. android 9.0 Launcher3 去掉抽屉式,显示所有 app

    效果图 修改思路 1.增加全局控制变量 sys.launcher3.is_full_app,用来动态切换 2.增加两套布局,对应有抽屉和无抽屉 3.去除 allAppsButton 4.将 AllAp ...

  5. Android Studio3.0 Error:Execution failed for task ':app:javaPreCompileDebug' 错误

    Error:Execution failed for task ':app:javaPreCompileDebug'. > Annotation processors must be expli ...

  6. Android 4.0 ICS SystemUI浅析——StatusBar结构分析

    Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...

  7. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

  8. Android的学习第六章(布局一LinearLayout)

    今天我们来说一下Android五大布局-LinearLayout布局(线性布局) 含义:线性布局,顾名思义,指的是整个Android布局中的控件摆放方式是以线性的方式摆放的, 主要作用:主要对整个界面 ...

  9. Google Android 6.0 权限完全解析

    注:本文只针对Google原生Android系统有效, 小米魅族等手机有自己的权限机制, 可能不适用 一.运行时权限的变化及特点 新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是 ...

随机推荐

  1. wordpress 开源博客系统部署

     1.开发工具 server apache    下载地址:http://www.apache.org   http://httpd.apache.org/download.cgi 数据库 mys ...

  2. OPML文件

    # -*- coding: cp936 -*-#python 27#xiaodeng#OPML文件 #大纲处理标记语言其实建立在颗脱战标记语言之上的标记语言#也叫文件扩展名#是建立在XML之上的一种文 ...

  3. 编译安装imagick出错:make: *** [imagick_class.lo] Error 1

    /usr/local/lnmpsrc/imagick-3.0.1/imagick_class.c:9673: warning: assignment makes pointer from intege ...

  4. XmanagerEnterprise-6.0.0092-beat内测版|免费使用

    xshell很还好用,目前发布beat6.0免费注册.免费使用... 00.安装 11.扁平化的UI download: 链接: https://pan.baidu.com/s/1qXTjjAG 密码 ...

  5. public static List SmaDataManager.getThreads(Context context)

    public static List<TxrjThreads> getThreads(Context context) 解析获取Threads列表之要点: 1. 得到带有fail信息的th ...

  6. 【apache】phpstudy中apache 隐藏入口文件index.php (解决no input file specified错误)

    步骤: 下面我说下 apache 下 ,如何 去掉URL 里面的 index.php 例如: 你原来的路径是: localhost/index.php/Index/index改变后的路径是: loca ...

  7. 共享单车微信小程序

    微信小程序bike单车,前台使用小程序地图控件+weui+小程序相关组件和API,后台使用SpringBoot+JPA,用户及单车信息保存进mongodb,短信平台的配置信息和临时生成的验证码存放进r ...

  8. (原+转)linux安装rtl 8812au驱动

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6806917.html 参考网址: http://www.linuxdiyf.com/viewartic ...

  9. Swift中的map 和 flatMap 原理及用法

    之前对这两个概念有点糊,今天正好遇到一个相关需求,才深入了解了下. 需求如下: 大概就是对一个数组的model,重构成一个新model,返回得到一个新数组 用map很容易实现,不过后来我需要对其中进行 ...

  10. 【C#】C#项目如何获得项目的根目录

    编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法     方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...