2025-7-12-Android开发笔记

2025-7-12-Android开发笔记

七月 12, 2025

开发笔记

🛠️ 开发环境配置

基础工具链

| 组件 | 版本要求 | 备注 | | ————– | ————– | —————————– | | Android Studio | Flamingo 2022+ | 需支持 AGP 8.0 | | JDK | 17+ | 推荐使用 Temurin 发行版 | | Gradle | 8.0+ | 使用 Wrapper 确保版本一致 | | Android SDK | API 19+ | 最低兼容 Android 4.4 (KitKat) |

关键依赖说明

1
2
3
4
5
6
7
8
9
10
11
12
13
dependencies {    
// 基础框架
implementation(libs.androidx.core.ktx)
// 提供 Kotlin 扩展 API
implementation(libs.androidx.appcompat)
// 兼容性支持库
implementation(libs.material)
// Material Design 组件
// 测试框架
testImplementation(libs.junit) // 单元测试
androidTestImplementation(libs.androidx.junit) // 仪器化测试
androidTestImplementation(libs.androidx.espresso.core) // UI 自动化测试
}

基本的项目文件结构概况

一个标准的 Android 项目通常遵循以下目录结构(基于 Android Studio 默认模板):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MyApp/
├── app/ # 主模块(Module)
│ ├── build.gradle # 模块级 Gradle 配置
│ ├── src/
│ │ ├── main/ # 主代码和资源
│ │ │ ├── AndroidManifest.xml # 应用配置入口
│ │ │ ├── java/ # Java/Kotlin 代码(包结构)
│ │ │ ├── res/ # 资源文件(布局、图片、字符串等)
│ │ │ │ ├── drawable/ # 图片和矢量图
│ │ │ │ ├── layout/ # XML 布局文件
│ │ │ │ ├── values/ # 字符串、颜色、样式等
│ │ │ │ └── ...
│ │ │ └── assets/ # 原始资源文件(如 JSON、字体)
│ │ └── test/ # 单元测试代码
│ └── ...
├── gradle/ # Gradle 包装器配置
├── build.gradle # 项目级 Gradle 配置
└── settings.gradle # 模块管理(如引入子模块)

1. 私有目录和公有目录

  • 技术点:
    • 私有目录/data/data/<package-name>/(内部存储),使用 Context.getFilesDir()getCacheDir() 访问,无需权限,应用卸载时自动清除。
    • 公有目录:如 Downloads/DCIM/ 等,通过 Environment.getExternalStoragePublicDirectory() 访问,需动态申请 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 权限。
    • 作用域存储(Scoped Storage):Android 10+ 限制直接访问公有目录,需通过 MediaStore 或存储访问框架(SAF)操作文件。

2. 二进制文件的执行权限问题

  • 技术点:
    • NDK/JNI:原生二进制文件(如 .so 库)需放在 jniLibs/ 目录,自动打包到 APK。
    • 权限控制:Android 不允许直接执行外部存储中的二进制文件(如下载的 .so 或可执行文件),需先复制到私有目录(/data/data/)并通过 chmod 赋予执行权限。
    • 安全风险:动态加载外部代码需谨慎,避免恶意代码注入。

3. AndroidManifest.xml 的重要性和使用方法

  • 关键技术:
    • 四大组件声明<activity><service><receiver><provider> 必须在此注册。
    • 权限管理:声明应用所需权限(如 <uses-permission android:name="android.permission.CAMERA"/>)。
    • Intent Filter:定义组件响应隐式 Intent 的规则(如主 Activity 的 LAUNCHER 类别)。
    • 应用配置:包名、版本号、SDK 版本限制(<uses-sdk>)、硬件特性要求(如 <uses-feature>)。
    • 特殊属性android:exported 控制组件是否允许外部应用访问(Android 12+ 强化限制)。

4. buildFeatures { viewBinding true }

  • 技术点:
    • 视图绑定(ViewBinding):替代 findViewById,为每个 XML 布局生成绑定类,提供类型安全的视图引用。
    • 启用方式:在 build.gradle 中配置:
1
2
3
4
5
android {
buildFeatures {
viewBinding true
}
}
  • 优势:避免空指针异常,减少模板代码;与 DataBinding 相比无性能开销(但缺少数据绑定功能)。
1
2
3
4
5
6
7
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.text = "Hello ViewBinding!"
}