分类: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. 【DB2】查看表空间对应的物理文件地址

    使用的命令: db2 list tablespaces show detail db2 list tablespace containers for [Tablespace ID] [show det ...

  2. mysql字符生命周期

    mysql的字符集,对数据的导入导出很关键,明白自己集在不同阶段不同场景下的意义即为重要! 01.查看mysql当前字符集 show variables like '%cahr%'; 02.用户请求m ...

  3. Newifi2(D1) 刷入pb-boot和breed的记录

    今天要给一个newifi d1刷系统时发现居然还是原厂的uboot, 使用uboot刷入rom时会进行校验拦截第三方的rom. 之前有刷过这个设备的, 但是已经完全记不清怎么处理的了. 查了一下, 这 ...

  4. 【组队赛三】-D 优先队列 cf446B

    DZY Loves Modification Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Sub ...

  5. Android 代码画角标 offcutView

      效果如下:          代码: <com.andye.OffcutView android:layout_width="30dp" android:layout_h ...

  6. Utils--封装好的下载图片的方法

    /** * 封装下载图片方法 * @param url 下载地址 * @param filename * @return 下载成功为true */ public boolean downfile(St ...

  7. [POST] What Is the Linux fstab File, and How Does It Work?

    If you’re running Linux, then it’s likely that you’ve needed to change some options for your file sy ...

  8. LFU缓存

    https://leetcode-cn.com/problems/lfu-cache/description/ 缓存的实现可以采取多种策略,不同策略优点的评估就是"命中率".好的策 ...

  9. ActiveMQ持久化及测试(转)

    转:http://blog.csdn.net/xyw_blog/article/details/9128219 ActiveMQ持久化 消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持 ...

  10. 【RS】Amazon.com recommendations: item-to-item collaborative filtering - 亚马逊推荐:基于物品的协同过滤

    [论文标题]Amazon.com recommendations: item-to-item collaborative filtering (2003,Published by the IEEE C ...