购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 Android项目结构分析

2.4.1 Android项目的目录结构

根据Android项目向导创建的Android应用程序,虽然没有编写一行代码,但是它也具有一个完整的Android项目的结构。

上图为Eclipse的Package Explorer中显示的HelloWord应用的目录结构。可以看出包含很多不同的文件与文件夹,下面对目录中的文件及文件夹进行说明。

· src:包含项目的Java源文件。

· gen:包含了由编译器根据项目的资源自动生成的R.java文件。它会引用在项目中能找到全部资源,无需开发人员对其进行维护,全部是编译器自动完成。

· Android 4.2.2:Android4.2.2的jar包,包含了这个Android应用程序所需要的所有类库。

· assets:包含项目中所用到的所有原生资源。

· bin:包含了生成过程中ADT生产的文件,它会把项目打包成一个.apk文件(Android应用的安装包)。.apk包含了Android运行所需的一切文件,包括.dex文件、清单文件、资源文件等。

· res:该目录存放了Android项目的各种资源文件,比如,/layout/目录存放了界面布局文件,/values/目录存放了各种XML格子的资源文件,/drawable-Xxx/目录存放一些位图或者XML的资源。

· AndroidManifest.xml:Android应用程序的清单文件。可以在其中注册Android四大组件、也可以注册应用程序所需的权限。

介绍了Android项目的目录结构,下面对gen下的R.java文件以及AndroidManifest.xml清单文件进行单独讲解,其它的内容,会在本书的其它章节进行讲解。

2.4.2 自动生成的R.java

gen目录下的R.java文件是编译器自动生成的,它无需开发人员对其进行维护。R.java会自动收录当前应用中所有的资源,并根据这些资源建立对应的ID,包括:布局资源、控件资源、String资源、Drawable资源等。我们可以简单的把R.java理解成是当前Android应用的资源字典。

在当前项目不能包含任何错误的前提下,手动删除了R.java文件,编译器会立即重新生成一个R.java文件;在res/目录中增加了一个新的资源,编译器也会立即把这个资源的ID收录到R.java文件中。,但是都是有个前提的,就是当前项目不能包含任何错误。当发现在更新的资源后,R.java没有对此资源进行收录,那么就需要检查一下当前项目是否存在错误。

2.4.3 清单文件AndroidManifest.xml

AndroidManifest.xml清单文件是每个Android项目所必须的,它是整个Android项目的全局描述文件。在接触一个新项目时,最先看的就是清单文件,Android清单文件AndroidManifest.xml通常可以包含如下信息:

· 应用程序的包名及版本号,对应了应用的唯一标识。

· 应用程序所包含的所有组件(四大组件),均需要在此注册。

· 应用支持兼容的最低SDK版本和目标SDK版本。

· 应用所需要的系统权限。

既然介绍了AndroidManifest.xml包含的信息,那么就下面根据HelloWord应用的实例,介绍AndroidManifest.xml的清单信息。

代码清单:\codes\02\04\HelloWord\AndroidManifest.xml

 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bookdemo.helloword"
    android:versionCode="1"
    android:versionName="1.0" >
    <!-- package属性指定当前应用包名为: com.bookdemo.helloword-->
    <!-- android:versionCode和android:versionName指定当前应用的版本号-->

    <!-- uses-sdk 指定当前最低兼容SDK 8 目标版本为SDK17 -->
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <!-- 配置应用程序的图标、标题、主题等 -->
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 注册一个Activity,并指定对应实现类 -->
        <activity
            android:name="com.bookdemo.helloword.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android
            </intent-filter>
</activity>
</application> </manifest>

Android为了安全起见,清单文件AndroidManifest.xml除了对应用的基本属性进行设置和注册Android组件之外,还需要对应用程序可能需要访问的系统权限进行显示注册。例如当前应用程序需要访问网络、需要发送短信、需要拨打电话等,这些都需要在清单文件中注册对应权限。

对于应用权限,需要通过<user-permission…/>元素进行注册。

例如,为当前应用注册访问网络的权限:

<uses-permission android:name="android.permission.INTERNET"/>

对于应用全局的权限,在<manifest…/>中注册,对于某个组件所具有的权限,需要在对应组件的元素内进行注册,如在<activity…/>中可以对当前的Activity注册对应权限。

Android系统为了系统安全性的考虑,对所有需要访问系统资源的地方都需要进行显式的权限注册,所以它也提供了大量的权限,这些权限都被以常量的形式定义在Manifest.permission类中。所有被应用程序注册的权限,在安装应用的时候,都会提示给用户知道。

下面介绍一些常用的权限:

· ACCESS_NETWORK_STATE:允许应用程序获取网络状态信息的权限。

· ACCESS_WIFI_STATE:允许应用程序获取Wifi网络状态信息的权限。

· BATTERY_STATS:允许应用程序获取电池状态信息的权限。

· BLUETOOTH:允许应用程序连接匹配蓝牙设备的权限。

· BROADCAST_SMS:允许应用程序接收短信提醒的权限。

· CALL_PHONE:允许应用程序拨打电话的权限。

· CAMERA:允许应用程序使用照相机的权限。

· CHANGE_NETWORK_STATE:允许应用程序改变网络连接状态的权限。

· CHANGE_WIFI_STATE允许应用程序改变Wifi网络连接状态的权限。

· DELETE_CACHE_FILES:允许应用程序删除缓存文件的权限。

· DELETE_PACKAGES:允许应用程序卸载程序的权限。

· FLASHLIGHT:允许应用程序访问闪光灯的权限。

· INTERNET:允许应用程序访问网络的权限。

· MODIFY_AUDIO_SETTINGS:允许应用程序修改全局声音设置的权限。

· READ_CONTACTS:允许应用程序读取联系人数据的权限。

· READ_PHONE_STATE:允许应用程序读取电话状态的权限。

· READ_PHONE_SMS:允许应用程序读取短信的权限。

· READ_EXTERNAL_STORAGE:允许应用程序读取外部存储器的权限。

· REBOOT:允许应用程序重启系统的权限

· RECORD_AUDIO:允许应用程序录音的权限。

· SEND_SMS:允许应用程序发送短信的权限。

· SET_ORIENTATION:允许应用程序旋转屏幕的权限。

· SET_TIME:允许应用程序设置时间的权限。

· SET_TIME_ZONE:允许应用程序设置时区的权限。

· SET_WALLPAPER:允许应用程序设置桌面壁纸的权限。

· VIBRATE:允许应用程序访问振动器的权限。

· WRITE_EXTERNAL_STORAGE:允许应用程序向外部存储器写入内容的权限。 oD3Sf3dYNGDRg2GHO45C+rZDWFDnloTcxK9ATHejGegubKKxecXjF9nwnvj093kg

点击中间区域
呼出菜单
上一章
目录
下一章
×