3、Android项目结构分析

Android项目结构分析

文章目录

  • Android项目结构分析
    • 一、文件系统结构
      • 1、项目配置清单文件夹 manifests
      • 2、源程序文件夹Java
      • 3、资源程序文件夹res
        • ①布局文件夹res/layout
        • ②值文件夹res/values
        • ③软件设计的国际化
        • ④图像文件夹res/drawable
        • ⑤声音文件夹res/raw
    • 二、创建多模块
    • 三、Android应用程序的基本组成
      • 1、Activity组件与视图View
      • 2、Service组件
      • 3、BroadcastReceiver组件
      • 4、ContentProvider组件
      • 5、Application、Context和Intent
        • ①应用对象Application
        • ②上下文对象Context
        • ③意图对象Intent
      • 6、Android应用程序的应用入口
      • 例:调用系统提供的拨号程序
    • 四、Android Studio项目调试
      • 1、主动调试(Toast与Logcat)
        • (1)Toast
        • (2)Logcat
      • 2、动态调试

一、文件系统结构

1、项目配置清单文件夹 manifests

每个Android项目都有一个名为AndroidManifest.xml的文件,包含了Android系统运行前必须掌握的相关信息,如应用程序名称、图标、应用程序的包名、组件注册信息和权限配置等。

2、源程序文件夹Java

Android以Java作为编程语言,因此其程序文件以.java作为扩展名。Java程序文件位于src文件夹的某个包内。

3、资源程序文件夹res

在Android项目中,有字符串、位图、布局等资源,可以将其划分为三种类型:XML文件、位图(图像)文件、raw(声音)文件。

在Android项目中,有两个用于存放资源文件的文件夹,分别为res和assets。其中,res文件夹内的资源文件最终被打包到编译后的.java文件中,res文件夹内不支持深度的子目录;assets文件夹中的资源文件不会被编译,而是直接打包到应用中,assets文件夹支持任意深度的子目录。res文件夹内的资源文件可以通过R资源类访问,而assets文件夹内的资源文件则不能。

①布局文件夹res/layout

布局文件夹res/layout用来存放扩展名为.xml的布局文件,由某种布局管理器管理的若干控件对象组成,供Activity组件使用。

②值文件夹res/values

值文件夹res/values里的strings.xml是非常重要的文件,通常存放着布局文件中控件对象的属性值。

③软件设计的国际化

国际化是指在软件设计过程中将特定语言及区域脱钩的过程,当软件移植到不同的语言及区域时,软件本身不需要做任何的修改。
Android SDK并没有提供给专门的API来实现国际化,而是通过对不同的资源文件进行不同的命名来达到国际化的目的 。

比如控件值来源于文件res/values/strings.xml,通过键名hello来引用,就是符合国际化的做法。如在布局文件中,定义文本框控件的代码:

<TextView ...android:text="@string/hello" />

如果不通过引用字符串变量的方式,而是直接把字符串常量写在TextView控件的android:text属性后,这种写法对程序运行没有任何影响,只是不符合国际化的做法,其代码如下:

<TextView ...android:text="字符串常量" />

④图像文件夹res/drawable

每个Android应用项目都有一个图标,默认使用的图标文件是ic_launcher是一个绿色的机器人,文件格式是.xml,存放在文件夹res/mipmap里。

更改Android应用默认图标的两种方法:
(1)右击mipmap→New→Vector Asset→Clip Art。
(2)先将.png格式的文件,复制到文件夹res/drawable中,然后通过R文件引用该图像文件。

⑤声音文件夹res/raw

项目使用的音频文件,通常存放在res/raw文件夹里。

二、创建多模块

在Android Studio开发中,有时希望把多个相关联的应用集合在一个项目里,使用Android Studio提供的多模块功能可以做到这一点。

在一个已经创建好的项目里,创建一个新模块的操作方法是:File→New→New Module。创建New Module的方法与创建项目的步骤基本相同,只是New Module的名称取代了项目名称。

创建项目时,自动生成的app实质上就是一个Module,它会调用后来创建的Module。在工具栏里,可以选择不同的Module单独进行调试和安装。

3、Android项目结构分析_第1张图片

三、Android应用程序的基本组成

根据Android应用程序的功能,组件可划分为四类核心组件:Activity、Service、BroadcastReceiver和ContentProvider。Android四大组件都需要在项目清单文件中使用相关标签进行注册。

1、Activity组件与视图View

Activity负责用户界面的设计,是Android最重要的组件。Activity用户界面框架采用MVC模式(Model View Controller)。控制器负责接受并响应程序的外部动作,通过视图反馈应用程序给用户的信息(UI界面反馈),模型是应用程序的核心,用于保存数据和代码。Activity组件在清单文件中使用标签注册

2、Service组件

Service是Android提供的无用户界面、长时间在后台运行的组件。Android提供了许多系统服务程序。Service组件在清单文件中使用标签注册。

3、BroadcastReceiver组件

在Android系统中,当有特定事件发生时就会产生相应的广播,如开机启动完成、收到短信、电量改变、网络状态改变等。

BroadcastReceiver(广播接收者)接收来自系统或其他应用程序的广播,并做出回应。BroadcastReceiver没有UI界面,在清单文件中使用标签注册。

4、ContentProvider组件

ContentProvider组件可以在无须了解数据来源、路径的情况下,对共享数据进行查询、添加、删除和更新等操作。ContentProvider组件在清单文件中使用标签注册。

5、Application、Context和Intent

①应用对象Application

当Android程序启动时系统会创建一个Application类型的对象,用来存储系统的一些信息完成数据传递、共享和缓存等操作。Application对象的生命周期是整个程序中最长的,等于这个程序的生命周期,且是全局的、单例的,即在不同的Activity和Service中获得的对象都是同一个对象。

