¿Qué debería estar en mi .gitignore para un proyecto de Android Studio?

¿Qué files deberían estar en mi .gitignore para un proyecto de Android Studio?

He visto varios ejemplos que incluyen .iml pero los documentos IntelliJ dicen que .iml debe estar incluido en su control de origen.

Actualizado a Android Studio 3.0. Comparta los elementos que faltan en los comentarios.

Una respuesta tardía, pero ninguna de las respuestas aquí y aquí fue correcta para nosotros …

Entonces, aquí está nuestro file de 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 # Android Studio *.iml .idea #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. .gradle build/ .navigation captures/ output.json #Since Android Studio 3.0 #NDK obj/ .externalNativeBuild 

Desde Android Studio 2.2 y hasta 3.0, se crean nuevos proyectos con este file gitignore:

 *.iml .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build /captures .externalNativeBuild 

Desaprobado : para un formatting de proyecto anterior, agregue esta sección a su file de gitignore:

 /*/out /*/*/build /*/*/production *.iws *.ipr *~ *.swp 

Este file debe estar ubicado en la carpeta raíz del proyecto y no dentro de la carpeta del module del proyecto.

Editar notas:

  1. Desde la versión 0.3+, parece que puede confirmar y enviar files * .iml y build.gradle . Si su proyecto se basa en Gradle: en el nuevo cuadro de dialog abrir / importar, debe marcar la checkbox "use auto import" y marcar el button de opción "use default gradle wrapper (recommended)" . Todas las routes son ahora relativas, como sugirió @George.

  2. Respuesta actualizada según @ 128KB adjunta fuente y sugerencias de @Skela

Sobre la base de mi .gitignore Android normal, y después de leer la documentation en el website de Intellij IDEA y leer publicaciones en StackOverflow, he construido el siguiente file:

 # built application files *.apk *.ap_ # files for the dex VM *.dex # Java class files *.class # built native files (uncomment if you build your own) # *.o # *.so # generated files bin/ gen/ # Ignore gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Eclipse Metadata .metadata/ # Mac OS X clutter *.DS_Store # Windows clutter Thumbs.db # Intellij IDEA (see https://intellij-support.jetbrains.com/entries/23393067) .idea/workspace.xml .idea/tasks.xml .idea/datasources.xml .idea/dataSources.ids 

También tenga en count que, como se señaló, la sección de files nativos incorporados es principalmente útil cuando está construyendo su propio código nativo con el NDK de Android. Si, por otro lado, está utilizando una biblioteca de terceros que incluye estos files, puede eliminar estas líneas (* .o y * .so) de su .gitignore.

Actualizado el 7/2015:

Aquí está la fuente definitiva de JetBrains


Formato de proyecto basado en directory (directory .idea)

Este formatting es utilizado por todas las versiones recientes de IDE por defecto. Esto es lo que necesita compartir:

  • Todos los files del directory .idea en la raíz del proyecto, excepto los files workspace.xml y tasks.xml que almacenan configuraciones específicas del usuario
  • Todos los files del module .iml que pueden ubicarse en diferentes directorys de modules (se aplica a IntelliJ IDEA)

Tenga cuidado de compartir lo siguiente:

  • Artefactos de Android que producen una compilation firmada (contendrán passwords de almacén de keys)
  • En IDEA 13 y anteriores dataSources.ids , datasources.xml puede contener passwords de database. IDEA 14 resuelve este problema .

Puede considerar no compartir lo siguiente:

  • file gradle.xml, mira esta discusión
  • carpeta de dictionarys del usuario (para evitar conflictos si otro desarrollador tiene el mismo nombre)
  • Archivos XML en .idea/libraries en caso de que se hayan generado a partir del proyecto Gradle

Formato de proyecto henetworkingado ( .ipr / .iml / .iws )

  • Comparta el file .ipr del proyecto y todos los files del module .iml , no comparta el file .iws ya que almacena configuraciones específicas del usuario

Si bien estas instrucciones son para IntelliJ IDEA, son verdaderas al 100% para Android Studio.


Aquí hay un fragment de .gitignore que incorpora todas las reglas anteriores:

 # Android Studio / IntelliJ IDEA *.iws .idea/libraries .idea/tasks.xml .idea/vcs.xml .idea/workspace.xml 

No estoy de acuerdo con todas estas respuestas. La siguiente configuration funciona muy bien para la aplicación de nuestra organización.

Yo ignoro:

  • /build
  • /.idea (con posibles excepciones, ver comentarios en la respuesta de dalewking )
  • *.iml
  • local.properties

