知蛛网
  • 首页
  • 会员
  • 活动
  • 工作台

常见问题
活动
关于我们
联系我们
隐私协议
用户协议
会员协议
© 2026 知蛛网. 保留所有权利。
首页会员工作台我的
flynn@flynn
主页wiki简历作品集
目录
全部书籍
00-路线
  • 学习路线
  • 命名与写作规范
01-计算机基础
01-计算机网络
  • 互联网是如何工作的
  • HTTP协议
  • TCP/IP协议
  • 浏览器直接打开本地html文件,请求时的协议问题
02-浏览器原理
  • 浏览器是如何渲染页面的
  • 浏览器是如何渲染页面的
  • 面试之浏览器
03-操作系统
  • 进程与线程
  • 内存管理与虚拟内存
  • IO 模型与多路复用
  • 文件系统与页缓存
04-数据结构与算法
  • 数组与链表
  • 栈与队列
  • 哈希表
  • 树与堆
  • 基础数据结构
01-基础数据结构
02-高级算法
  • 排序算法
  • 二分查找
  • 递归与回溯
  • 动态规划
  • 双指针与滑动窗口
03-leetcode刷题
02-前端核心
01-web开发
  • Web 和 Web 标准
  • web 入门
  • web 开发
  • URL
  • 域名
  • Web服务器
  • 命令行
  • 工作流程和流程
  • 超链接
  • 浏览器指纹
02-html
  • HTML基础语法
  • HTML 概述
  • HTML 发展史
  • HTML调试
  • HTML标题与段落
  • 文本格式化
  • 强调与重要性
  • 块级元素和内联元素
  • 列表
  • 区块
  • 语义元素
  • 页面结构化和语义化
  • 超链接
  • 相对路径和绝对路径
  • 图片
  • 表格
  • 表单和按钮
  • 多媒体
  • 视频/音频
  • HTML 头部
  • HTML 字符集
  • HTML颜色
  • HTML 语言代码
  • HTML 国家/地区
  • Emoji (表情符号)
  • HTML 标签简写及全称 |
  • SVG
  • Canvas 2D
  • Canvas 3D
  • 框架 `<iframe>`
  • HTML 拖放
  • HTML5 Geolocation(地理定位)
  • Web 存储
  • HTML URL 编码
  • MathML
  • 远程图片资源在自己网站中无法展示问题
03-css
  • CSS简介
  • CSS 语法
  • CSS 创建
  • CSS 发展史
  • CSS 浏览器支持
  • CSS 选择器
  • CSS `!important` 规则
  • css颜色
  • CSS 文本格式
  • CSS 盒子模型
  • CSS 尺寸
  • CSS 内边距
  • CSS 外边距
  • CSS 边框
  • CSS 轮廓
  • CSS 背景(background)
  • CSS 溢出
  • CSS 文档流
  • CSS 显示和可见性
  • CSS 浮动
  • CSS 定位
  • CSS 对齐方式
  • CSS 网页布局
  • CSS 多列布局(CSS Multi-column Layout)
  • CSS 透明度
  • CSS 响应式设计(Responsive Design)
  • CSS 媒体查询
  • CSS 列表
  • CSS 表格
  • CSS 表单
  • CSS 链接
  • CSS 用户界面
  • CSS 计数器
  • CSS 过渡
  • CSS 动画
  • CSS 2D 转换
  • CSS 3D 转换
  • CSS 变量(CSS Custom Properties)
  • CSS 原生嵌套(CSS Nesting)
  • CSS 函数(CSS Functions)
