系统架构
- linux内核 包括各种驱动
- 运行库 比如SQLite提供数据库, OpenGL|ES提供3D绘图,WebKit提供web内核
- 应用框架层 主要提供各种API
- 应用层
四大组件
- 活动(Activity)
- 服务 (Service)
- 广播接收器 (Broadcast Receiver)
- 内容提供器 (Content Provider)
SQLite
android提供的轻量级,嵌入式数据库,可以使用android自带的API进行操作
Android Studio中的目录结构
关注几个比较重要的目录
- app 存放代码和资源
- AndroidManifest.xml 用于指定四大组件
- porguard-rules.pro 用于指定混淆规则,防止安装包破解
- gitignore 版本控制,将不需要的文件排除在外
- gradle properties gradle的全局配置文件
- local properties 用来指定本地的sdk路径
- settings gradle 用来指定模块
项目是如何运行的
intent-filter中的内容表示这个HelloWorldActivity是项目的主活动,点击图标时会运行这个活动
<activity android:name=".HelloWorldActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
setContentView方法引用了视图资源,这样实现了视图和逻辑分离
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
}
引用了hello_world_layout.xml这个布局文件,在TextView中显示"Hello World!"
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
引用res下的资源
比如string.xml中,有如下代码
<resources>
<string name="app_name">HelloWorld</string>
</resources>
在代码中通过R.string.hello_world
引用
在xml中通过@string/hello_world
引用
build.gradle
这是最外层的build.gradle两处闭包都声明了jcenter()这个中央仓库,依赖里面声明了android需要的依赖
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
}
}
allprojects {
repositories {
jcenter()
}
这里是app项目下的build.gradle
第一行用于声明项目是应用模块还是库模块。
android闭包中声明Sdk版本等,applicationId指定项目名,versionCode和versionName指定版本号和版本名。
buildtypes闭包中,可以有release,可以有debug,debug表示调试的配置,release表示发行版的配置。里面的内容表示是否混淆,并且指定了两个文件,一个文件是在sdk中的,一个文件是在项目路径下的。
dependencies闭包声明了依赖,第一行fileTree表示把jar包和libs文件夹中的内容添加到项目中。依赖有三种:本地依赖,库依赖,远程依赖。这里使用了远程依赖,远程依赖在缓存中不存在的情况下会自动下载。testcompile是声明测试用例库的。
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
applicationId "com.example.helloworld"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:24.2.1'
testCompile 'junit:junit:4.12'
}
日志工具
andriod提供了日志工具类,总共包括5种方法(级别从低到高):
- Log.v()
- Log.d()
- Log.i()
- Log.w()
- Log.e()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_layout);
Log.d(TAG, "onCreate execute");
}
方法中有两个参数,第一个参数是TAG,一般是当前的类名,第二个参数是msg,输出想打印的信息就可以了。可以在onCreate方法外面输入logt并用tab补全就能自动根据当前类生产TAG信息。
还可以使用logcat来进行日志筛选。