1.android系统框架
android大致可分为四层架构:linux内核层,系统运行库层,应用框架层和应用层
1.1 linux内核层
为android设备的各种硬件提供底层驱动,如显示驱动,音频驱动,wifi驱动,电源管理等。
1.2 系统运行库层
通过一些c/c++库为android系统提供了主要的特性支持,如SQLite库提供数据库支持,OpenGL|ES库提供3D绘图支持,Webkit提供浏览器内核的支持。
这一层还有android运行时库,他主要提供了一些核心库,允许开发者使用java语言来编写Android应用。另外还包含了Dakvik虚拟机(5.0系统后改为ART运行环境),是的每个android应用都能运行在独立的进程中。
1.3应用框架层
本层主要提供各种API,开发者通过这些API来构建自己的应用程序。
1.4应用层
所有的应用程序都属于这一层。
2android特色
2.1四大组件:
android系统四大组件为Activity,Service,BroadcastReceiver和ContentProvider。activity是所有android应用程序的门面,看到的东西都在activity中。service在后台默默运行,即使退出应用也可以继续运行。broadcastreceiver允许接收来自各处的广播消息。contentprovider为应用程序提供数据共享。
2.2丰富的系统控件:
方便我们轻松编写漂亮的界面。
2.3SQLite数据库:
系统自带的轻量级,运算极快的嵌入式关系型数据库,支持标准的SQL语法,通过封装好的API进行操作
2.4强大的多媒体:
如音乐,拍照,视频,录音等,都可以通过程序代码控制。
2.5地理位置定位:
gps
3.创建第一个项目
1.android视图下
app目录下:
manifests:包含xml文件,是app运行的配置文件
java:第一个包存放当前模块的java源码,后面两个包存放测试用的java代码
res:存放当前模块的资源文件,标在mipmap目录,图片在drawable目录,布局在layout目录,字符串在values目录。
Gradle Scripts目录下:
build.gradle:描述App工程的编译规则
proguard-rules.pro:用于指定项目代码的混淆规则,打包成安装包时不希望被破解
gradle.properties:用于配置编译工程的命令行参数一般不用改动
settings.gradle:配置了需要编译哪些模块,初始内容为include':app'表示只编译app模块
local.properties:项目的本地配置文件自动生成
2.project视图下
.gradle和.idea:自动生成的文件
app:项目中所有代码资源都在里面
gradle:包含gradle wrapper的配置文件
.gitignore:将指定的文件或目录排除在版本控制之外
build.gradle:项目全局的gradle构建脚本
gradle.properties:全局的gradle配置文件
gradlew和gradlew.bat:在命令行界面执行gradle命令,gradlew.bat只用于windows
local.properties:指定本机中的android sdk路径
settings.gradle:指定项目中所有引入的模块
app目录下
build:编译自动生成的文件
src中:
androidTest:用来编写测试用例
main中:
java:放置java代码
res:存放图片布局字符串等资源,图标在mipmap目录,图片在drawable目录,布局在layout目录,字符串在values目录
test:用来编写Unit Test测试用例
.gitignore:将app中指定目录或文件排除在版本控制之外,与外层类似
build.gradle:app模块的gradle构建脚本
proguard-rules.pro:用于指定项目代码的混淆规则,打包成安装包时不希望被破解
4.app中build.gradle分析
plugins {
alias(libs.plugins.android.application)
}//模块
android {
namespace 'com.example.zcc'
compileSdk 34//指定项目编译的版本
defaultConfig {
applicationId "com.example.zcc"//每个应用的唯一标识符
minSdk 29//最低兼容的android版本
targetSdk 34//在目标版本上已经做过测试,系统会给你的应用程序启用新的功能
versionCode 1//指定项目的版本号
versionName "1.0"//指定项目的版本名
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"//用于当前项目启动JUnit测试
}
buildTypes {
release {
minifyEnabled false//指定是否对项目代码进行混淆,
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'//指定混淆时使用的规则文件
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
//指定依赖
implementation libs.appcompat
implementation libs.material
implementation libs.activity
implementation libs.constraintlayout
testImplementation libs.junit
androidTestImplementation libs.ext.junit
androidTestImplementation libs.espresso.core
}
buildTypes闭包用于生成安装文件的相关配置通常会有两个子闭包:debug、release
debug:用于指定测试版安装文件的配置,可以忽略不写
release:用于指定正式版安装文件额的配置
5.清单文件AndroidManifest.xml
android:allowBackup:是否允许备份
android:icon:指定app在手机屏幕上显示的图标
android:label:指定app在手机屏幕上显示的名称
android:roundIcon:指定app的圆角图标
android:supportsRtl:是否支持阿拉伯语/波斯语这种从右往左的文字顺序 android:theme:指定app风格 android:dataExtractionRules:指定应用备份时的规则 android:fullBackupContent:定义了应用的全备份内容 tools:targetApi="31"
6.日志工具的使用
日志工具Log
v、d、i、w、e
Log.d("MainActivity","onCreate")第一个参数是tag一般传入当前的类名就好主要用于对打印信息的过滤;第二个参数是msg即想打印的内容
补充:
1:引用res/values/strings.xml:
<resources><string name="app_name">hello</string></resources>
有两种方法引用res目录下的资源:
1.在代码中通过R.string.app_name可以获得该字符串的引用
2.在xml中通过@string/app_name可以获得该字符串的引用