你的位置:首页 > 操作系统

[操作系统]Android开发自学笔记(Android Studio1.3.1)3.Android应用结构解析


一、R文件是什么?

image

     如上图所示,我们可以通过findViewById方法通过传入R.id.show找到我们的TextView元素,findViewById方法也很好理解,从View中通过Id找到,那么R是什么呢?

     资源文件的使用分为在代码中使用和在其他资源文件中引用该资源文件。在我们编译一个Android应用时,Android会自动生成一个R类,在该类中根据不同的资源类型又生成了相应的内部类,该类包含了系统中使用到的所有资源文件的标示,在Android Studio编译环境下,R文件在“D:\UsersFiles\AndroidStudioProjects\MyFirstApp\app\build\generated\source\r\debug\com\example\boyliupan\myfirstapp”目录下(本项目),其中“D:\UsersFiles\AndroidStudioProjects”是我自己定义的工作空间的路径,“MyFirstApp”是我创建的项目名称。

在查询的网络资料和书中

提示R.Java文件存储在“/ge/<package name>”目录下,但是我在Android Studio的编译结果中并没有找到这一项。

    我们打开R.java,看一下里面的内容:

image

其中第1-6行是系统自动生成的注释,说明这是AAPT工具通过它找到的资源数据自动生成的文件,它不能被手动修改(因为你修改了也没用,每次重新生成都会被覆盖)。

AAPT也就是Android Asset Packaging Tool,即Android资源打包工具,通常都是由IDE自动调用,我们不需要手动去使用。

第8-39行就是AAPT自动生成的代码了,该类的名字就是R,其下定义了一些常量。我们可以把R.java理解成资源字典,记录着所有可使用资源的Id,

通过这些Id,我们就可以很方便的在程序中使用这些资源了。

AAPT工具生成R.java文件的规则主要是如下两条:

1.每类资源对对应于R类的一个内部类。比如所有字符串资源对应一个string内部类,所有布局类资源对应于layout内部类。

2.每个具体的资源向对应于内部类的一个public static final int类型的字段,比如我们在示例中定义了show的标识符,我们就可以通过R.Id.show找到。

二、Res目录说明

Res目录存放了Android应用所用的全部资源,包括图片资源、字符串资源、颜色资源等等。其中包含多个目录(这里只说明一部分):

A).其中drawable文件夹用于存储.png、.9.png、.jpg等图片资源(.9.png是Android特有的图片格式,可以根据情况进行拉伸,达到不变形的效果),他们的分变率从高到低,如果你打算在android应用中包含一个图片或者图标,就应该把它们放在这个目录。
B)layout文件夹存放的是应用程序的布局文件,这些layout是以

C)values 这个目录也包含了一些

Res目录下的资源与R.JAVA的关系

开发者只要编辑Res目录下的资源,R.JAVA根据Res内容完全自动生成,为每个资源分配一个ID,编程时可以通过ID来调用,下面我们会说使用方式。

我们知道资源的使用分为在java代码中使用和在

1.在java代码中使用

这个很简单,我们在前面的例子中已经使用过,直接调用R.id.资源ID就可以调用到(这里演示的是标识符下的资源,如果是字符串资源,就是R.string.资源ID,请自行理解)

2.在

3.例外

当我们在

目录资源的访问:

res目录资源通过Resources的相应方法来访问。

相关的信息可以这样获取:

image

三、AndroidManifest.

清单文件:这个

1.应用程序的包名,该包名将会作为该应用的唯一标识。

2.应用中所包含的组件,如Activity,Services等等。

3.应用程序兼容的最低版本

4.应用程序使用系统所需的权限声明

5.其它程序访问该应用所需的权限声明

下面是我们示例的清单文件,灰色字体是说明:

image

 

四、应用权限的说明及使用

Android应用想要调用某些系统的功能就必须具有相应的权限才可以,比如我们想调用GPS模块,这时我们就必须拥有使用GPS的权限;我们的应用也可能被其他应用调用,这时候也需要声明调用我们的应用需要的权限。

1.运行该应用需要的权限

只需要在清单文件的<manifest../>元素中添加<uses-permission…/>子元素即可。例如:

image

2.调用我们的应用所需要的权限

声明方法和上述一致,只是声明的位置要放在具体的组件元素节点下。

Android的SDK提供了大量的权限,这些权限都位于Manifest.permission类中,我们常用的权限如下:

权限

说明

ACCESS_NETWORK_STATE 允许应用程序获取网络状态
ACCESS_WIFI_STATE 运行应用程序获取WIFI状态
BATTERY_STATS 允许应用程序获取电池状态
BLUETOOTH 允许应用程序连接蓝牙
BLUETOOTH_ADMIN 允许应用程序发现蓝牙
BROADCAST_SMS 允许应用程序广播收到短信提醒
CALL_PHONE 允许应用程序使用拨号功能
CAMERA 允许应用程序使用摄像头
CHANGE_NETWORK_STATE 允许应用程序改变网络状态
CHANGE_WIFI_STATE 允许应用程序改变WIFI状态
DELETE_CACHE_FILES 允许应用程序删除缓存文件
FLASHLIGHT 允许应用程序使用闪光灯
INTERNET 允许应用程序打开网络Socket
MODIFY_AUDIO_SETTINGS 允许应用程序修改全局声音设置
PROCESS_OUTGOING_CALLS 允许应用程序监听、控制、取消呼出电话
DELETE_PACKAGES 允许应用程序删除安装包
READ_CONTACTS 允许应用程序读取联系人
READ_HISTORY_BOOKMARKS 允许应用程序读取历史书签
READ_OWNER_DATA 允许应用程序读取用户数据
READ_PHONE_STATE 允许应用程序读取手机状态
READ_PHONE_SMS 允许应用程序读取短信
REBOOT 允许应用程序重启手机
RECEIVE_MMS 允许应用程序接收、监控、处理彩信
RECEIVE_SMS 允许应用程序接收、监控、处理短信
RECORD_AUDIO 允许应用程序使用录音
SEND_SMS 允许应用程序发送短信
SET_ORIENTATION 允许应用程序旋转屏幕
SET_TIME 允许应用程序设置时间
SET_TIME_ZONE 允许应用程序设置时区
SET_WALLPAPER 允许应用程序设置壁纸
VIBRATE 允许应用程序控制振动器
WRITE_CONTACTS 允许应用程序写入联系人
WRITE_HISTORY_BOOKMARKS 允许应用程序写入历史书签
WRITE_OWNER_DATA 允许应用程序写入用户数据
WRITE_SMS 允许应用程序写短信
。。。。 。。。。。

               表格取自《疯狂android讲义》后续会做补充完善

五、结语&下篇预告

最近买了一本《疯狂Android讲义》第三版,看了前几章,不得不说,作者很有思想,安排的内容循序渐进,很多内容讲的浅显易懂,读了深有感触,这个系列的文章为读书笔记,会有一些内容参考书中的内容,我认为写的比较实用的地方会总结出来,会有借用部分,向作者致敬,希望有志学习Android开发的同学可以买一本学习学习。

下一篇会简单介绍一下Android开发中常用的组件,概念性的东西,介绍完以后新的篇章会开始Android开发中各个UI组件的学习。