Android API Guides 安卓API指导----第一部分:Introduction(介绍)

第一部分: 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(介绍))