学习安卓开发应用D2 工程结构

2 Android APP开发基础

2.1APP开发的特点

XML:extensible markup language,可标记扩展语言。严格来说XML并非语言,只是一种标记语言。类似于HTML,利用各种标签表达页面元素,以及各元素之间的层级关系及其排列组合。

SQLite:内嵌到了应用程序中,无需配置数据库服务器,被归类为嵌入式数据库

手机APP能直接操作内置的SQLite数据库,但不能直接操作MYSQL这种企业数据库。必须事先搭好服务端程序(如Java Web),然后客户端与服务端通过HTTP接口通信,再由服务端去操作MYSQL这样的数据库服务器。

2.2 APP的工程结构

项目与模块的区别

工程内部各目录与配置文件的用途说明

阐述两种级别的编译配置文件build、gradle,及内部的配置信息说明

运行配置文件AndroidManifest.xml的节点信息及其属性说明

2.2.1 APP工程目录结构

项目-模块

每个项目至少一个模块,也可以多个模块。

编译运行app指某个模块,而非某个项目,因为模块才对应实际的app

2.2.2 编译配置文件build.grade
Project(项目)级别的build.gradle学习

从AndroidStudioBumblebee开始,项目级别的build.gradle不再存放仓库地址,而是将仓库地址的repositories节点配置到了settings.gradle。因此要在settings.gradle中补充如下的阿里云仓库地址:

//从Android StudioBumblebee开始,项目级别的build.gradle不再存放仓库地址,
//而是将仓库地址的repositories节点配置到了settings.gradle。

pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        //以下4行添加阿里云的仓库地址,方便国内开发者下载相关插件
        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'}
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        //以下4行添加阿里云的仓库地址,方便国内开发者下载相关插件
        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'}
    }
}
rootProject.name = "My Application"
include ':app'
Module(模块)级别的build.gradle学习
//build.gradle(Module: My _Application.app):模块级别的build.gradle
//每个模块都有自己的build.gradle,指定了当前模块的详细编译规则。

//为什么文件扩展名是.gradle?  因为他们采用了gradle工具完成编译构建操作。
//Gradle工具的版本配置在gradle-wrapper.properties


//这段代码用于声明这是一个Android应用模块,用于让Gradle识别 Android 项目的特殊结构(如res/目录),并使用android{ ... }配置块
plugins {
    id 'com.android.application'
}


//android{ }是Android项目的核心配置块,主要配置:defaultConfig、buildTypes、productFlavors、compileOptions等
android {
    //指定编译用的SDK版本号。比如30表示使用Android xx编译
    compileSdk 30

    defaultConfig {
        //指定该模块的应用编号,即APP包名
        applicationId "com.example.myapplication"
        //指定app适合运行的最小SDK版本号。比如28表示至少在android xx上运行
        minSdk 28
        //指定目标设备的SDK版本号。表示APP最希望在哪个版本的android上运行
        targetSdk 30
        //指定APP的应用版本号
        versionCode 1
        //指定APP的应用版本名称
        versionName "1.0"

        //testInstrumentationRunner:一个Gradle配置项,用于声明Android仪器测试的运行器
        //androidx.test.runner.AndroidJUnitRunner:这是AndroidX测试库提供的默认测试运行器,基于JUnit 4,用于提供 Android 环境
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    //buildTypes块:用于定义不同的构建类型(如 debug、release),每个类型可以有不同的构建配置
    buildTypes {
        //定义名为 release 的构建类型,专门用于生成正式发布的 APK。
        //APK(Android Package Kit,文件扩展名 .apk)是 Android 应用程序的安装包文件
        release {
            //minifyEnabled false:是否启用代码压缩(删除无用代码)和混淆(重命名类/方法名,增加反编译难度,保护源代码)。
            //false 表示禁用(默认在 release 中应设为 true 以优化 APK)。
            //若启用,需配合 ProGuard/R8 规则(见下一行)
            minifyEnabled false

            //指定 ProGuard/R8 混淆规则文件:
            //APK 可以被反编译(如使用 JADX、APKTool),容易暴露源代码逻辑。通过重命名类、方法、变量等标识符,并删除无用代码,使得反编译后的代码难以阅读和理解
            //proguard-android-optimize.txt:Android 默认提供的优化规则(位于 Android SDK 中)。
            //proguard-rules.pro:项目自定义规则(位于模块根目录)。
            //若 minifyEnabled true,编译时会应用这些规则来混淆apk。
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //compileOptions块:配置 Java 源代码的编译选项,主要兼容性设置。
    compileOptions {
        //指定源代码的 Java 版本为 1.8(即支持 Lambda 表达式、Stream API 等 Java 8 特性)。
        sourceCompatibility JavaVersion.VERSION_1_8
        //指定生成的字节码兼容 Java 1.8,确保在 JVM 上运行时能正确调用 1.8 的特性
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    // AndroidX 核心兼容库,提供向后兼容的组件和 API,确保在新旧 Android 版本上行为一致。包含 Fragment、Activity 等基础组件。
    implementation 'androidx.appcompat:appcompat:1.3.0'

    // Google 的 Material Design 组件库,提供 Material 风格的 UI 控件(如按钮、卡片、导航栏等)
    implementation 'com.google.android.material:material:1.4.0'

    // 约束布局库,Android 推荐的灵活布局方式,替代 RelativeLayout,支持复杂的视图约束关系
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'

    // 单元测试框架 (JUnit 4),仅运行在本地 JVM,用于测试纯 Java/Kotlin 逻辑(不依赖 Android 环境)
    testImplementation 'junit:junit:4.13.2'

    // Android 扩展的 JUnit 测试库,运行在设备或模拟器上,提供 Android 环境相关的测试功能(如 Context 访问)
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'

    // Espresso 核心测试库,用于编写 UI 自动化测试(如模拟点击、验证界面内容)
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
AndroidManifest.xml文件学习:

xml文件中注释快捷键:ctrl+/

注意application下面还有个activity节点,它是活动页面的注册声明,只有在AndroidManifest.xml

中正确配置了activity节点,才能在运行时访问对应的活动页面。初始配置的MainActivity正是App

的默认主页,之所以说该页面是App主页,是因为它的activity节点内部还配置了以下的过滤信息:

<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图标。以上的两种节点规则可能一开始不太好理解,读者只需记住默认主

页必须同时配置这两种过滤规则即可。

问题1:"Xml declaration should precede all document content" 报错。

解答:XML 声明必须位于文档的最前面,不能在任何其他内容(包括注释、空格或换行)之后出现,修改为以下:

<?xml version="1.0" encoding="utf-8"?>
<!--xml文件为配置文件-->

2.3 app的设计规范

app将看得见的界面设计与看不见的代码逻辑区分开,然后利用xml标记描绘应用界面,同时使用Java代码书写程序逻辑,从而形成app前后端分离的设计规约。

2.3.1界面设计与代码逻辑

app分为:用户看得到的界面(交给XML);用户看不到的app后台(交给后台Java代码)

前后端分离:即界面设计与代码逻辑分开。

新创建的app项目,默认首页布局为activity_main.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值