基本的一些东西
MoMo Lv5

Log运行日志

Android 采用Log工具打印日志,它将各类日志划分为五个级:

  • Log.eE表示错误信息,比如可能导致程序崩溃的异常。

  • Log.w:表示警告信息。

  • Log.i:表示一般消息。

  • Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。

  • Log.v:表示冗余信息。

工程目录结构

App工程目录结构

App工程分为两个层次,第一个层次是项目,另一个层次是模块。

模块依附于项目,每个项目至少有一个模块,也能拥有多个模块。
一般所言的“编译运行App”,指的是运行某个模块,而非运行某个项目,因为模块才对应实际的App。

App项目下面有两个分类:

  • app(代表app模块) 下面有3个子目录
  • Gradle Scripts,主要是工程的编译配置文件

image

  • app(代表app模块)

    • manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。

    • java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的Java源代码,后
      面两个包存放测试用的Java代码。

    • res子目录,存放当前模块的资源文件

      • drawable目录存放图形描述文件与图片文件。
      • layout目录存放App页面的布局文件。
      • mipmap目录存放App的启动图标。
      • values目录存放一些常量定义文件,例如字符串常量strings.xml、像素常量dimens.xml、颜色常
        量colors.xml、样式风格定义styles.xml等。
    • Gradle Scripts

      • build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。
      • proguard-rules.pro,该文件用于描述Java代码的混淆规则。
      • gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。
      • settings.gradle,该文件配置了需要编译哪些模块。初始内容为include ‘:app’,表示只编译app模块。
      • local.properties,项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。

编译配置文件build.gradle

项目级别的build.gradle指定了当前项目的总体编译规则,打开该文件在buildscript下面找到repositories和dependencies两个节点,其中repositories节点用于设置Android Studio插件的网络仓库地址,而dependencies节点用于设置gradle插件的版本号。由于官方的谷歌仓库位于国外,下载速度相对较慢,因此可在repositories节点添加阿里云的仓库地址,方便国内开发者下载相关插件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
buildscript {
repositories {
// 以下四行添加阿里云的仓库地址,方便国内开发者下载相关插件
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'https://maven.aliyun.com/repository/google'}
maven { url 'https://maven.aliyun.com/repository/gradle-plugin'}
maven { url 'https://maven.aliyun.com/repository/public'}
google()
jcenter()
}
dependencies {
// 配置gradle插件版本,下面的版本号就是Android Studio的版本号
classpath 'com.android.tools.build:gradle:4.1.0'
}
}

模块级别的build.gradle对应于具体模块,每个模块都有自己的build.gradle,它指定了当前模块的详细编译规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
plugins {
id 'com.android.application'
}

android {
// 指定编译用的SDK版本号。比如30表示使用Android 11.0编译
compileSdk 30,
// 指定编译工具的版本号。这里的头两位数字必须与compileSdkVersion保持一致,具体的版本号可在sdk安装目录的“sdk\build-tools”下找到
buildToolsVersion "30.0.3,
defaultConfig {
// 指定该模块的应用编号,也就是App的包名
applicationId "com.dongnaoedu.myapplication"
// 指定App适合运行的最小SDK版本号。比如19表示至少要在Android 4.4上运行
minSdkVersion 19
// 指定目标设备的SDK版本号。表示App最希望在哪个版本的Android上运行
targetSdkVersion 30
// 指定App的应用版本号
versionCode 1
// 指定App的应用版本名称
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}

// 指定App编译的依赖信息
dependencies {
// 指定引用jar包的路径
implementation fileTree(dir: 'libs', include: ['*.jar'])
// 指定编译Android的高版本支持库。如AppCompatActivity必须指定编译appcompat库
//appcompat库各版本见https://mvnrepository.com/artifact/androidx.appcompat/appcompat
implementation 'androidx.appcompat:appcompat:1.2.0'
// 指定单元测试编译用的junit版本号
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0
}

运行配置文件AndroidManifest.xml

AndroidManifest.xml指定了App的运行配置信息,它是一个XML描述文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.chapter02">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Main2Activity"></activity>
<!-- activity节点指定了该App拥有的活动页面信息,其中拥有android.intent.action.MAIN的activity说明它是入口页面 -->
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

AndroidManifest.xml的根节点为manifest,它的package属性指定了该App的包名。manifest下面有个application节点

  • android:allowBackup,是否允许应用备份。允许用户备份系统应用和第三方应用的apk安装包和应用数据,以便在刷机或者数据丢失后恢复应用,用户即可通过adb backup和adb restore来进行
    对应用数据的备份和恢复。为true表示允许,为false则表示不允许。
  • android:icon,指定App在手机屏幕上显示的图标。
  • android:label,指定App在手机屏幕上显示的名称。
  • android:roundIcon,指定App的圆角图标。
  • android:supportsRtl,是否支持阿拉伯语/波斯语这种从右往左的文字排列顺序。为true表示支持,为false则表示不支持。
  • android:theme,指定App的显示风格。

application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页,之所以说该页面是App主页,是因为它的activity节点内部还配置了以下的过滤信息

1
2
3
4
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

其中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打开该页面。

category节点设置的android.intent.category.LAUNCHER决定了是否在手机屏幕上显示App图标,如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个App图标。

Powered by Hexo & Theme Keep
Unique Visitor Page View