项目结构分析:
该模式为Android模式的项目结构,不是真实的目录结构,但这种结构易于理解简单明了,适合快速开发。
如果要对目录进行解析,可以将模式转换为Project模式
点击:
点击后,project模式的目录就展现在我们面前
依次对目录进行分析:
gradle和idea内放置的是AS自动生成的一些文件,不需要手动编辑
app内包含了项目的绝大部分内容
libs用于存放第三方的jar包,需要把jar包放入到该目录下
src指源文件,其中andoridTset用来编写测试用例,可以对项目进行一些自动化测试;test用来编写unit test;
mian目录是最重要的目录,没有之一,内部结构如下:
1.Java主要是用来编写代码实现功能的地方,里面保存了我们写的各种类,adapter,Activity,fragment等
2.res用来存放资源,包括图片,布局,字符串等资源
drawable和mipmap主要用来存放图片,但是两者差别在于,mipmap-xxx/下的所有分辨率的图片都会保留,而drawablexxx/下的图片只有保留适配设备分辨率的图片,其余图片会丢弃掉,所以在使用的时候需要根据使用条件来放置图片,需要缩放的高质量图片以及图标应当放在mipmap中,其余的放入到drawable中
Layout内部用来存放布局文件,新建一个Activity会生成一个对应名称的xml文件,该文件为该活动对应的布局文件,内部显示了控件的位置关系等信息。一般来说Java实现功能,layout定义视图
values用来存放字符串,例如我们想做一个地图,可以定义一个xml文件来存储所有的地名以适配到搜索列表中或者定义一系列颜色以方便我们使用
3.AndroidMainifest.xml
它是整个Android项目的配置文件,在这里可以进行四大组件的注册,权限的生命,修改启动页等操作。它的使用频率在开发中相当高。
打开xml文件对内部的代码进行分析:
<application
...
</application>
这两行代码的内部主要就是定义该项目各个配置,例如主题,名称,标题等,当然也用于声明各种各样的权限和注册组件
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这个用来对Activity进行注册,注册了一个名称为 “MainActivity的活动”它内部的四行代码是用于规定项目运行时第一个加载的Activity是哪一个,当内部的几行代码放入至该活动,则项目运行时就会现行跳转至MainActivity
4.gradle以及其他文件
4.1gradle
该文件主要用于自动配置gradle,有了它不需要我们在去手动配置gralde
打开gradle-warpper.properties就可以看到
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip
就是可以根据该地址根据本地缓存的情况下载gradle.
4.2.gitignore
该文件用于将制定目录或文件排除在版本控制之外
4.3build.gradle
4.3.1全局的gradle构建脚本
内容分析:
repositories声明了jcenter代码托管仓库,有了它我们可以在项目中引用任何jcenter中的开源项目
dependencies闭包中使用了classpath声明了gradle插件,声明后我们就可以使用Gradle来构建项目
4.3.2 app中的build.gradle
app中的build.gardle相对于项目中的build.gradle更重要,后续开发中可能需要涉及到修改内部的一些内容,所以我们需要对其进行详细的分析以便于理解和使用。
看一下内部代码并对代码进行解析,很重要:
apply plugin: 'com.android.application'//应用模块
android {
compileSdkVersion 29 //项目的编译版本
buildToolsVersion "29.0.3"//项目构建工具的版本
defaultConfig { //配置项目构建的各种属性
applicationId "com.example.javaproject" //项目包的名称
minSdkVersion 24 //最低兼容Andorid的版本
targetSdkVersion 29 //在该版本做过充分测试
versionCode 1 //项目版本号,后续更新项目版本号更新
versionName "1.0" //版本名称
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes { //制定生成安装文件的相关配置
release { //debug与release对应测试版和正式版的相关配置
minifyEnabled false //是否混淆代码
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //混淆时使用的规则文件
}
}
}
dependencies { //☆指定项目的依赖关系☆
implementation fileTree(dir: 'libs', include: ['*.jar'])//implementation fileTree为本地依赖,将libs内的jar包添加到构建路径中
implementation 'androidx.appcompat:appcompat:1.1.0'//implementation 为远程依赖声明
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
repositories {
mavenCentral()
}
重点说一下targetSdkVersion,它指定的值代表了你已经在该系统版本上做过充分的测试,系统将会为你开启一些该版本对应的功能和特性,也就意味着你的值指定的越高,到目前的最新版本,你就能够使用更新的功能和特性。
4.4proguard-rules.pro
该文件主要用于指定项目代码的混淆规则,可以防止代码被别人破解。
4.5gradle.properties
全局的gradle配置文件
4.6local.properties
用于指定本机的SDK路径,如果我们的SDK路径发生更改,可以在这里进行修改
4.7settings.gradle
用于指定项目中所有引入的模块