文章目录
安装+配置Android Studio
从这一步开始:

一直点 next 即可,直到存储路径的选择上,可以放到非 C 盘,这里我放到 D 盘了(截图中没改):

是否要添加到开始菜单栏:

直到完成:

是否继承旧有配置,第一次安装的选第二个就行:

谷歌问你能不能在不侵犯你隐私的前提下获取些帮助改进的信息……我选的 send:

这个问题详见这篇博客:

配置,第一个是标准常规配置,第二个是自定义配置,选择第一个即可:

深色主题 or 浅色主题:

使用Android Studio
新建一个项目:

选择项目模块,可直接点next:

因为 Google 简易采用 Kotlin 来进行开发,不过也可以使用 java,同时指定 Minimum SDK 的版本为 21,对应 Android 5 版本:

编译器界面:

如果点了上图圈出来的那个,就会……:

运行 ‘app’ 时出错:没有找到目标设备。
模拟器
这是因为缺少模拟器,点击:

进入下图界面,点击页面中间的 Create Virtual Device...:

选择完成后点击 next:

点击 Download 下载你想要的系统,下载完之后选中,点击 Next :

点击接受,然后 next:

下载完成后点击 Finish:

更改Android SDK的路径
值得一提的是,Android SDK 的默认路径是在 C 盘,因此模拟器也会被下在 C 盘:

其实这个是可以更改的,我们根据 C: \Users\(你的主机名)\AppData\Local \Android\Sdk\ ,找到 Sdk 文件夹,将其移动到 D 盘(我是将整个 Android 文件夹移动到 D 盘了):

PS:移动时记得关闭 AS 软件,否则会因为部分组件正在被使用导致无法成功移动。
然后在 AS 里重设 Sdk 的路径:


好了我们继续说配置模拟器,之后回到之前选择系统的界面,选择下载好的系统,点击 next:

进行参数配置:

添加成功:

出现左侧的安卓手机就算配置成功啦!PS:在此之前可能会让你下载 HAXM,跟着提示点就行了,因为我们上面把 SDK 移动到了 D 盘,因此也不用担心占内存什么的~

值得一提的是,出现如下图所示的弹窗,则表示模拟器已经启动了,无需再点击启动的三角符号:

当启动模拟器之后即可返回之前界面,运行代码:

这时我出现了这样的报错:Installed Build Tools revision 版本号 is corrupted. Remove and install again
焦头烂额许久之后,找到了原因,我下载的模拟器版本是 Android 7.0 ,但是 Android SDK 却只有 API 32 这个版本:


解决方式是,下载 Android 7.0 之后,更改 build.gradle 配置文件,图中框起来的部分是修改后的内容,这里我选择的是我下载的 30 版本,之后记得点击右上角的 sync now 进行同步:


Hello World!
解决上述问题后再次运行程序,模拟器即可出现:

项目目录分析
我们来看一下 src/main/res 下的一些文件:

mipmap系:用来放置图标,有多个版本的文件夹,是为了适应不同的设备,提高了代码兼容性。values系:存放字符串、样式、颜色等配置。layout系:存放布局文件的。drawable系:存放图片。AndroidManifest.xml:整个项目的配置文件,在程序中定义的组件都需要在这个文件中注册。
AndroidManifest.xml 分析

activity表示对MainActivity进行注册。- 因为包名在上文
package中已经定义,所以用.表示省略包名。 intent-filter是拦截器,定义了整个项目的主Activity,也就是项目的入口。
MainActivity.kt 分析
MainActivity.kt 是用 kotlin 实现的代码文件,可以类比于 C++/JAVA 的 main 文件/函数:

上图红框的意义是:MainActivity 继承了 AppCompatActivity。
那么什么是
AppCompatActivity呢?
Android 21(也就是 Android 5)之后引入了 Material Design 的设计方式,为了支持 Material Color 、调色板、toolbar 等各种新特性,AppCompatActivity 就应运而生,其不仅兼容旧有的 ActionBarActivity,更是引入了AppCompatDelegate 类的设计,可以在普通的 Acitivity 中使用 AppCompate 的相关特性。
那么什么是
Acitivity呢?
Activity类 是 Android 提供的一个基类,项目中所有程序员自定义的 Activity 都必须继承 基类Activity 或者 基类Activity的子类,从而获得一个 Activity 的特性。
onCreate与Create
在 view类 中,Create 是虚函数、由框架调用,用来 生成一个窗口的子窗口。 而 OnCreate 函数是用来表示 一个窗口正在生成。
一个窗口创建(Create)之后,会向操作系统发送 WM_CREATE 消息,OnCreate() 函数主要是用来响应此消息的,因此又被叫做消息响应函数。其只是在窗口显示前设置窗口的属性,如风格、位置颜色等;实现我们要在窗口里面增加的东西,例如按扭,状态栏,工具栏等。这些子窗口一般定义成类中的一个成员变量,以保证生命周期的正确性。
Android中Bundle类的作用.
Bundle类 类似于 Map,用于存放 key-value 键值对形式的值。相对于 Map,它提供了各种常用类型的 put/get 方法,如:putString()/getString() 和 putInt()/getInt(),put() 用于往 Bundle 对象放入数据,get() 方法用于从 Bundle 对象里获取数据。Bundle 的内部实际上使用了 HashMap类型 的变量来存放 put() 方法放入的值。
savedInstanceState和onSaveInstanceState()
在 Activity 的生命周期中,只要离开了可见阶段,或者说失去了焦点,Activity 就很可能被进程 KILL 掉,这时候,就需要一种能保存当时的状态的机制—— savedInstanceState 。当一个 Activity 在 PAUSE 时,被 KILL 之前,它可以调用 onSaveInstanceState() 来保存当前 Activity 的状态信息。用来保存状态信息的 Bundle 会同时传给两个 method,即 onRestoreInstanceState() 和 onCreate()。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// override 确保该函数(即onCreate)为基类(即Activity)的虚函数并在此进行重写。
super.onCreate(savedInstanceState)
// 调用其父类Activity的onCreate方法来实现对界面的图画绘制工作。
// 其实这条语句放在子类中的onCreate方法中的任何位置都可,问题只是该语句必须要被执行,所以,最好放在第一行,避免遗忘。
// Activity中的onCreate方法中已经实现了一些基本操作,如果子类没有缺少super.onCraete,会导致子类中的onCreate方法功能不全。
setContentView(R.layout.activity_main)
// 作用:加载一个界面。Android讲究逻辑与视图分离,所以在Activity是不写界面的,界面是放在局部文件里面的。
// 该方法中传入的参数是”R.layout.activity_main“,其含义为R.java类中静态内部类layout的静态常量activity_main的值,
// 而该值是一个指向res目录下的layout子目录下的activity_main.xml文件的标识符,
// 因此代表着显示activity_main.xml所定义的画面/布局。
}
}
我们来看一下上面代码提到的 activity_main.xml:
