Android:解析目录结构

2023-01-31  本文已影响0人  时光啊混蛋_97boy

原创:有趣知识点摸索型文章
创作不易,请珍惜,之后会持续更新,不断完善
个人比较喜欢做笔记和写总结,毕竟好记性不如烂笔头哈哈,这些文章记录了我的IOS成长历程,希望能与大家一起进步
温馨提示:由于简书不支持目录跳转,大家可通过command + F 输入目录标题后迅速寻找到你所需要的内容

目录


一、运行项目

打开 Android Studio 创建一个新的 Empty Activity 项目,命名为 BoostTestIOS

进入开发界面后,我们发现没有可以运行的模拟器。

于是在Tools工具栏中选择 Device Manager打开设备管理器,并在其中点击Create Device按钮来打开创建新设备面板。

选择一个设备型号,按需选择,然后点击 Next 进行安装。

在自己需要的版本后面点击下载。

现在就可以在 Device Manager 上看到我们的模拟器了。

点击运行。就可以看到项目顺利运行起来了。


二、工程的目录结构

Android 结构模式

任何一个新建的项目都会默认使用Android模式的项目结构,但这并不是项目真实的目录结构,而是被Android Studio转换过的。这种项目结构简洁明了,适合进行快速开发。

项目结构模式下的目录分析

点击上图当中的Android区域可以切换项目结构模式。

app 目录下的内容分析

app目录外其他都是自动生成。app目录下内容是重点。

res 目录下的内容分析

展开res目录如下。之所以有这么多mipmap开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些文件夹下,然后当程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。

打开res/values/strings.xml文件,内容如下所示:

<resources>
    <string name="app_name">BoostTestAndroid</string>
</resources>

可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。

修改应用程序的名称及图标。打开AndroidManifest.xml文件,找到如下代码:

// 图标
android:icon="@mipmap/ic_launcher"
// 应用名称
android:label="@string/app_name"
build.gradle文件

Android Studio是采用Gradle来构建项目的。Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言(DSL)来声明项目设置,摒弃了传统基于XML(如AntMaven)的各种烦琐配置。项目中有两个build.gradle文件,一个是在最外层目录下的,一个是在app目录下的。这两个文件对构建Android Studio项目都起到了至关重要的作用。

app目录下的build.gradle文件。这些代码都是自动生成的,虽然语法结构看上去可能有点难以理解,但是如果我们忽略语法结构,只看最关键的部分,其实还是很好懂的。第一行应用了一个插件。一般可以选择:1、com.android.application表示这是一个应用程序模块,2、com.android.library 表示这是一个库模块。两者的最大区别是:一个是可以直接运行的;一个只能作为代码库依赖于别的应用程序来运行。

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
}

下面是一个Android包,用于配置项目构建的各种属性。

android {
    namespace 'com.example.boosttestandroid'
    compileSdk 32 // 用于指定项目的编译版本

    defaultConfig {// 对项目的更多细节进行配置
        applicationId "com.example.boosttestandroid" // 用于指定项目的包名
        minSdk 21 // 用于指定项目最低兼容的Android系统版本
        targetSdk 32 // 指定的值表示你在该目标版本上已经做过了充分的测试,系统将会为你的应用程序启用一些最新的功能和特性
        versionCode 1 // 指定项目的版本号
        versionName "1.0" // 指定项目的版本名

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {// 用于指定生成安装文件的相关配置
        release {// 用于指定生成正式版安装文件的配置
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

指定当前项目所有的依赖关系.一般有三种依赖:本地依赖、库依赖和远程依赖。

dependencies {
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation 'androidx.appcompat:appcompat:1.4.1'
    implementation 'com.google.android.material:material:1.5.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

三、解析默认 Demo

首先我们可以看到,MainActivity 是继承自 AppCompatActivity 的。AppCompatActivityAndroidX提供的一种向下兼容的Activity,可以使Activity在不同系统版本中的功能保持一致性。ActivityAndroid系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性。(AppCompatActivityActivity的子类)。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

然后可以看到MainActivity中有一个onCreate()方法,这个方法是一个活动被创建时必定要执行的方法,其中只有两行代码,并且没有Hello World!的字样。那么之前app中显示的Hello World!是在哪里定义的呢?

其实Android程序的设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。可以看到,在onCreate()方法的第二行调用了setContentView()方法,就是这个方法给当前的活动引入了一个activity_main布局,那Hello World!一定就是在这里定义的了!我们快打开这个文件看一看。

切换到text视图:

终于找到hello world的定义了。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
上一篇 下一篇

猜你喜欢

热点阅读