安卓原生开发,从入门到精通

Gradle

Gradle 是一种基于 Groovy 或 Kotlin DSL(领域特定语言)的构建工具,用于自动化构建、测试、部署等任务。

1. build.gradle

build.gradle是Gradle 项目的核心配置文件,通常位于项目的根目录下。它的主要作用是定义项目的构建逻辑,包括:

  • 项目依赖:指定项目需要的库(如 JAR 文件)。
  • 插件应用:引入 Gradle 插件,例如 java 插件用于 Java 项目。
  • 任务配置:自定义构建任务,如编译、测试、打包等。
  • 属性配置:设置项目属性,如版本号、源码目录等。
plugins {
    id 'java' // 应用 Java 插件
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral() // 使用 Maven 中央仓库
}

dependencies {
    implementation 'org.example:library:1.0' // 添加项目依赖
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

test {
    useJUnitPlatform() // 配置测试框架
}

signingConfigs 是一个配置块,用于定义签名配置。签名配置用于在构建过程中对 APK 或 AAB 文件进行签名。

  • debug 配置是默认的调试签名配置,用于开发和调试阶段。
  • release 配置是用于发布应用的签名配置。

2. settings.gradle

settings.gradle位于项目的根目录下,用于定义项目的设置,包括:

  • 多模块项目:定义子模块项目。
  • 项目名称:设置项目的名称。
  • 插件管理:定义全局插件。
rootProject.name = 'my-project' // 设置项目名称

include 'submodule1', 'submodule2' // 包含子模块

3. gradle.properties

gradle.properties位于项目的根目录下,用于定义项目的全局属性,例如:

  • Gradle 版本:指定使用的 Gradle 版本。
  • 环境变量:设置构建时的环境变量。
  • 依赖版本:统一管理依赖版本。

4. build.gradle.kts

build.gradle.kts是使用 Kotlin DSL 编写的构建脚本,功能与 build.gradle 相同,但语法更接近 Kotlin 语言。

5. gradlew 和 gradlew.bat

  • gradlew:Linux 和 macOS 系统下的 Gradle Wrapper 脚本。
  • gradlew.bat:Windows 系统下的 Gradle Wrapper 脚本。

这些脚本允许开发者在不手动安装 Gradle 的情况下运行 Gradle 构建。会自动下载并使用指定版本的 Gradle。

6. gradle/wrapper/gradle-wrapper.properties

gradle/wrapper/gradle-wrapper.properties是 Gradle Wrapper 的配置文件,用于指定 Gradle 的版本和分发 URL。

7. build/

build/是 Gradle 构建输出目录,通常包含以下内容:

  • build/classes/:编译后的类文件。
  • build/libs/:生成的 JAR 或 WAR 文件。
  • build/reports/:构建报告,如测试报告。
  • build/tmp/:临时文件。

8. src/

src是源代码目录,通常包含以下子目录:

  • src/main/java:主程序源代码。
  • src/main/resources:主程序资源文件。
  • src/test/java:测试程序源代码。
  • src/test/resources:测试程序资源文件。

Android Studio

Android Studio 是一款由 Google 开发的官方集成开发环境(IDE),专门用于开发 Android 应用程序。

1. 使用记录

  • Gradle配置里,选择JDK时可以自动下载安装JDK
  • 设置Module的API版本时,只能选择一家下载的API版本

2. local.properties

local.properties 文件的主要作用是告诉 Android Studio 项目中使用的 Android SDK 的路径。

sdk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk

3. .iml 文件

.iml 文件是 IntelliJ IDEA(Android Studio 是其专用于 Android 开发的版本)为每个模块生成的配置文件,主要用于存储模块的配置信息 。

.iml 文件定义了模块的基本结构,包括源代码路径、资源文件路径、编译输出路径等

<module type="JAVA_MODULE" version="4">
    <component name="NewModuleRootManager">
        <content url="file://$MODULE_DIR$/src/main/java"/>
        <orderEntry type="library" scope="PROVIDED" />
    </component>
</module>
.iml 文件是 XML 格式的,通常不需要手动编辑,但可以在必要时进行修改

Android开发

安卓开发知识图谱涵盖基础知识(开发环境、四大组件、UI布局、数据存储等)、进阶知识(自定义View、性能优化、安全机制等)、热门技术(Flutter、热修复等)、编程语言(Java、Kotlin)、计算机基础(数据结构、网络等)、开发工具与框架(Android Studio、Gradle、开源库)、架构设计(MVC、MVP、MVVM等)、开发流程与规范(版本控制、代码规范、测试等)以及行业动态与趋势(新技术、新框架)。

1.AndroidManifest.xml

AndroidManifest.xml 是 Android 应用的核心配置文件,它向系统声明了应用的基本属性、组件以及权限等。可以将其看作是应用的“蓝图”或“说明书”

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-sdk />
    <uses-permission />
    
    <application>
        <activity>
            <intent-filter>
                <action />
                <category />
            </intent-filter>
        </activity>
        <activity />
        <service />
        <receiver>
            <intent-filter>
                <action />
            </intent-filter>
        </receiver>
        <provider />
        <meta-data />
    </application>
</manifest>

1.1 <manifest>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp">
    <!--
        xmlns:android: 定义了 XML 文件的命名空间,这是 Android 开发中必须的。
        package: 应用的唯一标识,用于区分不同的应用。这个包名通常也是应用的 Java 包名。
    -->
</manifest>
从 Android Gradle 插件 4.0.0 开始,package 属性不再被支持,而是应该在 build.gradle 文件中设置应用的包名。

1.2 <uses-sdk>

<!--
  <uses-sdk> 标签用于定义应用支持的 SDK 版本范围。
  android:minSdkVersion: 应用能够运行的最低 SDK 版本。
  android:targetSdkVersion: 应用的目标 SDK 版本,建议设置为最新的稳定版本。
-->
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="30" />

1.3 <uses-permission>

<uses-permission android:name="android.permission.INTERNET" />
    <!--
        <uses-permission> 标签用于声明应用所需的权限。
        android:name: 权限的名称,如访问网络、写入外部存储、使用相机等。
    -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />

1.4 <application>

<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">
    <!--
        <application> 标签是应用的根节点,定义了应用的基本属性。
        android:allowBackup: 是否允许应用数据备份。如果设置为 false,应用数据不会被备份。
        android:icon: 应用的图标资源。
        android:label: 应用的名称,通常是一个字符串资源。
        android:roundIcon: 应用的圆形图标,适用于 Android 7.1 及以上版本。
        android:supportsRtl: 是否支持从右到左(RTL)布局。
        android:theme: 应用的主题,通常是一个样式资源。
    -->
</application>

1.5 <activity>

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
    <!--
        <activity> 标签用于定义应用中的活动。
        android:name: 活动的类名,通常是全限定类名。
        <intent-filter> 标签用于定义活动的入口点。
            <action> 标签定义活动支持的意图动作。
            <category> 标签定义活动支持的意图类别。
    -->
<activity android:name=".SecondActivity" />
<activity android:name=".ThirdActivity" />
    <!--
        定义其他活动,这些活动没有定义 intent-filter,因此不会出现在应用的启动列表中,
        但可以通过代码调用。
    -->

1.6 <service>

<service android:name=".MyService" />
    <!--
        <service> 标签用于定义应用中的服务。
        android:name: 服务的类名,通常是全限定类名。
    -->

1.7 <receiver>

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>
    <!--
        <receiver> 标签用于定义应用中的广播接收器。
        android:name: 广播接收器的类名,通常是全限定类名。
        <intent-filter> 标签用于定义广播接收器监听的意图。
    -->

1.8 <provider>

<provider
    android:name=".MyProvider"
    android:authorities="com.example.myapp.provider"
    android:exported="false" />
    <!--
        <provider> 标签用于定义应用中的内容提供者。
        android:name: 内容提供者的类名,通常是全限定类名。
        android:authorities: 内容提供者的唯一标识,通常是一个 URI。
        android:exported: 是否允许其他应用访问该内容提供者。如果设置为 false,只有同一应用中的组件可以访问。
    -->

1.9 <meta-data>

<meta-data
    android:name="com.example.myapp.MY_KEY"
    android:value="MyValue" />
    <!--
        <meta-data> 标签用于定义应用的元数据。
        android:name: 元数据的键。
        android:value: 元数据的值。
    -->