原创:有趣知识点摸索型文章
创作不易,请珍惜,之后会持续更新,不断完善
个人比较喜欢做笔记和写总结,毕竟好记性不如烂笔头哈哈,这些文章记录了我的IOS成长历程,希望能与大家一起进步
温馨提示:由于简书不支持目录跳转,大家可通过command + F 输入目录标题后迅速寻找到你所需要的内容
目录
- 一、运行项目
- 二、工程的目录结构
- 三、解析默认 Demo
一、运行项目
打开 Android Studio
创建一个新的 Empty Activity
项目,命名为 BoostTestIOS
。
进入开发界面后,我们发现没有可以运行的模拟器。
于是在Tools
工具栏中选择 Device Manager
打开设备管理器,并在其中点击Create Device
按钮来打开创建新设备面板。
选择一个设备型号,按需选择,然后点击 Next
进行安装。
在自己需要的版本后面点击下载。
现在就可以在 Device Manager
上看到我们的模拟器了。
点击运行。就可以看到项目顺利运行起来了。
二、工程的目录结构
Android 结构模式
任何一个新建的项目都会默认使用Android
模式的项目结构,但这并不是项目真实的目录结构,而是被Android Studio
转换过的。这种项目结构简洁明了,适合进行快速开发。
项目结构模式下的目录分析
点击上图当中的Android
区域可以切换项目结构模式。
-
.gradle 和 .idea:这两个目录下放置的都是
Android Studio
自动生成的一些文件,我们无需关心,也不要手动编辑。 - app:项目中的代码、资源等内容都是放置在这个目录下,我们后面的开发工作也基本是在这个目录下进行。
- build:这个目录主要包含了一些在编译时自动生成的文件,无需过多关心。
-
gradle:目录下包含了
gradle wrapper
的配置文件,使用gradle wrapper
的方式不需要提前将gradle
下载好,而是会自动根据本地的缓存情况决定是否需要联网下载gradle
。Android Studio
默认就是启动gradle wrapper
方式的,如果需要更改成离线模式,可以点击Android Studio
导航栏—File
—Settings
—Build
、Execution
、Deployment
—Gradle
进行配置更改。 - gitignore:这个文件是用来指定的目录或文件排除在版本控制之外的。
-
build.gradle:项目全局的
gradle
构建脚本,通常这个文件内容不需要修改。 -
gradle.properties: 这个文件是全局的
gradle
配置文件,在这里配置的属性将会影响到项目中所有的gradle
编译脚本。 -
gradlew 和 gradlew.bat:这两个文件是用来在命令行界面中执行
gradle
命令的,其中gradlew
是在Linux或Mac系统中使用的,gradlew.bat
是在Windows系统中使用的。 -
local.properties:这个文件用于指定本机中的
Android SDK
路径,通常是自动生产的,我们并不需要修改。除非你本机中的Android SDK
位置发生了变化,那么就将这个文件中的路径修改成新的位置即可。 -
settings.gradle: 这个文件用于制定项目中所有引入的模块。由于
Hello World
项目中只有一个app模块,因此该文件中也就只引入了app
这一个模块。通常下,模块的引入是自动完成的,需要我们手动修改这个文件的场景可能比较少。
app 目录下的内容分析
除app
目录外其他都是自动生成。app
目录下内容是重点。
-
build: 和外层
build
目录类似,也包含了一些在编译时自动生成的文件,不过它里面内容更复杂,不需过多关心。 -
libs: 如项目使用了第三方
jar
包,就需要存放在该目录下。目录下的jar
包会被自动添加到项目的构建路径里。 -
androidTest: 用来编写
AndroidTest
测试用例,可以对项目进行自动化测试。 -
java: 存放所有
Java
代码(包括Kotlin
),展开该目录,将看到系统帮我们自动生成了一个MainActivity
文件。 -
AndroidManifest.xml: 整个
Android
项目的配置文件,可在程序中定义所有四大组件都需要在这个文件里注册,还可以在这个文件里给应用程序添加权限声明。会经常用到。 -
text: 用来编写
UnitTest
测试用例的,是对项目进行自动化测试的另一种方式。 -
gitignore: 将
app
模块内指定的目录或文件排除在版本控制之外,作用和外层的.gitignore
文件类似。 -
build.gradle: app模块的
gradle
构建脚本,会指定很多项目构建相关的配置。 - proguard-rules.pro: 用于指定项目代码的混淆规则,当代码开发完成打包成安装包文件,如不希望代码被破解,通常会将代码进行混淆,从而让破解者难以阅读。
-
res: 项目中所使用到的所有图片,布局,字符串等资源。该文件下还有很多子目录。 图片
drawable
、布局layout
、字符串values
。
res 目录下的内容分析
展开res
目录如下。之所以有这么多mipmap
开头的文件夹,其实主要是为了让程序能够更好地兼容各种设备。在制作程序的时候最好能够给同一张图片提供几个不同分辨率的版本,分别放在这些文件夹下,然后当程序运行的时候,会自动根据当前运行设备分辨率的高低选择加载哪个文件夹下的图片。
- 所有以
drawable
开头的文件夹都是用来放图片的 - 所有以
mipmap
开头的文件夹都是用来放应用图标的 - 所有以
values
开头的文件夹都是用来放字符串、样式、颜色等配置的 -
layout
文件夹是用来放布局文件的
打开res/values/strings.xml
文件,内容如下所示:
<resources>
<string name="app_name">BoostTestAndroid</string>
</resources>
可以看到,这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。
- 在代码中通过
R.string.app_name
可以获得该字符串的引用。 - 在XML中通过
@string/app_name
可以获得该字符串的引用。
修改应用程序的名称及图标。打开AndroidManifest.xml
文件,找到如下代码:
// 图标
android:icon="@mipmap/ic_launcher"
// 应用名称
android:label="@string/app_name"
build.gradle文件
Android Studio
是采用Gradle
来构建项目的。Gradle
是一个非常先进的项目构建工具,它使用了一种基于Groovy
的领域特定语言(DSL
)来声明项目设置,摒弃了传统基于XML
(如Ant
和Maven
)的各种烦琐配置。项目中有两个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'
}
}
指定当前项目所有的依赖关系.一般有三种依赖:本地依赖、库依赖和远程依赖。
- 本地依赖可以对本地的
Jar
包或目录添加依赖关系 - 库依赖可以对项目中的库模块添加依赖关系
- 远程依赖则可以对
jcenter
库上的开源项目添加依赖关系
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
的。AppCompatActivity
是AndroidX
提供的一种向下兼容的Activity
,可以使Activity
在不同系统版本中的功能保持一致性。Activity
是Android
系统提供的一个活动基类,我们项目中所有的活动都必须继承它或者它的子类才能拥有活动的特性。(AppCompatActivity
是Activity
的子类)。
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>
网友评论