第一部分: Introduction(介绍)

    目录包含:APP  Fundamentals     (应用程序基础)

         Device   Compatibility(设备兼容性)

         System Permission     (系统权限)   

     Introduction中包含的主要知识点:

        ①一个Activity提供了一个单一屏幕的用户界面;一个service在后台独立执行相关工作;可以使用intent从一个组件到另一个组件或者启动一个其他的APP

        ②可以创建不同的布局文件(Layout Files)来适用不同的手机屏幕

     APP Fundamentals中包含的主要知识点:

        ①每一个APP都有一个唯一的Linux user ID,系统为每个APP的所有文件加入权限,只有当user ID分配了时,APP才能使用它们;

        ②每个程序都有自己单独的VM(虚拟机),运行时的代码与其他APP隔离;默认情况下,每个APP运行在自己的进程中,当系统启动这个程序时,进程被执行,

         而当程序不再使用或者系统为其他APP分配内存时,进程将被关闭。

        ③默认情况下,每个APP做的工作只用访问组件,没有更多,这确保了安全的运行环境。  

        ④两个或多个APP之间共享数据或系统服务的方式:第一:分配相同的User ID,这种情况下,每个APP能够访问彼此的文件,也可以共享相同的Linux进程和相同         的VM,但APP必须拥有相同的证书。第二:使用系统权限。必须声明相关的权限,才可用调用其他APP的数据,For instance,读取联系人,发送短信,等等

        ⑤四种类型的APP 组件(component):Activitys(活动)Service(服务)Content Provide(内容提供者)Broadcast receives(广播接收者)

        ⑥AndroidManifest.xml略读:程序的清单文件,系统在运行时首先从AndroidManifest.xml文件中读取需要的组件,必须存放在Project的根目录

          做的事情:(1)声明用户权限,比如上网和读取联系人权限

               (2)声明APP所能运行的最小版本的Android系统( minimum API Level)

               (3)声明使用的硬件和软件特性或应用程序,比如相机,蓝牙服务等

               (4)API所使用的链接库,比如谷歌地图(已退出中国,可以使用百度地图)

               (5)更多...(and more)

          声明组件的功能;

          引用资源(APP Resource),SDK build tool为每个资源分配一个唯一的整形ID(Integer),有各自独立的文件夹存放,以便能够便利的修改和应用来适            用软件国际化,比如(such as)string.xml,你可以加入到res/values-zh/下里面的内容为中国语言,等等,系统会自动转变语言字体。

          为每个activity设置不同的layout来适用不同手机的方向和大小

    Device Compatibility(设备兼容性)包含的主要知识点:

        主要讲的是为你的APP能够成功的运行在各种设备上,such as 手机、平板设备(tablets)和TV,APP应该能忍受可变性和灵活的用户界面来适应不同的屏幕配      置;只有Android兼容的设备,在谷歌商店中所有的APP都是Android兼容的设备,然而你必须要考虑你的APP是否符合每一个潜在的设备配置。比如横屏和竖屏

      最好使用一个APK文件来适用不同的手机特性,比如,获取一个指南针罗盘。

<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>

      PS:APP会比较他与设备之间的兼容性,如果不满足声明的所有特性,那么你的APP不会安装在你的设备上。当然,你可以设置 required的属性为false在运行时,

      或者你可以通过调用hasSystemFeature()来检测一个Feature是否可用,例如:

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
// This device does not have a compass, turn off the compass feature
disableCompassFeature();
}

      平台版本:Android 1.0 是API级别1,4.4是API级别19,使用<uses-sdk>的minSdkVersion 属性指出最小版本, targetSkdVersion属性指出最大版本

      在运行时需要检查API Level,当级别太低时,需要降低一些特性来适应设备

      屏幕配置;

      控制你的APP的商业化;

    System Permissiona(系统权限)中的主要知识点:

      安全结构:默认情况下,应用程序不被允许执行任何操作,因为他将严重影响其他APP操作系统和用户;每个APP都运行在一个沙箱中,而且必须显示的共享数据和资        源

      应用程序签名(Application  Signing):所有的.apk文件都必须签署数字签名,包含了APP的作者

      用户ID和文件访问:安装文件时,系统给每个包分配了一个独立的用户ID,在不同设备上,相同的包可能有不同的ID;因为不同的包有不同的ID所以在一个相同的进        程中只能运行一个包,你可以使用  sharedUserId属性在配置文件中的 manifest标签中分配相同的ID,你也可以用getSharedPreference(String , int)等方法        设置全局数据存储。

      使用许可权限:默认情况下,APP没有任何权限,这不利于用户体验,所以,在配置文件中,使用一个或多个<uses-permission>标记声明你的应用程序所需要的权        限,for instance:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.app.myapp" >