②上下文对象Context

Activity和Service都是Context的子类,通过Context提供的方法getApplicationContext()就能获得Context对象。通过Intent对象,Activity组件之间可以相互调用,实现有参数传递或返回值的调用。

BroadcastReceiver和ContentProvider并不是Context的子类,其所持有的Context都是由其他组件传递过来的。在Activity和Service组件里发送广播,均需要使用Intent对象。

Android组件及通信机制如下图:

3、Android项目结构分析_第2张图片

③意图对象Intent

Intent是一种轻量级的进程间通信机制,让跨进程组件通信和发送系统广播成为可能,组件Activity、Service和BroadcastReceiver都是通过消息机制被启动(激活)的,其使用的消息就封装在对象Intent里。

Content是一个抽象类且是Activity的超类,提供了startActivity()方法,并以Intent对象作为参数,用于实现窗体的跳转。

在Android中,调用其他应用的动作名称由众多的类提供,也可以自定义。Android系统提供的常用意图动作名称如下表:

方法名 功能描述
Intent.ACTION_MAIN 标识Activity为一个程序的开始,参见清单文件中对主Activity的定义
Intent.ACTION_DIAL 调用系统提供的拨号程序
Intent.ACTION_CALL 呼叫指定的电话
Intent.ACTION_SENDTO 发短信、E-Mail等
Intent.ACTION_VIEW 浏览网页、地图、播放多媒体等
Intent.ACTION_WEB_SEARCH 网络搜索
Intent.ACTION_BATTERY_CHANGED 检查手机电量情况
Intent.ACTION_REQUEST_ENABLE 蓝牙当前是否可用

6、Android应用程序的应用入口

在一个Android应用程序开始运行的时候,会单独启动一个进程(Process)。默认情况下,这个应用程序的所有组件都会运行在这个进程里。

一个Android应用程序通常由多个Activity组成,但只有一个主Activity。在项目清单文件中使用标签注册主Activity时,还需要内嵌、和标签,以此说明该Activity为应用程序的入口。以下代码是定义一个MainActivity.java为应用的主Activity代码:

<activity 
	android:name="packname.MainActivity"
    android:label="@string/app_name">
	<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	intent-filter>
activity>

例:调用系统提供的拨号程序

系统拨号程序可以理解为系统预先定义的一个Activity,通过Intent对象去激活,步骤如下:
(1)在项目的布局文件里,添加一个名为call_btn的Button控件
(2)在MainActivity程序的onCreate()方法里,添加如下代码:

//先找控件,后设置监听器(使用匿名内部类创建监听器对象)
findViewById(R.id.call_btn).setOnClickListener(new View.OnClickListener(){
     
    @Override
    public void onClick(View v){
     
        //创建意图对象
        Intent intent = new Intent();
        //调用系统的界面程序
        intent.setAction(Intent.ACTION_VIEW);
        //intent.setAction(Intent.ACTION_DIAL); //调用系统的拨号程序
        //根据数据类型打开相应的Activity(拨号程序)
        intent.setData(Uri.parse("tel:10086"));
        startActivity(intent);
    }
});

四、Android Studio项目调试

1、主动调试(Toast与Logcat)

(1)Toast

android.weiget.Toast类用于实现消息提醒,其信息在显示几秒后自动消失,只能以程序代码的方式设计。

Toast的静态方法makeText(Context,CharSequence,int)用于创建一个Toast对象,三个参数分别为:
①上下文对象,表示在哪个Activity里显示
②要显示的字符串信息
③显示的时长,可使用类常量Toast.LENGTH_LONG或Toast.LENGTH_SHORT,也可使用以毫秒为单位的正整数

通常先使用makeText()方法创建一个Toast对象,再使用show()方法显示某个Activity。在使用show()前,可以使用setGravity(int,int,int)方法设置显示位置,如果不设置,则默认出现在手机屏幕偏下的位置。

Toast.makeText(this,"显示信息",Toast.LENGTH_LONG).show(); //this表示当前Activity的上下文

(2)Logcat

Android系统运行应用程序时会产生一些日志(Log)信息,按照级别从低到高的顺序划分为Verbose(详细)、Debug(调试)、Information(信息)、Warning(警告)和Error(错误)等不同级别。

如果Android程序运行时闪退,则表明程序遇到了致命的错误。打开Logcat控制台,选择日志级别为Error,可获取错误信息。也可以通过查看Run控制台,找到出错的原因。

3、Android项目结构分析_第3张图片

Log是一个Android类,提供了产生不同级别日志信息,方法有v(string,string)、d(string,string)、i(string,string)、w(string,string)、e(string,string)。其中第一个参数是用户自定义方便筛选的标签,第二个参数是需要输出的信息。

2、动态调试

在Android Studio环境中,也可以通过设置断点、检查变量值的方式来检查错误,适用于程序错误的快速精确定位。

单击某行行号阴影区域即可设置断点,将产生一个断点标记。再次点击可以取消。

3、Android项目结构分析_第4张图片

点击工具栏上的爬虫图标,将以Debug方式运行程序,在各个断点处暂停程序运行并显示内存变量值。单击向下图标,可以以单步方式运行程序。

image-20201020203339781

3、Android项目结构分析_第5张图片


本篇文章参考书籍有:
《Android Studio移动开发教程》 肖坤——电子工业出版社,2019.1


作者:阿涛
CSDN博客主页:https://blog.csdn.net/qq_43313113
如有不对的地方,欢迎在评论区指正
欢迎大家关注我,我将持续更新更多的文章


你可能感兴趣的:(Android,android,安卓)