示例项目 My Application1
1.所有属性
分解
.gradle
文件夹
- 8.0 :
- 通常,这种文件夹名称表示的是一个特定版本的 Gradle 缓存目录。数字
8.0
可能代表 Gradle 的版本号。Gradle 使用这些缓存目录来存储构建过程中生成的临时数据和其他缓存数据。这有助于加速构建过程,因为 Gradle 可以重用之前的构建输出而不是每次都从头开始。
- 通常,这种文件夹名称表示的是一个特定版本的 Gradle 缓存目录。数字
- buildOutputCleanup :
- 这个文件夹是用于 Gradle 的构建输出清理。Gradle 会在每次构建时检查此处的信息,以确定哪些旧的构建输出可以被安全地删除,从而节省磁盘空间。
- vcs-1 :
vcs-1
文件夹通常与版本控制系统 (Version Control System, VCS
) 相关。Gradle 可以使用这个目录来存储与版本控制相关的缓存数据。
这些目录对于项目的日常开发和运行通常是透明的。但了解它们对于诊断构建问题或清理旧的缓存数据可能是有用的。
gc.properties
文件不是 Android 或 Gradle 开发中的标准文件。然而,基于 "gc
" 的命名,这可能与 "Garbage Collection
" (垃圾回收)有关。在某些系统和应用中,特别是那些涉及到 JVM
(Java 虚拟机
)的系统,可能存在配置垃圾回收行为的属性文件。
.idea
文件夹
.gitignore
文件
.gitignore
是 Git 版本控制系统使用的一个特殊文件,它指定哪些文件或文件夹应该被 Git 忽略。这意味着在执行 Git 命令,如 git add .
或 git commit
时,被 .gitignore
列出的文件或文件夹不会被跟踪或提交。
csharp
# 默认忽略的文件
/shelf/
/workspace.xml
在开发项目时,有许多文件和文件夹是不应该被版本控制的,例如:
- 编译输出 :如
.class
、.o
、.out
文件或build/
文件夹。 - 依赖库和安装包 :如
node_modules/
(在 Node.js 项目中)或其他第三方库。 - 系统生成的文件 :如
.DS_Store
(在 macOS 中)或Thumbs.db
(在 Windows 中)。 - 私密信息:如配置文件,它们包含 API 密钥或其他敏感数据。
- IDE 生成的文件 :如前面提到的
.idea/
文件夹(由 IntelliJ IDEA 或 Android Studio 生成)。
例子
适用于 Java 项目:
csharp
# Compiled class files
*.class
# Build directory
build/
# IDE-specific files
*.iml
.idea/
# System files
.DS_Store
当你在一个新的项目中初始化 Git 仓库时,通常是个好习惯先创建一个 .gitignore
文件。为特定语言或框架生成 .gitignore
文件的模板,你可以访问如 gitignore.io 这样的网站。
注意:如果文件已经被跟踪(即之前被提交过),仅仅将其添加到 .gitignore
是不够的。你需要首先从 Git 仓库中移除它,然后再进行提交。这样,从此以后,该文件就会被 Git 忽略了。
.name
文件
csharp
My Application1
项目名称
compiler.xml
文件
compiler.xml
文件是 IntelliJ IDEA 和其衍生的 IDE(例如 Android Studio)中的一个配置文件。它保存了与编译过程相关的设置。
xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
</component>
</project>
- project :
version="4"
:这是文件的版本标记,用于 IntelliJ IDEA 或其衍生 IDE 知道如何正确地解析和使用这个文件。
- component :
name="CompilerConfiguration"
:这是一个 IDE 组件的名称,代表这个文件存储的是编译器配置信息。
- bytecodeTargetLevel :
target="17"
:这是 Java 字节码的目标版本。这意味着,当 Java 代码被编译时,生成的字节码会与 Java 17 版本兼容。这个设置非常重要,因为不同版本的 Java 虚拟机 (JVM) 可能有不同的字节码规范。如果你编译代码为更高版本的字节码,那么它可能在旧版本的 JVM 上无法运行。
这个文件的主要用途是确保你的项目使用了正确和一致的编译器设置。当你在团队中工作或将项目移至不同的开发环境时,这种一致性尤为重要。
gradle.xml
文件
这个 gradle.xml
文件是 IntelliJ IDEA 或其衍生的 IDE(如 Android Studio)用来存储与 Gradle 相关的项目配置的。在你给出的文件中,我们可以看到以下的配置:
xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="jbr-17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>
- project :
version="4"
:这是文件的版本标记,用于让 IDE 知道如何正确地解析和使用这个文件。
- component :
name="GradleSettings"
:这代表该文件中存储的是与 Gradle 相关的配置。
- option :
name="linkedExternalProjectsSettings"
:这个选项存储了外部链接的 Gradle 项目的设置。
- GradleProjectSettings :这是外部链接的 Gradle 项目的具体设置:
testRunner
:使用哪个测试运行器。GRADLE
值表示使用 Gradle 作为测试运行器。distributionType
:Gradle 分发类型。DEFAULT_WRAPPED
值意味着使用 Gradle Wrapper,这是推荐的方法,确保使用特定的 Gradle 版本来构建项目。externalProjectPath
:外部 Gradle 项目的路径,$PROJECT_DIR$
是一个变量,代表项目的根目录。gradleJvm
:用于运行 Gradle 的 Java 版本。这里设置为jbr-17
,表示使用 Java 17 版本。modules
:这个选项定义了项目中使用 Gradle 的模块。例如,整个项目 ($PROJECT_DIR$
) 和一个名为app
的模块 ($PROJECT_DIR$/app
) 都使用 Gradle。
这个文件是自动生成的,并且当你在 IDE 中更改与 Gradle 相关的设置时,它会自动更新。了解其内容可以帮助你更好地理解你的项目的构建配置,并在必要时进行手动调整。
mics.xml文件
这个 gradle.xml
文件是 IntelliJ IDEA 或其衍生的 IDE(如 Android Studio)用来存储与 Gradle 相关的项目配置的
xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
- project :
version="4"
:此属性定义了文件的版本标记,它帮助 IDE 知道如何正确地解析和使用这个文件。
- component - ExternalStorageConfigurationManager :
name="ExternalStorageConfigurationManager"
:这是一个 IDE 组件名称。enabled="true"
:此属性可能表示该项目可以访问或使用外部存储功能。
- component - ProjectRootManager :
name="ProjectRootManager"
:这是一个 IDE 组件名称,用于管理项目的根设置。version="2"
:组件的版本。languageLevel="JDK_17"
:项目使用的 Java 版本。在此例中,项目使用 Java 17。default="true"
:表示使用的 Java 版本是默认设置。project-jdk-name="jbr-17"
:项目使用的 JDK 的名称。jbr
可能是 JetBrains Runtime 的缩写,它是 IntelliJ 平台使用的 JDK 版本。project-jdk-type="JavaSDK"
:项目 JDK 的类型。<output url="file://$PROJECT_DIR$/build/classes" />
:编译后的类文件的输出目录。$PROJECT_DIR$
是项目的根目录的变量。
- component - ProjectType :
name="ProjectType"
:这是一个 IDE 组件名称。<option name="id" value="Android" />
:此设置表明这是一个 Android 项目。
workspace.xml
文件
workspace.xml
文件是 IntelliJ IDEA 或其衍生的 IDE(如 Android Studio)中的一个配置文件,用于保存有关开发者工作空间的项目特定设置。它的内容主要关注你的个人开发环境配置,而非项目的核心配置。
xml
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidLayouts">
<shared>
<config />
</shared>
</component>
<component name="AutoImportSettings">
<option name="autoReloadType" value="NONE" />
</component>
<component name="ChangeListManager">
<list default="true" id="b3146258-3691-4917-9c13-a6455047732d" name="更改" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="device_and_snapshot_combo_box_target[C:\Android\.android\avd\Pixel_3a_XL_API_34.avd]" />
<component name="ExternalProjectsData">
<projectState path="$PROJECT_DIR$">
<ProjectState />
</projectState>
</component>
<component name="ExternalProjectsManager">
<system id="GRADLE">
<state>
<task path="$PROJECT_DIR$/app">
<activation />
</task>
<projects_view>
<tree_state>
<expand>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="My Application1" type="f1a62948:ProjectNode" />
</path>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="My Application1" type="f1a62948:ProjectNode" />
<item name="app" type="2d1252cf:ModuleNode" />
</path>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="My Application1" type="f1a62948:ProjectNode" />
<item name="app" type="2d1252cf:ModuleNode" />
<item name="Tasks" type="e4a08cd1:TasksNode" />
</path>
<path>
<item name="" type="6a2764b6:ExternalProjectsStructure$RootNode" />
<item name="My Application1" type="f1a62948:ProjectNode" />
<item name="app" type="2d1252cf:ModuleNode" />
<item name="Tasks" type="e4a08cd1:TasksNode" />
<item name="other" type="c8890929:TasksNode$1" />
</path>
</expand>
<select />
</tree_state>
</projects_view>
</state>
</system>
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2WskPCh8cvwge3LK4WV6jbKEix6" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.cidr.known.project.marker": "true",
"cidr.known.project.marker": "true",
"settings.editor.selected.configurable": "AndroidSdkUpdater"
}
}]]></component>
<component name="RunManager">
<configuration name="app" type="AndroidRunConfigurationType" factoryName="Android App">
<module name="My_Application1.app.main" />
<option name="DEPLOY" value="true" />
<option name="DEPLOY_APK_FROM_BUNDLE" value="false" />
<option name="DEPLOY_AS_INSTANT" value="false" />
<option name="ARTIFACT_NAME" value="" />
<option name="PM_INSTALL_OPTIONS" value="" />
<option name="ALL_USERS" value="false" />
<option name="ALWAYS_INSTALL_WITH_PM" value="false" />
<option name="CLEAR_APP_STORAGE" value="false" />
<option name="ACTIVITY_EXTRA_FLAGS" value="" />
<option name="MODE" value="default_activity" />
<option name="CLEAR_LOGCAT" value="false" />
<option name="SHOW_LOGCAT_AUTOMATICALLY" value="false" />
<option name="INSPECTION_WITHOUT_ACTIVITY_RESTART" value="false" />
<option name="TARGET_SELECTION_MODE" value="DEVICE_AND_SNAPSHOT_COMBO_BOX" />
<option name="SELECTED_CLOUD_MATRIX_CONFIGURATION_ID" value="-1" />
<option name="SELECTED_CLOUD_MATRIX_PROJECT_ID" value="" />
<option name="DEBUGGER_TYPE" value="Auto" />
<Auto>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Auto>
<Hybrid>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Hybrid>
<Java>
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Java>
<Native>
<option name="USE_JAVA_AWARE_DEBUGGER" value="false" />
<option name="SHOW_STATIC_VARS" value="true" />
<option name="WORKING_DIR" value="" />
<option name="TARGET_LOGGING_CHANNELS" value="lldb process:gdb-remote packets" />
<option name="SHOW_OPTIMIZED_WARNING" value="true" />
<option name="ATTACH_ON_WAIT_FOR_DEBUGGER" value="false" />
<option name="DEBUG_SANDBOX_SDK" value="false" />
</Native>
<Profilers>
<option name="ADVANCED_PROFILING_ENABLED" value="false" />
<option name="STARTUP_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_ENABLED" value="false" />
<option name="STARTUP_CPU_PROFILING_CONFIGURATION_NAME" value="Java/Kotlin Method Sample (legacy)" />
<option name="STARTUP_NATIVE_MEMORY_PROFILING_ENABLED" value="false" />
<option name="NATIVE_MEMORY_SAMPLE_RATE_BYTES" value="2048" />
</Profilers>
<option name="DEEP_LINK" value="" />
<option name="ACTIVITY_CLASS" value="" />
<option name="SEARCH_ACTIVITY_IN_GLOBAL_SCOPE" value="false" />
<option name="SKIP_ACTIVITY_VALIDATION" value="false" />
<method v="2">
<option name="Android.Gradle.BeforeRunTask" enabled="true" />
</method>
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="b3146258-3691-4917-9c13-a6455047732d" name="更改" comment="" />
<created>1697528648893</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1697528648893</updated>
</task>
<servers />
</component>
</project>
以下是该文件内容的简要解释:
- AndroidLayouts:保存与 Android 布局相关的共享配置。
- AutoImportSettings :关于自动导入的设置。
autoReloadType
的值NONE
可能意味着没有自动重新加载设置。 - ChangeListManager:与版本控制更改列表管理有关的配置。例如,这里你有一个名为"更改"的更改列表。
- ExecutionTargetManager:此部分表示项目运行或调试的目标设置。看起来你选择的目标是一个特定的 Android 虚拟设备 (AVD)。
- ExternalProjectsData 和 ExternalProjectsManager:与外部项目数据和管理相关的配置。这在与 Gradle 相关的项目中特别重要。
- MarkdownSettingsMigration:与 Markdown 设置迁移有关的配置。
- ProjectId:为项目分配的唯一ID。
- ProjectViewState:项目视图的特定设置,例如是否隐藏空的中间包或显示库内容。
- PropertiesComponent:这部分可能包含各种项目特定的属性和值。
- RunManager:这是关于如何运行或调试项目的配置。在此例中,它描述了如何运行一个名为"app"的 Android 应用。
- SpellCheckerSettings:拼写检查器的设置。
- TaskManager:与 IDE 中的任务管理相关的设置。
workspace.xml
主要保存与你的个人工作区环境相关的设置。当在团队中协作时,通常建议将此文件排除在版本控制之外(例如,将其添加到 .gitignore
中),因为它包含的是开发者特定的设置,而非团队或项目的共享设置。
app
文件夹
build
文件夹
app/build
文件夹是 Android Studio 项目中非常关键的一个目录,它存储了在构建过程中生成的所有输出内容。当你使用 Android Studio 执行构建命令(如运行、调试或生成 APK)时,这个目录将被填充。
以下是 app/build
文件夹中通常可以找到的一些子目录及其内容的简述:
- intermediates :这是一个非常大的目录,包含了构建过程的大部分中间文件:
- classes:编译后的 Java 或 Kotlin 字节码。
- res:处理后的资源文件。
- manifests:处理后的 AndroidManifest.xml 文件。
- dex:转换为 DEX 格式的字节码,DEX 格式适用于 Android 设备。
- kotlin-classes:Kotlin 编译产生的类文件。
- ... 以及其他构建过程中的中间文件。
- generated:此目录包含由构建系统自动生成的源文件和资源。例如,ButterKnife 或 Dagger 这样的代码生成库可能在这里生成代码。
- outputs :构建过程的最终输出存放在这里。
- apk:生成的 APK 文件,用于在设备上安装。
- logs:与构建相关的日志。
- mapping:当你使用 ProGuard 或 R8 进行代码缩减和混淆时,这里会包含映射文件,帮助你从混淆的代码反映射到原始代码,这在解决崩溃日志时非常有用。
- tmp:构建过程中使用的临时文件。
- reports:包含与项目的各种分析相关的报告,如 Lint 报告。
- configurations:包含用于各种构建变体的缓存文件。
这只是一个大致的概述,具体的子目录和文件可能会根据你的构建配置和使用的插件或库而变化。通常,你不需要手动修改 app/build
目录下的任何内容,如果需要清理构建结果,你可以使用 Android Studio 的 "Clean Project" 选项或使用命令行运行 ./gradlew clean
。
最后,请注意,由于 app/build
目录只包含构建过程的输出,因此它应该被添加到 .gitignore
文件中,以避免将其提交到版本控制系统。
libs文件夹
在 Android 开发中,libs
文件夹(有时也称为 lib
文件夹)通常用于存放外部的 Java 库(通常是 JAR 文件)或 native 库(如 .so
文件)。这些库可能不是通过 Gradle 或 Maven 从中央存储库下载的,而是手动添加到项目中的。
以下是你可能在 libs
文件夹中找到的内容和其描述:
-
.jar 文件 :Java ARchive 文件。它们包含编译后的 Java 类,可能还包含其他资源。当你有一个没有提供通过 Gradle 依赖下载的库时,你可以手动添加 JAR 文件到
libs
文件夹,并在build.gradle
文件中声明它。例如,如果你将
example-library.jar
添加到libs
文件夹,你可以在build.gradle
中这样引用它:csharpgradleCopy code implementation files('libs/example-library.jar')
-
.so 文件 :这些是 native 库,用于 Android 的 NDK 开发。通常,
.so
文件会按其架构分布在不同的子文件夹中,例如armeabi-v7a
,arm64-v8a
,x86
, 等。如果你的项目使用 native 代码或第三方库需要这些文件,那么你可能会在
libs
文件夹中看到它们。 -
其他资源 :虽然不太常见,但有时开发者可能会在
libs
文件夹中存放其他与库相关的资源或文档。
值得注意的是,随着 Android 开发的进化和 Gradle 的集成,直接在 libs
文件夹中添加库的需要已经大大减少。大多数库现在都可以通过 Gradle 依赖直接从 Maven 中央存储库或其他存储库下载。但是,对于某些特定情况,如商业库或尚未发布到中央存储库的库,libs
文件夹仍然很有用。