1.安卓基础入门
1.1安卓体系结构
安卓系统采用分层架构,由高到低分为四层:应用程序层–应用程序框架层–核心类库和Linux内核
- 应用程序层:应用
- 应用程序框架层:提供构建应用程序时用到的各种API
- 核心类库:包含了系统库及安卓运行环境
- Linux内核:Linux内核为安卓设备的各种硬件提供了底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、电源管理驱动
1.2Dalvik虚拟机
安卓应用程序主要开发语言为Java,通过Dalvik虚拟机来运行Java程序。
dex文件比jar更加紧凑,但是为了在运行过程中进一步提高性能,dex文件还会进一步优化为odex文件
1.3安卓开发环境搭建
配置安卓环境前,确保已经配置好Java环境变量。
1.新建系统变量:
变量名:ANDROID_SDK_HOME
变量值:Sdk的安装路径
2.path中添加变量platform-tools和tools(sdk文件夹中)
开发第一个安卓程序–HelloWorld
- 创建项目–选择空项目
- 设置相关信息–sdk默认下载到C:\Users\HUAWEI\AppData\Local\Android\Sdk
- 默认界面–gradle默认下载到C盘–用户–HUAWEI–.gradle
- 不使用studio创建的模拟器–连接夜神模拟器
- 连续点击版本号直到显示“你已进入开发者模式”
- 回到设置–找到开发者选项
- 找到安装夜神的文件夹中.exe文件的目录,在目录框中最前面输入cmd+空格回车进入doc中
- 进入到doc窗口中输入:adb devices回车—显示要连接的地址
- 再输入:adb connect 127.0.0.1:62001 回车会显示连接成功
- 点击运行–夜神模拟器如下图显示表示第一个程序创建运行成功
1.4安卓程序/项目结构
- 项目-module
- 外层结构
- 内层结构
1.4.1新建module
File–New–Module
1.4.2移除–删除module
- File–Project–Module–选中要移除的module,点击上方-号–此时只是在项目中移除了module,并未真正删除,还可以在文件夹中找到
- 移除操作完成后,在File中会显示delete操作按钮,点击delete可以彻底从项目和文件夹中删除module
注意:在一个studio窗口中只能有一个project–项目;一个项目中可以有多个module
1.5资源的管理与使用
所有的资源存放在:app–build–generated–not_namespaced_r_class_sources–debug–r--com–example–项目名–R.java文件中
1.5.1图片资源
- 应用图标资源存放位置:以mipmap开头的文件夹中,不同文件夹划分以屏幕密度为基础,不屏幕密度自动匹配不同文件夹中的图标资源
- 界面使用的图片资源存放位置:以drawable开头的文件夹中,不同文件夹划分以屏幕密度为基础,不屏幕密度自动匹配不同文件夹中的图片资源
- 通过Java代码调用(app-src-main-java-com.-MainActivity)
getResources().getDrawable(R.mipmap.ic_launcher);
- 通过XML(app-src-main-res-layout-.xml-text)布局文件中调用
<TextView
android:background="@mipmap/ic_launcher"
android:background="@drawable/icon"/>
1.5.2主题和样式资源
- 主题:包含一种或多种的格式化属性集合,调用主题可以改变窗体的样式
- 主题资源定义在res-values目录下的styles.xml文件中
<resources>
<!-- Base application theme. -->
<!--主题-->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
- style标签用于定义主题
- item标签用于设置主题样式
- name用于指定主题的名称
注意:根标签resources中可以包含多个style标签,style中可以包含多个item标签
- 资源的使用:
setTheme(R.style.AppTheme);
- 在AndroidManifest.xml中设置主题
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<application
……………………………………
android:theme="@style/AppTheme">
</application>
</manifes>
- 样式:设置view的样式
- 央视存放在res–values目录下的style.xml文件中
<resources>
<!--样式-->
<style name="textViewStyle">
<item name="android:layout_width">20dp</item>
<item name="android:layout_height">20dp</item>
<item name="android:background">#f54e39</item>
</style>
</resources>
- name标签设置样式的名称,item标签设置控件的样式:宽高……
- 通过XML(app-src-main-res-layout-.xml-text)布局文件中调用
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TextView
……
style="@style/textViewStyle"
…… />
</androidx.constraintlayout.widget.ConstraintLayout>
1.5.3布局资源
app-src-main-res-layout-.xml-text该目录存放的是程序中所有的布局资源文件
- 通过Java代码调用
setContentView(R.layout.activity_main);
- 在xml布局文件中调用:
<include layout="@layout/activity_main"/>
1.5.4字符串资源
- 使用频率最高的资源
- 在res–values–strings.xml文件中定义字符串资源
<resources>
<string name="app_name">My FirstApplication</string>
</resources>
- string标签定义字符串资源
- name属性指定字符串资源名称
- 两个标签间为字符串内容
- 通过Java代码调用:
getResourcea().getString(R.string.app_name);
- 在XML布局文件中调用:
android:text="@string/app_name"
1.5.5颜色资源
- 使用颜色资源来改变view控件的颜色
- 颜色资源定义在res–values–colors.xml文件中
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>
- color标签定义颜色资源
- name指定颜色资源的名称
- 两个标签中间为颜色值
- 文件中只能有一个resources根元素,可以包含多个color标签
- 通过哦Java代码调用:
getResources().getColor(R.color.colorPrimary);
- 在XML文件中调用:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TextView
……
android:textColor="@color/colorPrimary"
…… />
</androidx.constraintlayout.widget.ConstraintLayout>
1.5.6尺寸资源
- 设置view宽高和view之间的间距值
- 尺寸资源定义在res–values–dimens.xml文件中(需要自己创建)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="activity_horizontal_margin">16dp</dimen>
</resources>
- dimen标签定义尺寸资源
- name属性指定尺寸资源名称
- 两个标签中间为尺寸值
- 文件中只能又一个resources根标签,可以有多个dimen标签
- 通过Java代码调用:
getResources().getDemension(R.dimen.activity_horizontal_margin);
- 在XML布局文件中调用:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<TextView
……
android:layout_width="wrap_content"
android:layout_height="@dimen/activity_horizontal_margin"
…… />
</androidx.constraintlayout.widget.ConstraintLayout>
- dp:与屏幕密度无关的单位,自动缩放比例
- sp:主要处理字体大小,可以跟随系统字体大小变化而改变,用法同上
1.6程序调试
LogCat的使用
- logcat是命令行工具,用于获取程序从启动到关闭的日志信息
- 安卓使用android.util.Log类的静态方法实现输出程序调试信息
输出的日志内容的6个级别(低->高) | 对应静态方法 | 标注 |
---|
Verbose | Log.v() | 全部信息–黑色 | Debug | Log.d() | 调试信息–蓝色 | Info | Log.i() | 一般信息–绿色 | Waring | Log.w() | 警告信息–橙色 | Error | Log.e() | 错误信息–红色 | Assert | Log.wtf() | 断言失败后佛如错误信息–红色 |
- 使用:app-src–main–java–MainActivity
package com.example.myfirstapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.v("MainActivity","Verbose");
Log.d("MainActivity","Debug");
Log.i("MainActivity","Info");
Log.w("MainActivity","Waring");
Log.e("MainActivity","Error");
Log.wtf("MainActivity","Assert");
}
}
- 由于logcat输出的信息多&杂,因此可以使用过滤器找到自己需要的信息
|