Android 基础(一)HELLO WORLD
第一行代码(第二版)的学习笔记
一、系统架构
Android可以分为四层架构:
1、Linux内核层
Android系统基于Linux内核,为设备的各种硬件提供底层驱动。
显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等。
2、系统运行库层
A.系统库
通过C/C++库为Android系统提供了主要的特性支持。
- Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责 2D 绘图与 3D 绘图进行显示合成。
- Media Framework:多媒体库,基于 PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
- SQLite : 小型的关系型数据库引擎。
- OpenGL|ES:根据 OpenGL ES 1.0API 标准实现的 3D 绘图函数库。
- FreeType:提供点阵字与向量字的描绘与显示。
- WebKit:一套网页浏览器的软件引擎。
- SGL:底层的 2D 图形渲染引擎。
- SSL:在 Android 上通信过程中实现握手。
- Libc:从 BSD 继承来的标准 C系统函数库,专门为基于 embedded linux 的设备定制。
B.运行时库
为了能够运行java,需要java的核心包的支持,然后通过JVM虚拟机来运行
- Core Libraries:相当于java的JDK,是运行android应用程序所需要的核心库
- Dalvik Virtual Machine:相当于JVM,这是Google专为Android开发的运行android应用程序所需的虚拟机
3、应用框架层
应用程序的框架,提供构建应用程序时可能用到的各种API。
4、应用层
所有安装在手机上 的应用程序都属于这一层
二、安卓四大组件
Android一共有四种常用的组件:
Activity、Service、ContentProvider、BroadcastReceiver
Activity
Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的,比如一个文本框,按钮这些就是显示在Activity上的,并且可以接收数据,传递数据到后台,然后再显示出来。
Service
Service我们是看不见的,对于绝大部分的数据的处理,业务的处理都是通过Service来完成的。
ContentProvider
为应用程序之间共享数据提供了可能,比如读取系统电话簿中的联系人。
BroadcastReceiver
广播接收器:允许应用接收来自各处的广播消息
三、项目文件分析
project
app
res
- 所有以drawable开头的都是用来放置图片的
- 所有以mipmap开头的都是用来放置图标的->为什么会有这么多:为了使程序可以兼容不同的设备。其实最好也设定drawable多个不同文件夹,来放置多个不同分辨率的图片。运行时根据当前设备分辨率的高低选择加载哪个文件夹下的图片。
如何使用res下的资源:
如values中strings.xml
<resources>
<string name="app_name">DemoApplication</string>
</resources>
- 代码中通过
R.string.app_name
可以引用该字符串 - XML中可以通过
@string/app_name
引用该字符串
上面是基本的语法,string可以换成drawable,或者mipmap,布局文件则是layout
四、项目构建gradle基础
gradle是一种项目构建工具,摒弃了传统基于XML(如Ant和Maven)的各种烦琐配置
最外层build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
google()
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.1.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
buildscript
是用来创建gradle插件的 表示用的插件版本是4.1.0
jcenter
是开源库
app下的build.gradle
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30 // 项目的编译版本
buildToolsVersion "30.0.2" // 项目构建工具的版本
defaultConfig {
applicationId "com.example.demoapplication" // 指定项目的包名
minSdkVersion 16 // 安卓最低兼容版本
targetSdkVersion 30 // 表示在安卓目标版本上已经做了足够的test,系统会引入相应功能
versionCode 1 // 项目的版本号
versionName "1.0" // 版本号
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release { // 生成正式版安装文件的配置
minifyEnabled false // 是否对项目代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 混淆规则文件
}
// debug配置可以不写
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8 // java版本
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies { // 指定当前项目所有的依赖关系
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
com.android.application
代表是应用程序模块,com.android.library
代表是一个库模块
android闭包里可以配置项目构建的各种属性。
五、helloworld
活动
表示MainActivity是主活动
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
继承自AppCompatActivity的一种向下兼容的Activity
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Activity是Android系统提供的一个活动基类,项目中所有的活动都必须继承它或者它的子类才拥有活动的特性,AppCompatActivity是Activity的子类。
onCreate
方法是活动被创建时必定执行的方法。
布局
安卓程序设计讲究逻辑和视图分离->在布局文件中写界面,然后在活动中引入
布局文件:
<?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_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
六、日志
使用Android的日志工具Log