| Log.e:表示错误信息,比如可能导致程序崩溃的异常。 |
| Log.w:表示警告信息。 |
| Log.i:表示一般消息。 |
| Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。 |
| Log.v:表示冗余信息。 |
| Java是Android开发的主要编程语言,创建新项目时,Language栏默认选择了Java,表示该项目采用Java编码。 |
| |
| Kotlin是谷歌官方力推的又一种编程语言,它与Java同样基于JVM(Java Virtual Machine,即Java虚拟机),且完全兼容Java语言。 |
| 在Language栏下拉可选择Kotlin,一旦在创建新项目时选定Kotlin,该项目就会自动加载Kotlin插件,并将Kotlin作为默认的编程语言。 |
| |
| Android的SDK开发包内部定义了许多JNI接口,包括图像读写在内的底层代码均由C/C++编写,再由外部通过封装好的Java方法调用。 |
| |
| 每个XML标签都是独立的控件对象,标签内部的属性以“android:”打头,表示这是标准的安卓属性,各属性分别代表控件的某种规格。 |
| |
| Android早已内置了专门的数据库名为SQLite,它遵循关系数据库的设计理念,SQL语法类似于MySQL。 |
| 不同之处在于,SQLite无须单独安装,因为它内嵌到应用进程当中,所以App无须配置连接信息,即可直接对其增删改查。 |
| 由于SQLite嵌入到应用程序,省去了配置数据库服务器的开销,因此它又被归类为嵌入式数据库。 |
| |
| 手机端的App,连同程序代码及其内置的嵌入式数据库,其实是个又独立又完整的程序实体,它只负责手机上的用户交互与信息处理, |
| 该实体被称作客户端。而后端的Java Web服务,包括Web代码和数据库服务器,同样构成另一个单独运行的程序实体, |
| 它只负责后台的业务逻辑与数据库操作,该实体被称作服务端。客户端与服务端之前通过HTTP接口通信, |
| 每当客户端觉得需要把信息发给服务端,或者需要从服务端获取信息时,客户端便向服务端发起HTTP请求, |
| 服务端收到客户端的请求之后,根据规则完成数据处理,并将处理结果返回给客户端。这样客户端经由HTTP接口并借服务端之手, |
| 方能间接读写后端的数据库服务器(如MySQL) |
| |
| 由此看来,一个具备用户管理功能的App系统,实际上并不单单只是手机上的一个应用,还包括与其对应的Java Web服务。 |
| 手机里的客户端App,面向的是手机用户,App与用户之间通过手机屏幕交互;而后端的服务程序,面向的是手机App,客户端与服务端之间通过HTTP接口交互。 |


-
App工程分为两个层次,第一个层次是项目,另一个层次是模块。
-
模块依附于项目,每个项目至少有一个模块,也能拥有多个模块。

-
App项目下面有两个分类:app(代表app模块)、Gradle Scripts。
-
app下面有3个子目录,Gradle Scripts下面主要是工程的编译配置文件

-
工程结构
| (1)manifests子目录,下面只有一个XML文件,即AndroidManifest.xml,它是App的运行配置文件。 |
| (2)java子目录,下面有3个com.example.myapp包,其中第一个包存放当前模块的Java源代码,后面两个包存放测试用的Java代码。 |
| (3)res子目录,存放当前模块的资源文件。res下面又有4个子目录: |
| drawable目录存放图形描述文件与图片文件。 |
| layout目录存放App页面的布局文件。 |
| mipmap目录存放App的启动图标。 |
| values目录存放一些常量定义文件,例如字符串常量strings.xml、像素常量dimens.xml、颜色常量colors.xml、样式风格定义styles.xml等。 |
| |
| Gradle Scripts下面主要是工程的编译配置文件,主要有: |
| (1)build.gradle,该文件分为项目级与模块级两种,用于描述App工程的编译规则。 |
| (2)proguard-rules.pro,该文件用于描述Java代码的混淆规则。 |
| (3)gradle.properties,该文件用于配置编译工程的命令行参数,一般无须改动。 |
| (4)settings.gradle,该文件配置了需要编译哪些模块。初始内容为include ':app',表示只编译app模块。 |
| (5)local.properties,项目的本地配置文件,它在工程编译时自动生成,用于描述开发者电脑的环境配置,包括SDK的本地路径、NDK的本地路径等。 |
| 新创建的App项目默认有两个build.gradle,一个是Project项目级别的build.gradle;另一个是Module模块级别的build.gradle。 |
| |
| 项目级别的build.gradle指定了当前项目的总体编译规则,打开该文件在buildscript下面找到repositories和dependencies两个节点, |
| 其中repositories节点用于设置Android Studio插件的网络仓库地址,而dependencies节点用于设置gradle插件的版本号。 |
| 由于官方的谷歌仓库位于国外,下载速度相对较慢,因此可在repositories节点添加阿里云的仓库地址,方便国内开发者下载相关插件。 |
| |
| 模块级别的build.gradle对应于具体模块,每个模块都有自己的build.gradle,它指定了当前模块的详细编译规则。 |
| android { |
| |
| compileSdkVersion 30 |
| |
| buildToolsVersion "30.0.3" |
| defaultConfig { |
| |
| applicationId "com.example.chapter02" |
| |
| minSdkVersion 19 |
| |
| targetSdkVersion 30 |
| |
| versionCode 1 |
| |
| versionName "1.0" |
| testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
| } |
| |
| } |
| AndroidManifest.xml指定了App的运行配置信息,它是一个XML描述文件 |
| 可见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的显示风格。 |
| |
| <?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 android:name=".MainActivity"> |
| <intent-filter> |
| <action android:name="android.intent.action.MAIN" /> |
| <category android:name="android.intent.category.LAUNCHER" /> |
| </intent-filter> |
| </activity> |
| </application> |
| </manifest> |
| |
| 注意到application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml中正确配置了activity节点, |
| 才能在运行时访问对应的活动页面。初始配置的MainActivity正是App的默认主页,之所以说该页面是App主页,是因为它的activity节点内部还配置了以下的过滤信息。 |
| 其中action节点设置的android.intent.action.MAIN表示该页面是App的入口页面,启动App时会最先打开该页面。 |
| 而category节点设置的android.intent.category.LAUNCHER决定了是否在手机屏幕上显示App图标, |
| 如果同时有两个activity节点内部都设置了android.intent.category.LAUNCHER,那么桌面就会显示两个App图标。 |
| 以上的两种节点规则可能一开始不太好理解,读者只需记住默认主页必须同时配置这两种过滤规则即可。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-07-30 原生注解方式注入web原生组件
2022-07-30 拦截器
2022-07-30 mysql常见错误
2022-07-30 视图解析
2022-07-30 自定义内容协商策略
2022-07-30 自定义内容协商
2022-07-30 内容协商