【问题标题】:How to deal with Android Gradle files under source control?如何处理源代码管理下的 Android Gradle 文件?
【发布时间】:2015-10-26 02:50:47
【问题描述】:

我遇到了源代码控制问题,即在将项目与 gradle 同步后,某些文件不断更改。

以下是通常发生的情况

  • 我创建了一个发布分支。
  • Gradle 需要同步,所以我同步它。
  • 在同步后观察这些文件时会发生变化:

git status

modified:   app/build/generated/source/r/debug/android/support/v7/appcompat/R.java
modified:   app/build/generated/source/r/debug/com/google/android/gms/R.java
modified:   app/build/generated/source/r/debug/obfuscated/obfuscated/R.java
deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$color.class
deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$drawable.class
deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$id.class
deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$layout.class
deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$string.class
deleted:    app/build/intermediates/classes/debug/com/google/android/gms/R$color.class
deleted:    app/build/intermediates/classes/debug/com/google/android/gms/R$drawable.class
deleted:    app/build/intermediates/classes/debug/com/google/android/gms/R$string.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/Globals.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$color.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$dimen.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$drawable.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$id.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$integer.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$layout.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$menu.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$mipmap.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$raw.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$string.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$style.class
deleted:    app/build/intermediates/classes/debug/obfuscated/obfuscated/R$styleable.class
modified:   app/build/intermediates/manifests/full/debug/AndroidManifest.xml
modified:   app/build/intermediates/symbols/debug/R.txt

我已与团队的其他成员沟通使用此 .gitignore:

#built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Windows thumbnail db
Thumbs.db

# OSX files
.DS_Store

# Eclipse project files
.classpath
.project

# Android Studio
*.iws
*.iml
.idea
.gradle
build/
*/build/

问题 1:提交上述更改?

这些文件都与 .gitignore 中指定的 */build/ 匹配,所以我的直觉是使用 git rm 在本地将它们从源代码控制中删除。对吗?

问题 2:删除 Manifest 或整个构建文件夹是否有问题?
这个:app/build/intermediates/manifests/full/debug/AndroidManifest.xml

删除整个构建文件夹 (git rm app/build -r -f) 并重新同步会产生此错误:

Error:Execution failed for task ':app:processDebugManifest'. > com.android.manifmerger.ManifestMerger2$MergeFailureException: java.io.FileNotFoundException: /Users/Obfuscated/Projects/Android/Obfuscated/app/build/intermediates/exploded-a‌​ar/com.android.support/appcompat-v7/22.2.1/AndroidManifest.xml (No such file or directory)

问题3:如何合理组织项目和团队?

我需要做些什么才能使项目正确组织?我团队的其他成员也将如何进行?

【问题讨论】:

  • 在任何深度忽略名为“build”的目录的语法是**/build/
  • 你是说使用**/build而不是*/build
  • 是的,**/build/ 会更好。

标签: android git gitignore


【解决方案1】:

在尝试之前备份您的文件。

你有两个问题。

  1. 您已将构建文件和 *.class 文件提交/存储在您的 Git 存储库中。
  2. 您的 .gitignore 文件可能存在问题。

问题一的解决方案:

删除构建文件夹。它是由 gradles 生成的。

来自 git status 的行

deleted:    app/build/intermediates/classes/debug/android/support/v7/appcompat/R$color.class

表示在 Git 存储库中提交的文件已在您的工作副本上删除,这很好。所以,是的,你确实想提交这个“删除”。

问题2的解决方案: 在第 1 步之后,不需要的文件将从 Git 存储库中删除。 Git Status 将显示“添加”文件的列表。修改 .gitignore 文件,使其不再显示在 git status 命令上。像 /build/** 这样的东西,你需要调整它。通常,/build 中的任何文件都不应提交到 Git 存储库

必要时重复

作为一般规则,在任何 git add 命令之前都要考虑这是否正确,或者是否应该将其包含在 .gitignore 中

Manifest 文件应提交到 git 存储库。但不是构建文件夹中的那个。

【讨论】:

  • 我按照您的步骤操作,然后重新同步了 gradle。然后项目不再编译给出此错误:Error:Execution failed for task ':app:processDebugManifest'. > com.android.manifmerger.ManifestMerger2$MergeFailureException: java.io.FileNotFoundException: /Users/Obfuscated/Projects/Android/Obfuscated/app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/22.2.1/AndroidManifest.xml (No such file or directory)
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
相关资源
最近更新 更多