04-javascript
  • 什么是 JavaScript?
  • 编程范式(Programming Paradigm)
  • 什么是范式?
  • ECMAScript 规范
  • 什么是语法糖
  • 开发环境搭建
  • 什么是堆和栈?
  • 什么是执行上下文
  • JavaScript 垃圾回收机制
  • 作业队列与事件循环
  • 深拷贝和浅拷贝
  • 语法与类型
  • 字面量
  • 控制流与错误处理
  • 循环与迭代
  • 函数
  • 表达式与运算符
  • 数字和字符串
  • 表达日期与时间
  • 正则表达式
  • 索引集合类
  • 带键的集合
  • 对象
  • 类
  • Promise
  • async/await
  • 迭代器和生成器
  • 国际化
  • 模块
  • 资源管理
  • 属性的可枚举性和所有权
  • 闭包
  • 继承与原型链
  • 元编程
  • 内存管理
  • 内置对象
  • arguments 对象
  • BOM 对象(浏览器对象模型)
  • DOM 对象(文档对象模型)
  • bind、apply、call的区别
  • new 操作符
  • typeof 和 instanceof 的区别
  • HTML5 Web Workers
05-typescript
  • TypeScript 类型系统基础
  • 类型体操
03-框架与跨端
01-react
  • 开发环境搭建
  • JSX
  • 组件
  • 生命周期
  • Hooks
  • 组件通信
  • 状态管理
  • React 19 新特性
  • useCallback 闭包陷阱
  • 常用的性能优化操作
  • Firbe 架构
  • React 18 新特性
  • useRef
  • 基于umijs 4.0 搭建官网
  • react+vite本地开发,如何手机联调
  • React 实现谷歌登录
  • React 项目调起 WhatsApp
02-vue
  • vue 解决跨域请求
  • 在vue2使用TinyMCE富文本编辑器
  • 使用jszip 导出新闻
  • Vue 本地开发启用 https
  • 基于vue3+vite+ts+elementplus+pinia+axios搭建后台管理系统
03-react-native
  • iOS 开发环境(RN 0.72)
  • RN 原生模块(Native Module)
  • 查看Maven包的Java包名
  • 优化 APP 启动速度
  • 安全键盘
  • 启动图与 Icon 尺寸规范
  • RN如何生成/配置iOS的开发者证书和生产证书
  • 邓白氏编码
  • 微信开放平台配置Universal Link
  • 上架至Apple App Store
04-android
  • 开发环境搭建
  • Android项目目录结构
  • 认识Gradle
04-工程化
01-git
  • 如何解决已被git跟踪文件不在跟踪
  • git标签
  • Git报错: Failed to connect to github.com port 443 解决方案
  • Git 分支操作速查
02-构建工具
  • 构建工具原理与选型
02-webpack
  • webpack 核心概念与构建流程
  • webpack 性能优化
03-vite
  • vite 为什么快
  • vite 插件与生产构建
03-测试
  • 前端测试体系
04-部署
  • Nginx 反向代理解决跨域
  • SPA 刷新非首页报 404
05-docker
  • Docker 常用命令
  • docker-compose nginx配置ssl证书
  • Docker Desktop 升级后 docker-compose 命令找不到
06-性能优化
  • 前端性能优化体系
  • 背景 GIF 优化方案
07-微前端
  • 微前端实战(qiankun)
  • 微前端 · qiankun
01-qiankun
05-后端与数据
01-nodejs
  • Node 版本与依赖的 engines 冲突
  • Express 实现 Gmail 发信(邮箱验证码)
02-php
  • 浏览器保存新闻,发布到自有网站
  • [分布式] 浏览器保存新闻,发布到自有网站
  • 邮件发送,多账号轮询
  • nginx和php-fpm通信问题导致网站页面空白
03-python
  • macOS M1 芯片 如何安装 py 和 tkinter
  • tkinter 编写的程序如何打包成桌面软件
04-架构设计
  • 后台管理系统中角色管理、管理员管理、权限设置他们三者之间的关系
05-运维
  • redis启动失败
  • 实现自动备份宝塔项目及数据库到本地
  • 宝塔面板
01-宝塔
06-实战项目
  • 实战准备工作
02-项目记录
  • AI-Chat 模块技术文档
  • CRMChat 部署
