Android 项目结构分析

以下内容参考自:《第一行代码》 郭霖著

这里对我的第一个项目:HelloWorld 进行分析,相关过程查看之前的专栏文章。

一、切换到Project

在这里插入图片描述
在这里插入图片描述

二、树状图分析

  • .gradle .idea 目录: 别管,自动配置的文件
  • app 目录:代码、资源等内容都在这个文件夹下
    • build 目录:别管,编译时自动生成
    • libs目录:存放第三方jar包
    • src目录:源码目录
      • androidTest目录:自动化测试用的
      • main目录:工作目录,通常只管这个目录下的文件
        • java目录:写代码的目录,activitivity.java文件就在里面
        • res目录:放资源的目录
          • drawable放图片
          • layout放布局
          • values放字符串
          • mipmap放应用图标
        • 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文件:指定引入的模块

三、主要文件分析

1、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" />
表示这个活动是项目的主活动,也是最先启动的活动。

2、MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

第一行:MainActivity继承自AppCompatActivity,扩大了app兼容范围。
第四行:onCreate()方法是活动创建时执行的方法。
第六行:setContentView()引入布局文件activity_main.xml

四、引用资源

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

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

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

五、AS配置文件分析

AS(Android Studio)是用Gradle构建项目,这种构建工具摒弃了传统的基于XML的繁琐配置。

1、外层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++或其他项目。

2、内层build.gradle文件

这个在app目录下,也是自动生成的:

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 Q的SQK编译
    • 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会先检查本地是否已经有此库的缓存,如果没有就会联网下载
    • 最后三行用来测试用例,暂时用不到。

六、其他收获

  • App设计讲究逻辑和视图分离,于是通常在布局文件中写界面,然后在活动中引入进来
  • 通过AS直接运行项目生成的都是测试版安装文件
  • AS项目的三种依赖关系:本地依赖,远程依赖,库依赖
  • 调试项目时,先在onCreate()方法外输入logt,然后就可以在其他地方logd了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值