Creo que casi todos están de acuerdo con /build .

Me cansé de ver constantemente posts sobre los diversos files library.xml que Gradle crea o elimina en /.idea . El build.gradle se ejecutará en el local del desarrollador cuando primero verifique el proyecto, entonces, ¿por qué esos files XML deben ser versionados? Android Studio también generará el rest de /.idea cuando un desarrollador crea un proyecto usando Check out from Version Control , entonces, ¿por qué hay algo en esa carpeta que necesita ser versionado?

Si el *.iml está versionado, un nuevo usuario tendrá que nombrar el proyecto exactamente igual que cuando se cometió. Como este es también un file generado, ¿por qué versionarlo en primer lugar?

Los files local.properties apuntan a una ruta absoluta en el sistema de files para el SDK, por lo que definitivamente no se debe versionar.

Edición 1 : Se agregó .gradle para ignorar las cosas del caching de gradle que no deberían versionarse (gracias Vasily Makarov ).

Editar 2 : Se agregó .DS_Store ahora que estoy usando Mac. Esta carpeta es específica de Mac y no debe ser versionada.

Nota adicional : probablemente también desee agregar un directory para colocar sus keys de firma al comstackr una versión de lanzamiento.

Para la conveniencia de copyr / pegar :

 .gradle /build /.idea *.iml local.properties .DS_Store 

Yo uso este .gitignore. Lo encontré en: http://th4t.net/android-studio-gitignore.html

 *.iml *.iws *.ipr .idea/ .gradle/ local.properties */build/ *~ *.swp 

En el caso de Android Studio, los únicos files que se deben save en el control de la versión son los files necesarios para comstackr la aplicación desde la línea de command usando gradle. Entonces puedes ignorar:

  • * .iml
  • .idea
  • build

Sin embargo, si guarda cualquier configuration IDE, como la configuration de estilo de código personalizado, se guardan en la carpeta .idea. Si desea esos cambios en el control de la versión, también debe save los files IDEA (* .iml y .idea).

Mi consejo sería también no ignorar la carpeta .idea.

Importé un proyecto de Eclipse basado en Git para Android Studio y todo salió bien. Más tarde quise importar este proyecto con Git (como la primera vez) a otra máquina con Android Studio, pero eso no funcionó. Android Studio cargó todos los files pero no pudo "ver" el proyecto como un proyecto. Solo podría abrir files Git.

Al importar el proyecto por primera vez (desde Eclipse a Android Studio) mi viejo .gitignore fue sobrescrito y el nuevo se veía así:

  • .idea / .name
  • .idea / compiler.xml
  • .idea / copyright / profiles_settings.xml
  • .idea / encodings.xml
  • .idea / libraries / libs.xml
  • .idea / misc.xml
  • .idea / modules.xml
  • .idea / scopes / scope_settings.xml
  • .idea / vcs.xml
  • .idea / workspace.xml

Así que traté de usar un gitignore vacío y ahora funcionó. El otro Android Studio podría cargar los files y el Proyecto. Supongo que algunos files no son importantes (profiles_settings.xml) para Git e importar, pero estoy contento de que funcionó.

NO HAY NECESIDAD de agregar al control fuente alguno de los siguientes:

 .idea/ .gradle/ *.iml build/ local.properties 

Entonces puede configurar hgignore o gitignore en consecuencia.

La primera vez que un desarrollador clona el control de origen puede ir:

  1. Abra Android Studio
  2. Proyecto de import
  3. Busque el build.gradle dentro del repository clonado y ábralo

Eso es todo

PD: Android Studio obtendrá, a través de maven, el complemento de Gradle suponiendo que tu build.gradle se parece a esto:

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.2' } } allprojects { repositories { mavenCentral() } } 

Android studio generará el contenido de la carpeta .idea (incluido workspace.xml, que no debe estar en control de fuente porque se genera ) y la carpeta .gradle.

Este enfoque es amigable con Eclipse en la forma en que el control de fuente realmente no sabe nada acerca de Android Studio. Android Studio solo necesita build.gradle para importar un proyecto y generar el rest.

Admití la confirmación de la carpeta .idea (sin include workspace.xml y tasks.xml ). Pero estoy empezando a llegar a la conclusión de que los files .iml deben ignorarse.

Aquí está el problema:

Abra un proyecto en un directory llamado "foo" por ejemplo y obtendrá foo.iml y todo parece estar bien. El problema es que si simplemente renombro el directory a foo2 (o lo clono en otro nombre de directory) cuando intentas abrir el proyecto en Android Studio obtendrás tres cosas:

  • Un nuevo file iml llamado foo2.iml
  • El file iml para su proyecto Android se cambiará para apuntar ahora a foo2 como su padre
  • .idea / modules.xml tendrá una línea agregada para foo2.iml para que tenga tanto el antiguo file iml como el del nuevo directory

No puedo encontrar ninguna forma de evitar que Android Studio realice esta generación de files iml cuando el proyecto se almacena en un directory diferente. Agregarlos al control de fuente va a causar problemas. Por lo tanto, creo que quizás deberíamos ignorar los files * .iml y .idea/modules.xml

Para Android Studio 2.3 (lo usé también para 2.1 y 2.2) uso lo siguiente:

.gitignore

 .gradle .idea *.iml gradle.properties local.properties .DS_Store build 

Carpeta del proyecto Gradle

Lo único que debería estar en su carpeta de proyecto (Gradle) después de la clonación del repository es esta estructura (al less para los casos de uso que he encontrado hasta ahora):

 /app /gradle .gitignore build.gradle build.properties gradlew gradle.bat settings.gradle 

es la mejor manera de generar .gitignore aquí: http://www.gitignore.io/

Depende de cómo se mantenga el formatting de su proyecto:

Tiene dos opciones: 1) Formato basado en directory (tendrá una carpeta .idea que contiene los files específicos del proyecto) 2) Formato basado en file (los files de configuration son .iws y .ipr)

Ref: http://www.jetbrains.com/idea/webhelp/project.html

Los files comprometidos con el control de versiones dependen de lo anterior: 1) incluyen la carpeta .idea para control de versiones, excluyen workspace.xml y tasks.xml 2) control de versiones .ipr y todos los files del module .iml, excluyen el file .iws como almacena configuraciones específicas del usuario.

Ref: https://intellij-support.jetbrains.com/entries/23393067

A partir de Android Studio 0.8.4, el file .gitignore se genera automáticamente al iniciar un nuevo proyecto. Por defecto contiene:

 .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store /build 

Básicamente cualquier file que se regenera automáticamente.

Una buena testing es clonar su repository y ver si Android Studio puede interpretar y ejecutar su proyecto de inmediato (generando lo que falta).
De lo contrario, encuentre lo que falta y asegúrese de que no se ignore, sino que se agregue al repository.

Dicho esto, puedes tomar ejemplo en files .gitignore existentes, como el de Android .

 # 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 # Eclipse project files .classpath .project # Proguard folder generated by Eclipse proguard/ # Intellij project files *.iml *.ipr *.iws .idea/ 

Soy kosher al agregar los files .iml y Intellij sez para agregar la carpeta .idea, pero ignoro .idea / workspace.xml y .idea / tasks.xml, pero ¿qué pasa con .idea / libraries /?

No veo cómo tiene sentido agregar esto. Tiene una list de files XML que enumeran las bibliotecas que se supone que el proyecto Android Studio debe conocer. Se supone que estos provienen de dependencies definidas de build.gradle, no de un file de proyecto IDE.

También el contenido de uno de estos files se ve así:

 <component name="libraryTable"> <CLASSES> <root url="jar://$USER_HOME$/.gradle/caches/artifacts-26/filestore/com.example/example/etc...jar!"/> 

No tiene sentido cometer esto. ¿Qué pasa si el usuario especificó un directory de inicio diferente para gradle, o si utilizan una versión de gradle diferente, la ruta en .gradle/caches/artifacts-xxx va a ser diferente para ellos (es decir, artifacts- el número adjunto en el extremo relacionarse con la versión de la versión gradle que está utilizando.) Estos paths no son universales, y sin embargo, el consejo es verificar todo esto?

Sé que este es un tema antiguo y ciertamente hay muchas opciones, pero realmente prefiero el gibo de Simon Whitaker. Es súper fácil de usar, multiplataforma (mac, * nix y windows), y utiliza el repository github gitignore por lo que (básicamente) siempre está actualizado.

Asegúrese de que su caching local esté actualizado:

  $ gibo --upgrade From https://github.com/github/gitignore * branch master -> FETCH_HEAD Current branch master is up to date. 

Busque el idioma / tecnología que necesita:

  $ gibo --search android Android 

Muestre el file .gitignore:

  $ gibo Android ### Android # Built application files *.apk *.ap_ # Files for the Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log 

Ahora, agréguelo al file .gitignore de su proyecto:

  $ gibo Android >> .gitignore 

