Android项目结构概述

项目结构示意图

结构简单分析
  • .gradle .idea 目录: 自动配置的文件

  • app 目录:代码、资源等内容都在这个文件夹下

    • build 目录:编译时自动生成
    • libs目录:存放第三方jar包
    • src目录:源码目录
      • androidTest目录:自动化测试用的
      • main目录:工作目录,通常只管这个目录下的文件
        • java目录:写代码的目录,activitivity.java文件就在里面
        • res目录:放资源的目录
          • drawable放图片
          • layout放布局
          • values放字符串
          • mipmap放应用图标(h,m,xh等对应不同分辨率)
        • AndroidManifest.xml文件:整个项目的配置文件,四大组件都在这注册,添加权限声明等
      • test目录:Unit Test测试使用
      • .gitnore文件:版本控制使用
      • app.iml文件:AS自动生成的
      • build.gradle文件:gradle脚本构建文件
      • proguard-rules.pro文件:代码混淆用的,防止app被破解
    • gradle目录:包含gradle wrapper的配置文件
    • .gitgnore 文件:版本控制相关
    • build.gradle文件:构建gradle的全局脚本文件
    • gradle.properties文件:配置gradle的全局配置文件
    • gradlew gradlew.bat文件:执行gradle命令的文件,bat文件是windows系统用的
    • HelloWorld.iml文件:别管,AS自动生成的文件
    • local.properties文件:指定本机Android SDK路径,通常自动生成
    • settings.gradle文件:指定引入的模块
    主要文件分析
    AndroidManifest.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <activity android:name=".MainActivity">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>

    //表示对MainActivity这个活动进行注册,没注册不能用。其中
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    //表示这个活动是项目的主活动,也是最先启动的活动。
    资源引用

    布局文件通过R.layout.activity_main来引用,那其他资源如何引用呢?比如HelloWorld这个字符串,它的资源文件是strings.xml

    1
    2
    3
    <resources>
    <string name="app_name">HelloWorld</string>
    </resources>
    • 代码中引用:R.string.app_name
    • xml中引用:@string/app_name

    同样的,如果是图片资源就将string替换为drawable,图标则是mipmap,布局文件就是layout

    androidStudio 配置文件分析
    外层build.gradle文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //这个文件是自动生成的
    buildscript {
    repositories {
    google()
    jcenter()
    }
    dependencies {
    classpath 'com.android.tools.build:gradle:3.5.3'
    }
    }

    allprojects {
    repositories {
    google()
    jcenter()
    }
    }

    //repositories{}中声明了jcenter(),这是一个代码托管仓库,声明了这个就能引用jcenter的开源项目了。还声明了goole(),这是google自有的仓库。

    //dependencies中使用classpath声明了一个Gradle插件,用来表示这是个Android项目而不是C++或其他项目。
    内层builld.gradle文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    apply plugin: 'com.android.application'

    android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
    applicationId "com.example.helloworld"
    minSdkVersion 15
    targetSdkVersion 29
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    }
    }

    dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    }
    • 第一行应用了一个插件,一般选两个值:

      • com.android.application:表示这是个应用程序模块
      • com.android.library:表示这是个库模块,只能依附于别的应用程序模块运行
    • 第三行android{}配置项目构建的属性:

      • compileSdkVersion指定编译的版本,29代表用Android 10的SDK编译
      • buildToolsVersion指定构建工具的版本,有最新的AS会提示
      • defaultConfig{}细节配置
        • applicationId指定包名
        • minSdkVersion指定最低兼容版本,15表示Android4.0
        • targetSdkVersion数字越大会启用一些新功能,比如权限控制等
        • versionCode项目版本号
        • versionName项目版本名
      • buildTypes{}指定生成安装文件的配置
        • release{}正式版安装文件的配置
          • minifyEnabled指定是否代码混淆
          • proguardFiles指定混淆的规则文件
            • proguard-android-optimize.txtSDK目录下,项目通用混淆规则
            • proguard-rules.pro当前项目根目录下,当前项目的特有混淆规则
        • debug{}测试版安装文件的配置,通常忽略不写
    • dependencies{}:指定当前项目的所有依赖关系
      • 第一行:fileTree:本地依赖
      • 第二三行:远程依赖:androidx.appcompat域名部分,appcompat组名,1.0.2是版本名。Gradle会先检查本地是否已经有此库的缓存,如果没有就会联网下载
      • 最后三行用来测试用例,暂时用不到。
0%