<uses-permission android:name="android.permission.RECEIVE_SMS" />
...
</manifest>

        如果请求系统权限失败,通常情况下将抛出  SecurityException异常,但也是有例外,例如  sendBroadcast(Intent)方法如果权限获取失败,将收不到消息。          然而,几乎所有情况下,一个权限失败将打印日志文件;

         特定的权限能够在一些地方强制执行你的程序的操作:

          ①当系统调用打电话时,系统会阻止调用APP的部分功能,(e.g 打电话时,无法启用数据连接)。

          ②当启动一个活动时,系统将阻止APP从其他的APP启动一个活动。

          ③同时发送和接受广播,控制谁能收到你的广播或者谁能发送一个广播给你。

          ④当访问和操作一个内容提供者(content  provider)。

          ⑤绑定或启动一个服务。

      声明和执行权限:编写和实施你自己的权限,必须先在AndroidManifest.xml文件中声明他们使用一个或多个<permission>标签,例如,APP想要控制谁能启动一个        活动可以宣布操作如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.me.app.myapp" >
<permission android:name="com.me.app.myapp.permission.DEADLY_ACTIVITY"
android:label="@string/permlab_deadlyActivity"
android:description="@string/permdesc_deadlyActivity"
android:permissionGroup="android.permission-group.COST_MONEY"
android:protectionLevel="dangerous" />
...
</manifest>

        < protectionLevel >属性是必需的,告诉系统要告知用户如何应用程序要求许可,或者是谁允许持有许可,在相关文档中描述。

        < permissionGroup >属性是可选的,用于帮助系统权限显示给用户。通常你会想将这个标准系统组(列入 android.Manifest.permission_group)或在更罕见的          情况下,由自己定义的。优先使用现有的组,这样简化了权限UI显示给用户。

        <description>属性,我们的约定,描述是两句话,第一个描述许可,第二个警告用户如果应用程序授予许可,将发生什么坏事。

        下面是标签(label)和描述(description)的一个例子,调用CALL_PHONE许可:

    <string name="permlab_callPhone">directly call phone numbers</string>
<string name="permdesc_callPhone">Allows the application to call
phone numbers without your intervention. Malicious applications may
cause unexpected calls on your phone bill. Note that this does not
allow the application to call emergency numbers.</string>

        使用adb -s选项命令来查看所有权限信息:

$ adb shell pm list permissions -s
All Permissions: Network communication: view Wi-Fi state, create Bluetooth connections, full
Internet access, view network state Your location: access extra location provider commands, fine (GPS) location,
mock location sources for testing, coarse (network-based) location Services that cost you money: send SMS messages, directly call phone numbers ...

      在配置文件中执行权限:此部分涉及到各个组件的使用功能描叙,以后将会详细解析,此处略。

      当发送广播时执行权限:同上。

      URI权限:到目前为止所描述的标准许可系统使用内容提供者时往往是不够的。一个内容提供者可能想保护自己的读和写权限,而其直接客户也需要操作特定uri到其他        应用程序。一个典型的例子是邮件附件的应用程序。访问权限的邮件应该受到保护,因为这是敏感的用户数据。但是,如果一个URI图片附件给一个图像浏览器,图像        查看器将没有权限打开附件,因为它没有理由允许访问所有电子邮件。这个问题的解决方案是per-URI权限:当开始一个活动或返回一个活动的结果,调用者可以设置        意图。 FLAG_GRANT_READ_URI_PERMISSION和/或Intent.FLAG_GRANT_WRITE_URI_PERMISSION。 这种授权接收活动许可访问特定的数据URI的        意图,不管是否有权限访问数据相对应的内容提供者的意图。这种机制允许一个公共capability-style模型,用户交互(打开附件,从列表中选择一个联系人,等)驱动特        别授予的细粒度的权限。这可能是一个关键设施减少应用程序所需的权限只有那些与他们的行为直接相关。然而,URI的细粒度权限确实需要一些合作内             容提供商持有这些URI。强烈建议内容提供商实现这个设施,并宣布他们支持通过android:grantUriPermissions属性或< grant-uri-permissions >标记。            更多的信息可以发现Context.grantUriPermission(),Context.revokeUriPermission(),和Context.checkUriPermission()方法。

