Android—项目结构

这两天博客更新都在草稿箱里面,争取周三晚前把他们发出来!嘿嘿嘿。

上上周面试了一家公司,其中有个问题就是问我Android的项目结构,挺简单的一个问题,但是当时讲得不太好,所以我这里来总结一下!

一般常用的项目结构有Android模式和Project模式,Android模式是经过as转换过的,不是真实的项目结构,但是便于开发,很容易找到经常用的那几个文件夹。

切换到Project结构模式:

1..gradle 和.idea

这两个目录下放置的都是AS自动生成的一些文件,我们不需要关心和编辑。

 

2.app

项目中的代码,资源文件都是放置在这个目录下的,后面的开发工作也是在这个目录下进行的。

展开app:

 

(1)build

主要包含编译时自动生成的文件

(2)libs

第三方jar包都放在libs目录下。放在这个目录下的jar包都会被自动添加到构建路径里去。

(3)androidTest

这里是用来编写AndroidTest测试用例的,可以对项目进行一些自动化测试

(4)java

放置我们自己写的java文件的地方。活动也在里面。

(5)res

放置资源文件的地方。

(6)AndroidManifest.xml

这里时Android项目里的配置文件,在程序里面定义的四大组件都需要在这里注册,还有权限声明也要在这里说明。

(7) test

这里是对项目进行自动化测试的另一种方式

(8).gitignore

用于将app模块内的指定的目录和文件排除在版本控制之外。

(9)app.iml

IDEA自动生成的。

(10)build.gradle

这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。

(11)proguard_rules.pro

这个文件用于指定项目代码的混淆规则,当代码开发完成后打成安装包文件,如果不希望代码被别人破解,通常会将代码进行混淆。

 

3.build

主要包含了一些在编译时自动生成的文件。

4.gradle

这个目录下包含了gradle wrapper的配置文件

5.gitignore

这个文件是用来将指定的目录或文件排除在版本控制之外的。

6.build.gradle

这是项目全局gradle的构建脚本。

7.gradle.properties

这个文件是全局的gradle配置文件,这里配置的属性将会影响到项目所有的gradle编译脚本。

8.gradlew和gradlew.bat

这两个文件是用来在命令行中执行gradle命令的,其中gradlew是在Linux或Mac系统下使用的,gradlew.bat是在windows系统下使用的。

9.HelloWorld.iml

这是用来标识这是一个IntelliJ IDEA项目,不需要修改这个文件中的任何内容

10.local.properties

这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,不需要修改。

11.setting.gradle

这个文件用于项目所有引入的模块。由于HelloWorld项目中就只有一个app模块,因此该文件只引入了app这一模块。


Android的运行流程

介绍完目录结构之后,简单说下一个android项目是怎么运行起来的:

1.首先需要在Manifest.xml文件中进行注册。

可以看到上面注册了两个活动,其中

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

表示OkHttpActivity是主活动,在手机上点击这个图标,首先启动的就是这个活动。

2.启动活动之后,可以看到这个活动继承的是AppCompatActivity,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android2.1系统。Activity是Android系统提供的一个活动基类,我们所有项目都需要继承它或者它的子类才能拥有活动的特性(AppCompatActivity是Activity的子类)

 

活动中的onCreate()方法是活动创建时一定会被执行的方法。在这个方法里,调用了了setCntentView()方法,这个方法给当前活动引入了一个activity_ok_http布局。

3.activity_ok_http布局:这个布局文件存放在layout文件夹下,定义视图


 详解build.gradle文件

先来看最外层目录下的build.gradle

两处repositories的闭包中都声明了jcenter()这行配置,他是一个代码托管仓库,声明了这个配置之后,就可以在项目中引用任何jcenter上的开源项目了。

接下来,dependencies闭包中使用classpath声明了一个Gradle插件。

下面再来看一下app目录下的build.gradle文件

 

apply plugin: 'com.android.application' 这里表示应用了一个应用程序模块,还能选择com.android.library,表示引用的是一个库模块。程序模块和库模块最大的区别在于一个是可以直接运行的,一个只能作为代码库依附于别的应用程序模块来运行。

接下来是一个大的Android闭包,在这个闭包中我们可以配置项目构建的各种属性,其中compileSdkVersion用于指定项目的编译版本。

在android闭包中又嵌套了一个defaultConfig闭关,defaultConfig闭包,defaultConfig闭包中可以对项目的更多细节进行配置,其中applicationId用于指定项目的包名。minSdkVersion用于指定项目最低兼容的Android系统版本,这里的15指的是最低兼容到Android4.0系统。targetSdkVersion指定的值表示你在该项目版本上已经做过充分的测试,系统将会为你的应用程序启用一些最新的功能和特性。

接下来是buildTypes闭包,buildTypes闭包中用于指定生成安装文件的相关配置,通常只会有两个子闭包,一个是debug,一个是release。debug闭包用于指定生成测试版安装文件得配置,realse闭包用于指定生成正式版安装文件得配置。另外,debug闭包是可以忽略不写得,因此上面得代码中只有一个release闭包。在release闭包中,minifyEnabled用于指定是否对项目的代码进行混淆,true表示混淆,false表示不混淆。proguardFiles用于指定混淆时使用的规则文件,这里指定了两个文件,第一个proguard_android.txt是Android SDK目录下的,里面所有项目通用的混淆规则,第二个proguard—rules.pro是当前项目的根目录下的,里面可以编写当前项目混淆规则。

最后是一个dependencies闭包,这个闭包功能十分强大,他可以指定当前项目所有的依赖关系。通过AS一共有3种依赖关系:本地依赖,库依赖和远程依赖。本地依赖可以对本地的Jar包或者目录添加依赖关系,库依赖可以对项目中的库模块添加依赖关系,远程依赖可以对jcenter库上的开源项目添加依赖关系。

观察一下第一行的implementation fileTree就是一个本地依赖声明,他表示将libs目录下所有的.jar后缀的文件都添加到项目的构建路径当中,第二行是远程依赖声明。'com.android.support:appcompat-v7:28.0.0'就是一个标准的远程依赖库格式。Gradle在构建项目时会首先检查一下本地是否有这个库的缓存,如果没有的话则会自动联网下载,再添加到项目的构建路径中。

至于库依赖声明这里没有用到,它的基本格式是compile project 后面加上要依赖的库名称,比如有一个库模块的名字叫helper,那么添加这个库的依赖关系只需要加上compile project(':helper')这句声明即可。

  • 13
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值