APP开发语言
App开发主要有两大技术路线,分别是原生开发和混合开发
Android的官方编程语言包括 Java 和 Kotlin
Kotlin
定位:Google 官方推荐的首选 Android 开发语言(2019 年起)。
优势:
简洁高效:语法糖减少样板代码(如 data class 自动生成 equals()/hashCode())。
空安全:编译时检查空指针(变量默认不可为 null,需显式声明 var str: String?)。
协程支持:简化异步任务处理(替代 AsyncTask 和回调地狱)。
完全兼容 Java:可调用 Java 代码,适合逐步迁移旧项目。
使用场景:
新项目首选,尤其适合快速迭代和复杂业务逻辑。
结合 Jetpack Compose 实现声明式 UI(现代化 UI 开发)。
Java
定位:Android 早期官方语言,仍广泛用于旧项目维护。
优势:
生态成熟:海量开源库和教程资源(如 Retrofit、Glide)。
跨平台性:代码可复用于后端或其他 Java 平台。
劣势:
冗长语法(如匿名内部类、getter/setter)。
缺乏现代语言特性(需手动处理空指针)。
使用场景:
维护遗留 Java 项目。
开发者已有 Java 基础,过渡到 Android 开发。
C/C++
涉及图像与音视频等复杂运算的场合使用
优势:执行效率比解释性语言高,JAVA允许调用C/C++编写的语言
XML
可扩展标记语言 (XML) 是一组以机器可读形式对文档进行编码时需遵从的规则。它是一组在互联网上共享数据的普遍格式。
经常更新内容的网站(例如新闻网站或博客)通常会提供 XML Feed,以便外部程序及时了解内容更改。上传和解析 XML 数据是联网应用的常见任务。每个XML都是独立的控件对象,标签内的属性以"android:"打头
1 2 3 4 5 6 7
| <TextView android:id="@+id/tv_hello" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello world!" android:textSize="16sp" android:textColor="#FF0000" />
|
安卓使用的数据库
SQLite,是一款轻型的数据库,它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。
1、简单,无需安装。
SQLite 没有复杂的安装配置过程,不需要另外配置、安装或管理。不需要启动、停止或配置的服务器进程,无需创建新的数据库实例或为用户分配访问权限的“设置”过程。
2、资源占用少。
SQLite占用空间非常小,是轻量级的,完全配置时小于600KiB,省略可选功能配置时小于250KiB,占用的电脑资源少,真正做到绿色、轻盈!
3、处理速度快
SQLite比一些流行的数据库在大部分普通数据库操作要快!
APP工程目录结构
App工程分为两个层次,第一个层次是项目,另一个层次是模块
模块依赖于项目,每一个项目至少有一个模块,也能拥有多个模块
一般所言的“编译运行APP”,指的是运行某个模块,而非某个项目,因为模块才对应实际的App
1. Android 视图(简化视图)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 项目名称/ ├── app/ │ ├── manifests/ │ │ └── AndroidManifest.xml //APP运行配置文件 │ ├── java/ │ │ ├── com.example..myapp //当前模块的Java源代码 │ │ ├── com.example..myapp(androidTest) //后面两个测试都是Java源代码 │ │ └── com.example..myapp │ ├── res/ │ │ ├── drawable //存放图形描述与图片文件 │ │ ├── layout //存放App页面布局 │ │ ├── mipmap //存放App的启动图标 │ │ └──values //存放一些常量定义文件 │ └── Gradle Scripts/ ├── Gradle Scripts/ └── 其他模块/
|
2. Project 视图(完整物理结构)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| 项目名称/ ├── .gradle/ // Gradle 构建系统生成的文件 ├── .idea/ // IDE 配置文件 ├── app/ // 主模块 │ ├── build/ // 构建输出 │ ├── libs/ // 本地库文件 │ ├── src/ // 源代码和资源 │ │ ├── androidTest // 仪器测试 │ │ ├── main/ // 主源代码 │ │ │ ├── assets/ // 原始资源文件 │ │ │ ├── java/ // Java/Kotlin 源代码 │ │ │ ├── res/ // 应用资源 │ │ │ └── AndroidManifest.xml │ │ └── test/ // 单元测试 │ └── build.gradle // 模块级构建配置 ├── gradle/ // Gradle 包装器文件 ├── build/ // 项目级构建输出 └── settings.gradle // 项目设置文件
|
3. Gradle Scripts
主要是工程的编译配置文件,是一个项目的自动化构建工具
一个典型的 Android Studio 项目包含多个 Gradle 脚本文件,每个文件都有其特定的作用和配置。以下是一些主要的 Gradle 脚本文件及其功能:
build.gradle (Project): 这个文件包含了整个项目的构建配置,如 Gradle 插件的版本和项目的仓库设置。这是顶层的构建文件,通常包含适用于所有子项目/模块的配置选项。
build.gradle (Module): 每个模块(如 app 模块)都有自己的 build.gradle 文件,用于配置特定于该模块的构建设置,例如编译 SDK 版本、应用 ID 和依赖项。
gradle-wrapper.properties: 这个文件定义了 Gradle 包装器的属性,包括 Gradle 分发的 URL 和版本。这确保了所有开发者和 CI 系统使用相同版本的 Gradle。
proguard-rules.pro: 该文件允许开发者添加自定义的代码混淆规则,以保护应用的代码不被轻易反编译。
gradle.properties: 用于配置构建属性,如 JVM 参数和 Gradle 的其他设置。
settings.gradle: 定义项目中包含的模块。例如,如果项目只有一个 app 模块,它将包含 include ':app'。
local.properties: 存储本地机器特定的配置,如 SDK 和 NDK 的路径。这个文件不应该被版本控制系统跟踪。
清单文件
每个应用底下都必须要有一个 AndroidMannifest.xml,并且文件名必须一模一样。
这个文件中包含了App的配置文件,系统需要根据里面的内容运行APP的代码,显示界面
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp" <!-- 应用包名,唯一标识应用 --> android:versionCode="1" android:versionName="1.0"
android:installLocation="auto"
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" android:required="true" /> <uses-feature android:name="android.hardware.screen.portrait" android:required="false" />
<supports-screens android:smallScreens="true" <!-- 支持小屏幕 --> android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:resizeable="true" android:anyDensity="true" />
<application android:icon="@mipmap/ic_launcher" <!-- 应用图标 --> android:label="@string/app_name" android:theme="@style/AppTheme" android:allowBackup="true" android:hardwareAccelerated="true" android:debuggable="false">
<activity android:name=".MainActivity" <!-- Activity 类名 --> android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme" android:configChanges="orientation|keyboardHidden" android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
<activity android:name=".SecondActivity" android:label="Second Activity" android:theme="@style/AppTheme" />
<service android:name=".MyService" android:enabled="true" <!-- 是否启用服务 --> android:permission="android.permission.BIND_JOB_SERVICE"> </service>
<receiver android:name=".MyBroadcastReceiver" android:enabled="true"> <intent-filter> <action android:name="com.example.myapp.ACTION_RECEIVE" /> </intent-filter> </receiver>
<provider android:name=".MyContentProvider" android:authorities="com.example.myapp.provider" android:exported="false" <!-- 是否允许其他应用访问 --> android:readPermission="android.permission.READ_EXTERNAL_STORAGE" android:writePermission="android.permission.WRITE_EXTERNAL_STORAGE"> </provider> </application> </manifest>
|