07-面试专项
01-面试
  • 面试之自我介绍
  • CSS 面试
  • JS面试
  • React面试
  • Vue面试
  • RN 面试 · 题目清单
  • RN 面试 · 答案详解
  • RN 物流公司 · 题目清单
  • RN 物流公司 · 答案详解
  • Uniapp 面试
  • 带团队经验
12-react专项
  • 一个表格,某一行的某一列数据变动了,如何优化性能?
13-reactnative专项
  • RN 开发过程中,有遇到什么棘手的问题?你是如何解决的?
14-过往面试总结
  • 冷哥传媒 · 面试题
  • 沐腾科技 · 面试题
  • 字符频率排序
02-面试八股
  • 网络八股
  • 浏览器八股
  • 工程化八股
03-算法面试题
  • 前端高频手写题
  • 场景设计题
04-真实面试经历
  • 20251027 盾蓝科技 面试
  • 20251028 芝麻甜心 面试
08-工具
01-n8n
  • 初始n8n
  • 快速入门
  • 在宝塔中搭建n8n环境
  • n8n中常用节点
  • n8n和代码的区别
02-Trae
  • Figma MCP 配置指南
03-UI_UX_pro_max
  • UI_UX_pro_max的使用
04-开发环境
  • VMWare虚拟机安装
  • PowerShell 执行策略与编码设置
98-杂项
  • A股股票交易相关费用
99-手册
  • iOS 开发者账号申请流程及费用
  • 邓白氏编码申请及费用
  • App 推送通道申请及费用
  • App 开发收费项目清单
  • 注册AWS账号
  • 使用Amazon Polly实现文本转语音
  • Google 翻译 Key 申请与前端调用
  • 使用SmsForwarder转发短信

Android项目目录结构

04-android2026/11/14

整体结构

MyApplication/                    # 项目根目录
├── app/                         # 主模块(主要开发目录)
├── gradle/                      # Gradle包装器文件
├── .gradle/                     # Gradle缓存(自动生成)
├── .idea/                       # IDE配置(自动生成)
├── build/                       # 构建输出(自动生成)
├── gradle/                      # Gradle相关
├── gradlew                      # Gradle包装器脚本(Unix)
├── gradlew.bat                  # Gradle包装器脚本(Windows)
├── build.gradle                 # 项目级构建配置
├── settings.gradle              # 项目设置文件
├── local.properties             # 本地环境配置(自动生成)
└── README.md                    # 项目说明文档

主模块(app/)详细结构

app/
├── manifests/                   # Android清单文件
│   └── AndroidManifest.xml     # 应用配置清单
├── java/                       # Java/Kotlin源代码
│   ├── com.example.myapp/      # 包名目录
│   │   ├── MainActivity.kt     # 主Activity
│   │   ├── ui/                 # 界面相关
│   │   │   ├── fragments/      # Fragment类
│   │   │   ├── activities/     # Activity类
│   │   │   └── adapters/       # 适配器类
│   │   ├── data/               # 数据层
│   │   │   ├── models/         # 数据模型
│   │   │   ├── repositories/   # 数据仓库
│   │   │   └── databases/      # 数据库相关
│   │   ├── network/            # 网络相关
│   │   ├── utils/              # 工具类
│   │   └── di/                 # 依赖注入
│   └── (androidTest)           # Android测试代码
├── res/                        # 资源文件目录
│   ├── drawable/               # 图片资源(PNG、JPEG、WebP)
│   │   ├── ic_launcher.png     # 应用图标
│   │   ├── background.xml      # 背景选择器
│   │   └── vector/             # 矢量图形目录
│   ├── layout/                 # 布局文件
│   │   ├── activity_main.xml   # 主Activity布局
│   │   ├── item_list.xml       # 列表项布局
│   │   └── fragment_home.xml   # Fragment布局
│   ├── mipmap/                 # 应用图标(不同分辨率)
│   │   ├── ic_launcher.png     # 默认图标
│   │   ├── ic_launcher_round.png # 圆形图标
│   │   └── (hdpi, xhdpi, etc.)/ # 不同密度
│   ├── values/                 # 数值资源
│   │   ├── colors.xml          # 颜色定义
│   │   ├── strings.xml         # 字符串资源
│   │   ├── styles.xml          # 样式定义
│   │   ├── dimens.xml          # 尺寸定义
│   │   ├── themes.xml          # 主题定义
│   │   └── arrays.xml          # 数组定义
│   ├── anim/                   # 动画资源
│   │   ├── fade_in.xml         # 淡入动画
│   │   └── slide_up.xml        # 上滑动画
│   ├── menu/                   # 菜单资源
│   │   └── main_menu.xml       # 主菜单
│   ├── font/                   # 字体资源
│   │   └── roboto.ttf          # 自定义字体
│   ├── raw/                    # 原始资源文件
│   │   └── audio.mp3           # 音频文件
│   └── xml/                    # 其他XML配置
│       └── network_security_config.xml # 网络安全配置
├── assets/                     # 原始资源目录
│   ├── html/                   # HTML文件
│   ├── json/                   # JSON数据文件
│   └── fonts/                  # 字体文件(另一种方式)
├── (test)                      # 单元测试代码
├── build.gradle                # 模块级构建配置
└── proguard-rules.pro          # 混淆规则文件

