Android是什么?
Android是由谷歌推出的当今最流行的移动端操作系统之一。
Android系统架构
- 应用层:手机上的应用程序都属于这一层
- 应用框架层:提供开发程序的各种API
- 系统运行库层:通过C/C++库为系统提供支持
- Linux内核层:为底层硬件提供驱动
开发准备
第一个应用
一直点下一步安装好Android Studio,打开并选择start a new Anroid Studio project,输入应用名和包名点击创建:
创建模拟器
点击右上角的AVD Manager:
再点击Create virtual Device后随意选择一个phone模拟器,一直next:
创建完模拟器后,点击右三角或通过菜单栏Run→Run app运行程序:
Android项目文件解析
在左边下三角切换成Project视图可以看到整个项目文件:
- .gradle和.idea:Android Studio构建项目时生成的文件
- app:存放代码和资源
- gradle:gradle wrapper配置文件
- .gitignore:git提交时需省略的文件
- build.gradle:全局构建脚本
- demo0.iml:idea项目标识文件
- gradle.properties:全局gradle配置文件
- gradlew:linux或mac中的命令脚本
- gradlew.bat:windos中的命令脚本
- local.properties:指定本地sdk路径
- settings.gradle:指定项目引入的模块
展开app模块目录:
- build:自动生成文件
- libs:存放第三方jar包
- src:存放代码和资源文件
- .gitignore:git提交时需省略的文件
- demo0.iml:idea项目标识文件
- build.gradle:模块构建脚本
- proguard-rules.pro:代码混淆规则
打开全局bulid.gradle,repositories指定了代码仓库,dependencies指定了当前gradle的版本:
打开模块的bulid.gradle:
第一行指定了当前程序是应用(com.android.application)还是库(com.android.library),库只能依赖于其他的应用
- compileSdkVersion:项目编译sdk版本
- buildToolsVersion:项目构建工具版本
- applicationId:包名
- minSdkVersion:最小适配Android系统sdk版本
- targetSdkVersion:目标sdk版本
- versionCode:版本号
- versionName:版本名称
- minifyEnabled:是否混淆代码
- proguardFiles:指定混淆规则文件
dependencies下为项目依赖分为:
- 本地依赖:implementation fileTree(dir: ‘libs’, include: [’*.jar’])表示将lib下的.jar都构建到项目
- 远程依赖:implementation 'androidx.constraintlayout:constraintlayout:2.0.4’表示将将版本为2.0.4的constraintlayout构建到项目
- 库依赖:类似于implementation project(’:helper’)
Debug
日志
Android有5个日志等级,分为为verbose、debug、info、warm、error,在代码中可用Log.x(TAG,msg)打印日志,其中的x可替换成v、d、i、w、e对应不同日志等级。
Tips:
- 输入logd,按下tab,系统会自动补齐log.d(TAG,msg),其他同理
- TAG为日志标签,可通过TAG筛选日志信息,在onCreate()方法外面输入logt,按下tab,可创建以当前类名作为值的TAG常量
输出log后,可以通过底下的logcat根据等级或TAG对log进行分类
自定义LogUtil
通过对原生log封装,可实现打印控制,并且等项目上线后将Level修改为NOTHING即可取消所有打印:
public class LogUtil {
public static final int VERBOSE = 1;
public static final int DEBUG = 2;
public static final int INFO = 3;
public static final int WARN = 4;
public static final int ERROR = 5;
public static final int NOTHING = 6;
public static final int Level = VERBOSE;
public static void v(String tag, String msg) {
if (Level <= VERBOSE) {
Log.v(tag, msg);
}
}
public static void d(String tag, String msg) {
if (Level <= DEBUG) {
Log.d(tag, msg);
}
}
public static void i(String tag, String msg) {
if (Level <= INFO) {
Log.i(tag, msg);
}
}
public static void w(String tag, String msg) {
if (Level <= WARN) {
Log.w(tag, msg);
}
}
public static void e(String tag, String msg) {
if (Level <= ERROR) {
Log.e(tag, msg);
}
}
}
Toast
通过Toast的静态方法makeText(),可以在任意时刻弹出提示框
Toast.makeText(context, "", Toast.LENGTH_SHORT).show();