盒子
盒子
Posts List
  1. 前言
  2. Android系统架构
  3. Android四大组件
  4. 搭建开发环境
  5. 日志工具的使用
  6. 总结

Android 学习之路--android基础(一)

作者Talent•C
转载请注明出处

前言

简单学习过Java基础语法后,正式进入Android开发的学习中,像我一样安卓开发零起点的小白来说,第一步就是要熟悉Android系统及我们要是使用的开发环境Android Studio
开始之前给大家推荐两本书,都是比较适合初学者的;
郭霖 著作的《第一行代码》,我购买的是第二版的,全书基于Android 7.0,使用的开发用具Android Studi 2.2
另外《疯狂android讲义》也是不错的选择。

Android系统架构

Android大致分为四层架构(由上往下): 应用层应用框架层系统运行库层Linux内核层

应用层:
所有安装的app都是运行在这一层级上的,如你下载的微信客户端等。

应用框架层:
这一层主要提供了构建应用程序可能使用的各种API,我们开发的app就是基于这些API完成的。

系统运行库层:
这一层是C/C++实现的一些Android功能库,如SQLite库提供了数据库支持,OpenGL|ES库提供了3D绘图等。
Android的运行时库,运行时库中包含了 Dalvik虚拟机; 在 Android 5.0 之前是Dalvik虚拟机,5.0之后改为 ATR运行环境,它使得每一个Android应用都可以运行在一个独立进程中,并且拥有自己的虚拟机实例。

Linux内核层:
Android系统是基于Linux内核的,这一层为设备的各种硬件提供底层驱动,如显示驱动,音视频驱动等。

Android四大组件

提到Android就不能不提四大组件,我们来看看 四大组件 都是什么?
Android四大组件分别是: 活动(Activity)服务(Service)广播接收器(Broadcast Receiver)内容提供器(Content Provider)

活动(Activity):
Activity 是所有控件的容器,程序中所有看到的东西都是放在活动中, 与OC中的UIViewController及其相似甚至完全一样。

服务(Service):
Service 比较低调了,它不显示在界面上,但是它会在后台默默运行着,即使退出app也可以继续运行。

广播接收器(Broadcast Receiver):
Broadcast Receiver 允许你的应用接收来自各处广播消息,如电话,短信等,他也可以发出广播消息。

内容提供器(Content Provider):
Content Provider 为应用间数据共享提供支持,如你的app访问电话簿中的联系人。

搭建开发环境

  • JDK: JDKJava语言的软件开发包。
  • Android SDK: 谷歌提供的Android开发工具包。
  • Android Studio: Android开发环境, 与 Xcode 作用相同。可以在google官网下载,下载完毕后直接按着提示安装就可以。

安装Android Studio完毕后会出现一个欢迎界面,点击next进行配置即可;

安装好Android Studio,我们创建第一个Android项目:
点击 Start a new Android Studio project

进入如下界面

下一步

等待编译完成,工程创建完毕

工程创建完毕我们来看看工程结构是什么样的?
上面看到的图片不是工程的真实目录,我们点击上图中的Android区域选择Project选项,此时我们看到是真实的工程目录结构;
我们从上到下有如下目录:

(1) .gradle.idea : 这两个目录都是放置Android Sudio自动生成一些文件,我们可以忽略它。
(2) app: 项目中的代码/资源文件等都会放在这里,是我们经常打交道的目录。
(3) build: 这个目录也不需要我们过多关心,它主要包含了一些在编译时自动生成的文件。
(4) gradle: 此目录包含了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会根据缓存情况自动下载,Android Sudio默认是启用gradle wrapper方式的,如需要修改可以在 Android Studio导航栏 ->File ->Setting ->Bulid, Extension, Deployment ->gradle,进行配置。
(5) .gitignore: 版本控制相关的。
(7) build.gradle: 全局构建的脚本,通常不需要修改。
(8) gradle.properties: 全局的gradle配置文件,在这里配置的属性会影响项目中所有的gradle编译脚本。
(9) FirstAndroidProject.iml: iml文件是所有Intellij IDEA 项目都会自动生成的一个文件(Android Sudio基于Intellij IDEA开发的),我们不需要修改。
(10) local.properties: 本机中Android SDK 路径信息, 自动生成的,一般不需要修改,除非的本机sdk路径发生变化。
(11) setting.gradle: 这个文件用于指定项目中所有引入的模块,我们这项目中只有一个app模块,所以此文件只引入了app模块,通常情况下模块引入都是自动完成。
这就是整个工程的最外层目录结构介绍完毕,我们将上述中的app目录展开,其目录为:
(1) build: 与最外层build类似,主要包含了一些在编译时自动生成的文件。
(2) libs: 项目中使用到的第三方jar包,放在此目录下。
(3) androidTest: 编写测试用例,可以对项目进行自动化测试。
(4) java: 我们写的java代码。
(5) res: 存放资源文件,如图片,布局文件,字符串等,图片等放在drawable目录下,布局放在layout目录下,字符串等放在valus目录下。
(6) AndroidManifest.xml: 这是整个app的配置文件与iOS中的info.plist文件作用相同。
(7) test: 测试单元,是项目自动化测试的一种。
(8) .gitignore: app模块的git版本控制。
(9) app.iml: Intellij IDEA 项目都会自动生成的一个文件。
(10) build.gradle: app模块的构建脚本,一般情况不需要修改。
(11) proguard-rules.pro: 用于项目代码指定混淆规则的文件。
所有目录到此都已经介绍完毕,我们继续剖析项目结构中的配置文件-AndroidManifest.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.firstandroidproject.chuliangliang.firstandroidproject">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"> //所有用到的需要显示的Activity 都会自动加入到这里
<intent-filter>
<action android:name="android.intent.action.MAIN" /> //设置主Activity 类似iOS设置root Viewcontroller 相同
<category android:name="android.intent.category.LAUNCHER" /> //设置启动时就显示这个Activity
</intent-filter>
</activity>
</application>
</manifest>

Android程序中是代码与UI分离开的,UI及布局通过layout目录下文件实现的,当然也可以使用代码构建,但是谷歌推荐使用前一种方式。

日志工具的使用

开发中调试利器之一 日志工具,在Android 开发中不再使用 System.out这种形式的log输出了,而是改用 Log.v()、Log.d()、Log.i()、Log.w()、Log.e()
Log.v(): 用与打印最为琐碎,意义最小的日志信息对应级别verbose,是Android日志级别里最小的。
Log.d(): 用于打印调试信息,这些信息对于程序调试最有帮助的,对应级别debug,比verbose高一个级别。
Log.i(): 用于打印一下比较重要信息,可以帮你分析用户行为数据,对应级别info,比debug高一个级别。
Log.w(): 用于打印警告信息,提示潜在风险,对应级别warn, 比info高一个级别。
Log.e(): 用于打印程序中错误信息,如程序崩溃,对应级别errorwarn高一个级别。
代码示例:

Log.d(“自定义标记”, “输出内容”);

小技巧:

  • 键盘输入logd Android Studio 会有完整代码提示,此时按下回车即可快速补全。
  • 因为 Log.d 需要一个标记,所以我们可以在类中定义一个常量, 可以输入logt 此时也会代码提示, 按回车自动补全

完整代码示例:

public class Person
{
private static final String TAG = “Person”;
public void showLog ()
{
Log.d(TAG, “showLog: “);
}
}

到这里大家会有一个小小的疑惑为什么每个log输出时都需要一个标记呢?别急我们现在就看看有啥用。
首先我们在底部工具栏找到 “Android Monitor” 点击后在底部出现一个对话框,在对话框左上角我们选中 “logcat” 此时就是log输出的窗口,在这个窗口上方中间位置有一个下拉选项我们可以设置对应log输出级别以便我们查看log,默认verbose,同一级别log输出可能还是会有很多,也不是很方便查找,那我们就可以通过log上的标记进行过滤了,在对话框右上角选中Regex,在其后面的下拉框中添加我们自定义的log输出标记,然后选在我们自定义的log标记进行过滤就可以很方便找到了。

总结

今天事情比较多,时间比较零散,就暂时学这么多吧,下一篇文章会详细学习Android四大组件之一的 活动(Activity),和一些简单的app配置相关的内容。

支持一下
扫一扫,支持Talent•C