关键文件详解

1. AndroidManifest.xml - 应用清单文件

上一篇开发环境搭建
下一篇认识Gradle
本页目录
整体结构主模块(app/)详细结构关键文件详解1. AndroidManifest.xml - 应用清单文件2. build.gradle - 构建配置3. 资源文件详解代码包结构最佳实践资源文件命名规范1. 布局文件命名2. 图片资源命名3. 可绘制资源命名配置文件说明1. settings.gradle - 项目设置2. local.properties - 本地配置3. gradle.properties - Gradle配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <!-- 应用权限声明 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- 应用配置 -->
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <!-- Activity声明 -->
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Service声明 -->
        <service android:name=".MyService" />

        <!-- Broadcast Receiver声明 -->
        <receiver android:name=".MyReceiver" />
    </application>
</manifest>

2. build.gradle - 构建配置

// 项目级 build.gradle
buildscript {
    ext {
        kotlin_version = '1.8.0'
        compileSdkVersion = 33
        minSdkVersion = 21
        targetSdkVersion = 33
    }

    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}
// 模块级 build.gradle (app/build.gradle)
plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-kapt'  // Kotlin注解处理
}

android {
    namespace 'com.example.myapp'
    compileSdk 33

    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled true      // 开启混淆
            shrinkResources true    // 缩减资源
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        debug {
            debuggable true
            applicationIdSuffix ".debug"  // 调试版后缀
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }

    kotlinOptions {
        jvmTarget = '11'
    }

    buildFeatures {
        viewBinding true      // 启用ViewBinding
        dataBinding true      // 启用DataBinding
        compose true          // 启用Jetpack Compose
    }
}

