1.1.1Android系统架构
Android大致可以分为四层架构:Linux内核层、系统运行库层、应用框架层和应用层。
1、Linux内核层
Android系统是基于Linux内核的,这一层为Andorid设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。
2、系统运行库层
这一层通过一些C/C++库来为Android系统提供主要的特性支持。以及各种运行库
3、应用框架层
这一层主要提供了构建应用程序时可能用到的各种API,Android自带的一些核心应用就是这些API完成的。开发者也可以通过使用这些API来构建自己的应用程序。
4、应用层
所有安装在手机上的应用程序都属于这一层,比如系统自带的联系人、短信等程序,或者从第三方应用商店下载的程序,当然也包括你自己开发的程序。
1.1.2Android发布版本
1.1.3Android应用开发特色
1、四大组件
Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。其中活动是所有Android应用程序的门面,凡是在应用中你看到的东西,都是放在活动中的。而服务就比较低调,你无法看到它,但它会一直在后台默默的运行,即使用户退出了应用,服务仍然是可以运行的。广播接收器允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要内容提供器来实现。
2、丰富的系统控件
Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松的编写漂亮的界面。也可以定制属于自己的控件。
3、SQLite数据库
Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常简单。
4、强大的多媒体
Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃、等等,这一切你都可以在程序中通过代码进行控制。
5、地理位置定位
移动设备和PC相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的Android手机都内置有GPS,走到哪里都可以定位自己的位置。
1.3.1创建你的第一个Android项目
1.3.2启动模拟器
其中中间的按钮用于创建和启动模拟器。
点击Create Virtual Device按钮就可以立刻开始创建。
这里有很多设备可供我们选择,不仅能创建手机模拟器,还可以创建平板、手表、电视等模拟器。
这里可以选择模拟器所使用的操作系统版本。
这里可以对模拟器的一些配置进行确认,比如指定模拟器的名字、分辨率、横竖屏等信息。如果没有特殊需求保持默认。点击Finish完成模拟器创建。
点击右边三角形按钮即可启动模拟器。
1.3.3运行HelloWorld
左边的锤子是用来编译项目的、中间的下拉列表是用来选择哪一个项目的,右边的三角形是用来运行项目的。
1.3.4分析你的第一个Android 程序
- .gradle和.idea
这两个目录下放置的都是AndroidStudio自动生成的一些文件,我们无需关心,也不要去手动编辑。
- app
项目中的代码、资源等内容几户都是放置在这个目录下的。会单独展开进行讲解。 - build
这个目录主要包含一些在编译时自动生成的文件。
- gradle
这个目录包含gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会自动根据本地的缓存情况决定是否联网下载gradle。AndroidStudio默认没有启动gradle wrapper的方式,如果需要打开,可以点击AndroidStudio导航栏→File→Settings→Build,Execution,Deployment→Gradle,进行配置更改。
- .gitinore
这个文件是用来将指定的目录或文件排除在版本控制之外的,关于版本控制将在第五章开始正式学习。
- build.gradle
这是项目全局的gradle构建脚本,通常这个文件中的内容是不需要修改的。
- gradle.properties
这是项目全局的gradle配置文件,在这里配置的属性将会影响到项目中所有的gradle编译脚本。
- gradlew和gradlew.bat
这两个文件使用来在命令行界面执行gradle命令的,其中gradlew是在Linux或Mac系统中使用的,gradlew.bat是在Windows系统中使用的。
- HelloWorld.iml
Iml文件是所有Intellij IDEA项目都会自动生成的一个文件(AndroidStudio是基于Intellij IDEA开发的),用于标识一个Intellij IDEA项目,我们不需要修改文件中的任何内容。
- local.properties
这个文件用于指定本机中的Android SDK路径,通常内容都是自动生成的,我们并不需要修改,除非你本机中的Android SDK位置发生变化,那么将文件中的路径改成新的即可。
- settings.gradle
这个文件用于指定项目中所引入的模块,由于HelloWorld项目中只有一个app模块,因此该文件也就只引入app这一个模快。
app详解
12. build
这个目录和外层的build目录类似,主要也包含了一些在编译时自动生成的文件,不过它里面的内容会更加复杂,我们不需要过多关心。
13. libs
如果你的项目中使用到第三方jar包,就需要把这些jar包都放在libs目录下,放在这个目录下的jar包都会被自动添加到构建路径里去。
14. androidTest
此处是用来编写Android Test测试用例的,可以对项目进行一些自动化测试。
15. java
java目录是放置我们所有Java代码的地方。
16. res
这个目录的内容有点多,简单点说:就是你项目中使用到的所有图片、布局、字符串等资源都要存放在这个目录下。图片放在drawable目录,布局放在layout目录,字符串放在values目录。
17. 17. AndroidManifest.xml
这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册,另外还可以在这个文件给相应的程序添加权限声明。
18. test
此处是用来编写Unit Test测试用例的,是对项目进行自动化测试的另一种方式。
19. .gitignore
这个文件用于将app模块内的指定目录或文件排除在版本控制之外,作用和外层的.gitignore文件类似。
20. app.iml
Intellij IDEA项目,我们不需要修改文件中的任何内容
21. build.gradle
这是app模块的gradle构建脚本,这个文件中会指定很多项目构建相关的配置。
22. proguard-rules.pro
这个文件用于指定项目代码的混淆规则,当代码开发完成后打包成安装文件,如果不希望代码被别人破解,通常会将代码进行混淆,从而让破解者难以阅读。
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这段代码表示对MainActivity这个活动进行注册,没有在AndroidManifest.xml里注册的活动是不能使用的。其中intent-filter里的两行代码非常重要,
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
表示MainActivity是这个项目的主活动,在手机上点击应用图标,首先启动的就是这个活动。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
首先我们可以看到,MainActivity是继承自AppcompatActivity的,这是一种向下兼容的Activity,可以将Activity在各个系统版本中增加的特性和功能最低兼容到Android 2.1系统。可以看到MainActivity中有一个onCreate()方法,这个方法是一个活动被创建时必定要执行的方法。在onCreate()方法中调用了setContentView()方法,就是这个方法给当前活动引入一个布局。
<resources>
<string name="app_name">HelloWorld</string>
</resources>
可以看到这里定义了一个应用程序名的字符串,我们有以下两种方式来引用它。
在代码中通过R.string.app_name可以获得该字符串的引用。
在XML中通过@string/app_name可以获得该字符串的引用。
引用图片就是drawable,图标就是mipmap,布局文件就是layout,以此类推。
<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">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
其中,MainActivity项目的应用图标就是通过android:icon属性来指定的,应用名称则是通过androdi:label属性指定的。
1.4.1使用Android的日志工具Log
Android中的日志工具类是Log(android.util.Log),这个类中提供了5个方法来供我们打印日志。
Log.v()。用于打印那些最为琐碎的、意义最小的日志信息。对应级别verbose,是Android日志里面级别最低的一种。
Log.d()。用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug,比verbose高一级。
Log.i()。用于打印一些比较重要的数据,这些数据应该是你非常想看到的、可以帮你分析用户数据行为数据。对应级别info,比debug高一级。
Log.w()。用于打印一些警告信息,提示程序在这个地方可能会有潜在的风险,最好去修复一下这些出现警告的地方。对应级别wran,比info高一级。
Log.e()。用于打印程序中的错误信息,比如程序进入到catch语句当中。当有错误信息打印出来的时候,一般都代表你的程序出现严重问题了,必须尽快修复。对应级别error,比warn高一级。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("MainActivity", "onCreate:");
}
}
Log.d()方法传入两个参数:第一个参数是tag,一般传入当前类名,主要用于打印信息进行过滤,第二个参数是msg,即想要打印的内容。
其中,不仅可以看到打印日志的内容和tag名,程序包名、打印时间以及应用程序的进程号都可以看到。
1.4.2过滤器
1、添加过滤器
目前只有3个过滤器,Show only selected application表示只显示当前选中程序的日志。
Firebase是谷歌提供的一个分析工具,我们可以不用管它。
No Filters相当于没有过滤器,会把所有的日志都显示出来。
2、自定义一个过滤器
点击Edit Filter Configuration,会弹出一个过滤器配置界面。可以自定义一个过滤器。
logcat中主要的5个级别,分别对应上面的5个方法。
关键字过滤
在输入框中输入关键字的内容,这样只有符合关键字条件的日志才会显示出来,从而能够快速定位到任何你想查看的日志。另外一点需要注意,关键字过滤支持正则表达式。
小提示
只需要输入logd,然后按下Tab键,就会自动帮你补全一条完整的打印语句。
在onCreate()方法的外面输入logt,然后按下Tab键,这时就会以当前类名作为值自动生成一个TAG常量。
第一章总结
- 了解了Android四层系统架构。
- 了解Android发布的版本。
- 了解Android应用开发特色
- 了解如何创建和启动模拟器。
- 了解Android程序项目结构每一层的含义。
- 了解日志工具的使用。
- 了解如何设置过滤器。
天道酬勤,继续加油MrFan!!!
转载:https://blog.csdn.net/Fzw1211/article/details/109743729