总结:这部分的内容不是很重要,只是起了个介绍Android的作用,接下来会详细介绍Android的其他目录及指导。

新单词:

  configuration:配置; compile:vt,编译;配置;suffix:后缀;principle of least privilege:最小特权原理;regard:关于; incorporate:包含吸收; restrict:限制

   directly:一...就,立刻马上;

Android API Guides 安卓API指导----第一部分:Introduction(介绍)的更多相关文章

  1. 2015 Android Dev Summit(安卓开发峰会)第一天

    今年的Google I/O没有抽到票,不能到现场参加.不过11月举行的Android Dev Summit的票是先到先得的方式,所以早早的提交了注册.今天终于有机会当面跟Android系统的设计开发者 ...

  2. Android API Guides 学习笔记---Application Fundamentals(一)

    今天开始学习google官网上的API guides ,主要读了Application Fundamentals这一章节,此章节介绍了一个App的基本组成,共包括四大部分内容. 1.      App ...

  3. [翻译]API Guides - Layouts

    官方文档地址:http://developer.android.com/guide/topics/ui/declaring-layout.html PS:API Guides里面的内容不免都简单些,翻 ...

  4. Android 使用Retrofit请求API数据

    概览 Retrofit 是一个Square开发的类型安全的REST安卓客户端请求库.这个库为网络认证.API请求以及用OkHttp发送网络请求提供了强大的框架 .理解OkHttp 的工作流程见  这个 ...

  5. Android多媒体--MediaCodec 中文API文档

    *由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...

  6. Android Animation学习(一) Property Animation原理介绍和API简介

    Android Animation学习(一) Property Animation介绍 Android Animation Android framework提供了两种动画系统: property a ...

  7. 最新Android系统版本与API等级对应关系表

    最新Android系统版本与API等级对应关系表 从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/mani ...

  8. Android M Developer Preview - API Preview(一)

    API Overview The M Developer Preview gives you an advance look at the upcoming release for the Andro ...

  9. Android 系统版本和API level的关系表

    Android 系统版本和API level的关系表 wiki: https://zh.wikipedia.org/wiki/Android%E6%AD%B7%E5%8F%B2%E7%89%88%E6 ...

随机推荐

  1. 为什么wait,notify和notifyAll要与synchronized一起使用?

    https://blog.csdn.net/qq_39907763/article/details/79301813 Object.wait(),Object.notify(),Object.noti ...

  2. 线段树(区间合并) HDOJ 3308 LCIS

    题目传送门 题意:线段树操作:1. 单点更新 2. 求区间的LCIS(longest consecutive increasing subsequence) 分析:注意是连续的子序列,就是简单的区间合 ...

  3. python programming

    1. super 2. *args, **kwargs 3. class object 4. type 5. isinstance 6. list[:] = another_list

  4. AJPFX关于hashmap和hashtable 的区别

    Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...

  5. Java GUI 布局管理器

    容器可设置布局管理器,管理容器中组件的布局: container.setLayout(new XxxLayout()); Java有6种布局管理器,AWT提供了5种: FlowLayout Borde ...

  6. 修改他人电脑的Windows登录密码

    在别人电脑已登录Windows的情况下: 打开控制面板 -> 管理工具 -> 计算机管理   或者  对Win图标单击右键 -> 计算机管理 -> 本地用户和组 -> 用 ...

  7. CCF|火车购票|Java|80分

    import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Sc ...

  8. windows session logoff时进行处理动作

    目标:Windows session logoff时得到通知,进行一些记录/清理工作 测试平台: win7 x64 logoff时系统会发送WM_ENDSESSION消息,如果某个应用对这个消息的处理 ...

  9. Javaweb学习笔记6—EL表达式与JSTL及自定义标签

    今天来讲javaweb的第六阶段学习. EL表达式与JSTL及自定义标签是对上篇文章介绍的JSP的扩展,不能说是很重要的东西,但是也要了解. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps: ...

  10. Java String startsWith()方法

    描述: 这个方法有两个变体并测试如果一个字符串开头的指定索引指定的前缀或在默认情况下从字符串开始位置. 语法 此方法定义的语法如下: public boolean startsWith(String ...