dependencies {
    // Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.9.0'

    // UI
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

    // Architecture Components
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.0'

    // Navigation
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'

    // Network
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0'

    // Image Loading
    implementation 'com.github.bumptech.glide:glide:4.14.2'

    // Database
    implementation 'androidx.room:room-runtime:2.5.0'
    kapt 'androidx.room:room-compiler:2.5.0'

    // Test
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

3. 资源文件详解

colors.xml - 颜色定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- 主色调 -->
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>

    <!-- 文本颜色 -->
    <color name="text_primary">#212121</color>
    <color name="text_secondary">#757575</color>

    <!-- 背景色 -->
    <color name="background">#FFFFFF</color>
    <color name="surface">#F5F5F5</color>

    <!-- 语义颜色 -->
    <color name="success">#4CAF50</color>
    <color name="warning">#FF9800</color>
    <color name="error">#F44336</color>
</resources>

strings.xml - 字符串资源:

<resources>
    <!-- 应用名称 -->
    <string name="app_name">我的应用</string>

    <!-- 界面文本 -->
    <string name="welcome_message">欢迎使用!</string>
    <string name="login">登录</string>
    <string name="register">注册</string>

    <!-- 格式化字符串 -->
    <string name="welcome_user">你好,%1$s!</string>
    <string name="item_count">共 %d 个项目</string>

    <!-- 复数形式 -->
    <plurals name="item_plural">
        <item quantity="one">%d 个项目</item>
        <item quantity="other">%d 个项目</item>
    </plurals>
</resources>

styles.xml - 样式定义:

<resources>
    <!-- 基础主题 -->
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorOnPrimary">@android:color/white</item>

        <!-- 状态栏 -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>

        <!-- 字体 -->
        <item name="android:fontFamily">@font/roboto</item>
    </style>

    <!-- 自定义Widget样式 -->
    <style name="Widget.MyApplication.Button" parent="Widget.MaterialComponents.Button">
        <item name="android:textSize">16sp</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="cornerRadius">8dp</item>
    </style>

    <!-- 无ActionBar主题 -->
    <style name="Theme.MyApplication.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

dimens.xml - 尺寸定义:

<resources>
    <!-- 通用尺寸 -->
    <dimen name="spacing_small">8dp</dimen>
    <dimen name="spacing_medium">16dp</dimen>
    <dimen name="spacing_large">24dp</dimen>

    <!-- 组件尺寸 -->
    <dimen name="button_height">48dp</dimen>
    <dimen name="button_corner_radius">4dp</dimen>

    <!-- 文本尺寸 -->
    <dimen name="text_size_small">12sp</dimen>
    <dimen name="text_size_medium">14sp</dimen>
    <dimen name="text_size_large">18sp</dimen>

    <!-- 图标尺寸 -->
    <dimen name="icon_size_small">24dp</dimen>
    <dimen name="icon_size_medium">32dp</dimen>
</resources>

代码包结构最佳实践

com.example.myapp/
├── activities/                  # 所有Activity
├── fragments/                   # 所有Fragment
├── adapters/                    # 所有适配器
├── viewmodels/                  # 所有ViewModel
├── models/                      # 所有数据模型
├── repositories/                # 所有仓库
├── services/                    # 所有Service
├── utils/                       # 工具类
│   ├── extensions/              # 扩展函数
│   ├── helpers/                 # 辅助类
│   └── constants/               # 常量定义
└── interfaces/                  # 接口定义

资源文件命名规范

1. 布局文件命名

activity_<模块名>.xml         # Activity布局
fragment_<模块名>.xml        # Fragment布局
item_<列表项类型>.xml        # 列表项布局
dialog_<对话框类型>.xml      # 对话框布局
layout_<组件名>.xml          # 公共布局组件

2. 图片资源命名

ic_<用途>_<颜色>_<尺寸>.png   # 图标
bg_<用途>_<状态>.png         # 背景
img_<内容描述>.png           # 图片
vector_<图标名>.xml          # 矢量图标

3. 可绘制资源命名

shape_<形状>_<颜色>.xml      # 形状
selector_<状态>.xml          # 状态选择器
layer_<层次>.xml             # 图层列表

配置文件说明

1. settings.gradle - 项目设置

// 包含的模块
include ':app'
include ':library'          // 如果有库模块

// 自定义构建缓存位置
buildCache {
    local {
        directory = new File(rootDir, 'build-cache')
        removeUnusedEntriesAfterDays = 30
    }
}

2. local.properties - 本地配置

# SDK路径
sdk.dir=/Users/username/Library/Android/sdk
# NDK路径(如果需要)
ndk.dir=/Users/username/Library/Android/sdk/ndk/25.1.8937393
# CMake路径
cmake.dir=/Users/username/Library/Android/sdk/cmake/3.22.1

3. gradle.properties - Gradle配置

# 内存设置
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m

# 并行构建
org.gradle.parallel=true
org.gradle.daemon=true

# 配置缓存
org.gradle.configurationcache=true

# 国内镜像(加速)
systemProp.http.proxyHost=mirrors.aliyun.com
systemProp.http.proxyPort=80