项目结构概述

项目结构示意图
2.1.png
2.2.png
结构简单分析
  • .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
    <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

    <resources>
      <string name="app_name">HelloWorld</string>
    </resources></pre>
  • 代码中引用:R.string.app_name

  • xml中引用:@string/app_name

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

androidStudio 配置文件分析
外层build.gradle文件
   //这个文件是自动生成的
     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文件
     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会先检查本地是否已经有此库的缓存,如果没有就会联网下载

    • 最后三行用来测试用例,暂时用不到。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容