(Asegúrese de utilizar >> para anexar al file .gitignore de su proyecto; uno > lo sobrescribirá, como lo he hecho muchas veces por crash).

Sé que esto no responde la pregunta exacta del OP, ¡pero el uso de gibo lo hace para que ya no tengas que pensar más en 'la cuestión'! .. ¡es agradable! 😉

Para tener una mejor idea, todo lo que necesita son los siguientes files

  • aplicación
  • build.gradle
  • settings.gradle

Estructura de proyecto básica de Android

Puede poner todo lo demás en el file .gitignore. Todos los cambios de su aplicación se encuentran principalmente en estos files y carpetas. El rest que ve en un proyecto básico son los files de compilation de Gradle o los files de configuration de Android Studio.

Si está utilizando Android Studio, puede usar "Importar proyecto" para build con éxito el proyecto. Alternativamente, puede crear usando la línea de command, siga Construyendo Proyectos de Android con Gradle .

Lo mejor es agregar la list .gitignore durante el time de desarrollo para evitar efectos secundarios desconocidos cuando el Control de versiones no funcione por alguna razón debido a la list pnetworkingefinida (copyr / pegar) de algún lugar. Para uno de mis proyectos, la list de ignorar es solo de:

 .gradle .idea libs obj build *.log 

A partir de Android Studio 0.8.4, el file .gitignore se genera automáticamente al iniciar un nuevo proyecto. Por defecto contiene:

 .gradle /local.properties /.idea/workspace.xml /.idea/libraries .DS_Store build/ /captures 

Estoy de acuerdo con esta afirmación, sin embargo, modifico este file para cambiar / comstackr para comstackr / (Esto includeá / comstackr y / app / compilation). Así que no termino con todos los files en la aplicación / compilation en mi repository.

Tenga en count también que si importa un proyecto de Eclipse, el .gitignore no se copyrá, o se creará "automágicamente" para usted.

Combino files .gitignore de Github

  • Android.gitignore
  • JetBrains.gitignore
 ### Github Android.gitignore ### # Built application files *.apk *.ap_ # Files for the Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ ### Github JetBrains.gitignore ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio *.iml ## Directory-based project format: .idea/ # if you remove the above rule, at least ignore the following: # User-specific stuff: # .idea/workspace.xml # .idea/tasks.xml # .idea/dictionaries # Sensitive or high-churn files: # .idea/dataSources.ids # .idea/dataSources.xml # .idea/sqlDataSources.xml # .idea/dynamic.xml # .idea/uiDesigner.xml # Gradle: # .idea/gradle.xml # .idea/libraries # Mongo Explorer plugin: # .idea/mongoSettings.xml ## File-based project format: *.ipr *.iws ## Plugin-specific files: # IntelliJ /out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties 

Lea: Soporte de JetBrains: Cómo administrar proyectos bajo los Sistemas de control de versiones

Github maintains useful gitignore items for various kinds of projects. Here is the list of useful gitignore items for android projects.

 # Built application files *.apk *.ap_ # Files for the ART/Dalvik VM *.dex # Java class files *.class # Generated files bin/ gen/ out/ # Gradle files .gradle/ build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Android Studio Navigation editor temp files .navigation/ # Android Studio captures folder captures/ # Intellij *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/libraries # Keystore files *.jks # External native build folder generated in Android Studio 2.2 and later .externalNativeBuild # Google Services (eg APIs or Firebase) google-services.json # Freeline freeline.py freeline/ freeline_project_description.json 

Android Gitignore in github

This official documentation from JetBrains Support says the following should be included:

 All files under .idea directory except workspace.xml and tasks.xml because they store specific user settings All the *.iml files that can be located in different module directories 

It also gives other recommendations of things to be careful about.

Comstacktion:

 #built application files *.apk *.ap_ # files for the dex VM *.dex # Java class files *.class # generated files bin/ gen/ # Gradle files .gradle/ build/ /*/build/ # Local configuration file (sdk path, etc) local.properties # Proguard folder generated by Eclipse proguard/ # Log Files *.log # Windows thumbnail db Thumbs.db # OSX files .DS_Store # Eclipse project files .classpath .project # Android Studio *.iml .idea #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. .gradle build/ # Intellij project files *.iml *.ipr *.iws .idea/ 

I had problems with ignoring build files, but this seems to work 🙂

 # 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 # Eclipse project files .classpath .project # Android Studio .idea/ .gradle /*/local.properties /*/out /*/*/build /*/*/production *.iml *.iws *.ipr *~ *.swp */build */production */local.properties */out