¿Cómo lidiar con los files Android Gradle bajo el control de código fuente?

Tengo un problema de control de fuente donde ciertos files siguen cambiando después de sincronizar el proyecto con Gradle.

Esto es lo que típicamente sucede

  • Creo una twig de lanzamiento.
  • Gradle necesita sincronizarse, así que lo sincronizo.
  • Estos files tienen cambios al observarlos después de la synchronization:

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 

Me comuniqué con el rest de mi equipo para usar este .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/ 

Pregunta 1: ¿Confirmar los cambios anteriores?

Todos estos files coinciden */build/ especificados en .gitignore, por lo que mi instinto es eliminarlos del control de origen localmente utilizando git rm . ¿Es eso correcto?

Pregunta 2: ¿Hay algún problema al eliminar el Manifiesto o la carpeta completa de compilation?
Este: app/build/intermediates/manifests/full/debug/AndroidManifest.xml

Al eliminar toda la carpeta de compilation ( git rm app/build -r -f ) y volver a sincronizar, se crea este error:

 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) 

Pregunta 3: ¿Cómo organizar el proyecto y el equipo correctamente?

¿Qué debo hacer para organizar el proyecto correctamente? ¿Cómo procederá el rest de mi equipo también?

Respalda tus files antes de intentarlo.

Tienes dos problemas.

  1. Tiene files de compilation y files * .class comprometidos / almacenados en su repository de Git.
  2. Puede tener un problema con su file .gitignore.

Solución al problema 1:

Eliminar la carpeta de compilation. Es generado por los gradles.

La línea del estado de git

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

Está diciendo que el file que se ha comprometido en el repository de Git se ha eliminado en su copy de trabajo, lo cual está bien. Por lo tanto, sí, desea confirmar esta 'eliminación'.

Solución al problema 2: después del paso 1, los files no deseados se eliminan del repository de Git. Git Status mostrará una list de files 'agregar'. Modifique el file .gitignore para que ya no se muestren en el command de estado de git. Algo como / build / **, necesitarás ajustarlo. Como regla, no se deben comprometer files en / build con el repository de Git

Repita según sea necesario

Como regla general antes de cualquier command de agregar git, considere si es correcto o si debe includese en .gitignore

El file Manifiesto debe estar comprometido con el repository git. Pero no el de la carpeta de compilation.