Android开发自学笔记(Android Studio1.3.1)—3.Android应用结构解析

一、R文件是什么?

     如上图所示,我们可以通过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,看一下里面的内容:

其中第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是以xml形式保存的。

C)values 这个目录也包含了一些xml文件,但主要是应用中要引用的key-value对。这些XML文件声明了数组(Array)、颜色(color)、度量(Dimension)、字符串。之所以把这些东西分别放在单独的xml文件中主要是考虑到这些值能够在不更改源代码的情况下用于多语言环境。例如,根据用户语言的不同应用程序中的信息可以有多种语言版本。

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

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

我们知道资源的使用分为在java代码中使用和在XML文件中引用,下面我们分这两种情况说明一下如何使用:

1.在java代码中使用

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

2.在XML文件中引用

在XML文件中引用,我们只需要要照着“@<资源对应内部类类名>/<资源项名称>”来访问即可,比如string资源下默认定义了一个app_name的资源我们就可以这样调用“@string/app_name”

3.例外

当我们在XML中使用标识符时,这些标识符不需要使用专门的资源进行定义,我们直接使用“@id/<标识符代号>”来分配标识符即可。

目录资源的访问:

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

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

三、AndroidManifest.xml说明

清单文件:这个XML文件包含了android应用中的元信息,是每个android项目中的重要文件。在软件安装的时候被读取 ,Android中的四大组件(Activity、ContentProvider、BroadcastReceiver、Service)都需要在该文件中,以及运行这个android应用程序需要的用户权限列表,例如:电话、短信、互联网、访问SD卡,同时也详细描述了android应用的项目结构。通过可以包含如下信息:

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

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

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

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

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

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

 

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

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

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

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

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组件的学习。

时间: 2025-02-01 04:07:39

Android开发自学笔记(Android Studio1.3.1)—3.Android应用结构解析的相关文章

Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建

一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.    笔者没有怎么使用过Eclipse做Android学习,但是基于Android Studio类似于VS的项目架构,还是偏爱Android Studio这个IDE,没

Android开发自学笔记(基于Android Studio1.3.1)—1.环境搭建(转)

一.引言    本套学习笔记的开发环境是Windows 10 专业版和Android Studio 的最新版1.3.1. Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.    笔者没有怎么使用过Eclipse做Android学习,但是基于Android Studio类似于VS的项目架构,还是偏爱Android Studio这个IDE,没

Android开发自学笔记(Android Studio)&mdash;4.1布局组件

一.引言 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.在Android4.0之前,我们通常说Android开发五大布局和四大组件,这五大布局就是: LinearLayout 线性布局 FrameLayout 单帧布局,也有中文翻译为帧布局.框架布局. RelativeLayout 相对布局 AbsoluteLayout 绝对布局 TableLayout 表格布局 而在Android4.0之

Android开发自学笔记(Android Studio) 目录

开发环境如下: 操作系统:Windows 10 Pro IDE:Android Studio 1.3.X 或更高版本 其它请参见文章说明. 1.环境搭建 1.1(番外)AndroidStudio常用功能介绍 2.开始第一个Android应用 3.Android应用结构解析 4.界面编程与View组件简单介绍 4.1布局组件 有待更新…

Android开发自学笔记(Android Studio)—4.5 ProgressBar及其子类

一.前言 ProgressBar本身代表了进度条组件,它还派生出了两个常用的组件:SeekBar和RatingBar,他们的使用方法类似,只是显示界面有一定的区别.我们看一下API文档中的说明: 从图中我们是可以直接看到ProgressBar继承自View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,间接子类有RatingBar和SeekBar.下面依次介绍一下这几个控件的使用方法. 二.ProgressBar ProgressBar是界面用于与用户交互

Android开发自学笔记(Android Studio)—4.3ImageView及其子类

一.引言 ImageView继承自View组件,主要功能用来显示图片,实际上他能显示的不仅是图片,Drawable对象都可以用ImageView来显示. ImageView派生了ImageButton.ZoomButton等组件,具体的派生和继承关系可以查看API文档,我这边打开实在慢,就不再截图了. 本地API打开太慢了,本想放弃截图,不过在网上看到android api中文网站,打开速度不错,所以继承关系如下图: 在这里我们可以看到,ImageView继承自View,直接子类是ImageBu

Android开发自学笔记(Android Studio)&mdash;4.2TextView及其子类

一.引言 TextView是我们最常用的一个控件了,它类似于C# Winform程序中的Lable,Java Swing编程中的JLable,不过相对功能更强大些,但从功能上看,它其实就是个文字编辑器,只是默认关闭了编辑功能,而EditText这个编辑框控件就是它的直接子类.我们查看一下API(API Level23)中关于TextView的继承关系: 从API文档我们可以看出,TextView直接继承了View类,同时又是我们常用的EditText.Button.CheckBox.RadioB

Android开发自学笔记(Android Studio)&mdash;4.5 ProgressBar及其子类

一.前言 ProgressBar本身代表了进度条组件,它还派生出了两个常用的组件:SeekBar和RatingBar,他们的使用方法类似,只是显示界面有一定的区别.我们看一下API文档中的说明: 从图中我们是可以直接看到ProgressBar继承自View类,直接子类有AbsSeekBar和ContentLoadingProgressBar,间接子类有RatingBar和SeekBar.下面依次介绍一下这几个控件的使用方法. 二.ProgressBar ProgressBar是界面用于与用户交互

Android开发自学笔记(Android Studio)&mdash;4.界面编程与View组件简单介绍

一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组件,开发者只需要拖拖拽拽就能完成简单的应用,这些只是界面的展示,如果要完成优秀的用户交互,事件响应机制当然也是重点,这是后话. Android SDK中绝大部分UI组件都在androd.widget及其子包.android.view及其子包下,Android应用中的所有UI组件都继承了View类,V