What should be in my .gitignore for an Android Studio project?
Asked Answered
B

32

1394

What files should be in my .gitignore for an Android Studio project?

I've seen several examples that all include .iml but IntelliJ docs say that .iml must be included in your source control.

Brett answered 24/5, 2013 at 14:4 Comment(3)
github.com/github/gitignoreTeryn
Checkout: toptal.com/developers/gitignore/api/android,androidstudioNuzzi
here: github.com/github/gitignore/blob/master/Android.gitignoreYamen
W
1430

Updated to Android Studio 3.0 Please share missing items in comments.

A late answer but this alternative answer was not right for us ...

So, here's our gitignore file:

#built application files
*.apk
*.ap_
*.aab
                           
# 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 
    
#NDK
obj/
.externalNativeBuild

Since Android Studio 2.2 and up to 3.0, new projects are created with this gitignore file:

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

Deprecated - for older project format, add this section to your gitignore file:


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

This file should be located in the project's root folder and not inside the project's module folder.

Edit Notes:

  1. Since version 0.3+ it seems you can commit and push *.iml and build.gradle files. If your project is based on Gradle: in the new open/import dialog, you should check the "use auto import" checkbox and mark the "use default gradle wrapper (recommended)" radio button. All paths are now relative as @George suggested.

  2. Updated answer according to @128KB attached source and @Skela suggestions

Woman answered 23/7, 2013 at 7:29 Comment(51)
Why do we have to import the project and manually add libs and module dependencies? Is there any way to preserve those things in the repo and when we clone the repo just do a project open?Parmesan
@Parmesan we couldn't find a way to preserve the dependencies as they're written with their full path and it's a different path for each of our team members... if you find a way, please share :)Woman
The proper way to do this is to check in the *.iml and *.ipr files, and just open them in the IDE. Why force other people on your team to recreate these files, and why allow them to use possibly incorrect settings (such as sdk version)?Empathic
@SkyKelsey as for Studio 0.2.3 we tried it and it created conflicts. Every time someone made changes in his project settings, we all had to re-set ours.Woman
Yup. Everytime someone made changes you got them. That's the point of the project file. You give it out to each collaborator, and the code stye, copyright info, and many other things get replicated. What kind of things were they changing? Seems like either they shouldn't have been making those changes, or someone had to make them anyway.Empathic
@SkyKelsey I mean changes the shouldn't have been pushed.. again, from our experience, the posted gitignore file works great for us... worth the 2 minutes project setup for every team member. If you have a tested (in a team environment) better file, please share it and I'll test it.Woman
@liorry couldn't you have just used relative paths from the .iml location?Footstone
@Footstone we found that relative paths work only for some. Probably depends on if the user installed to everyone (program files) or to his user only (appData)... You are more than welcome to share a new and improved gitignore file if you have something that works!Woman
@liorry I'm sorry, I was referring to relative paths inside the iml file. I don't think it makes sense or is reasonable to force everyone on the team to create their own iml file by importing the project.Footstone
if your project is converted from an eclipse project, the directories build and production might not be where they are supposed to be so instead of /*/*/build I used "*/build" and "*/production"Nork
Another good one to exclude is .DS_Store which is generated on OSX but the OS.Facilitation
adding .idea to the git ignore file is not fit for purpose, I don't understand how this answer got that many votes. Check out Phil's answer below, thats the answer that deserves upvotes.Digitate
@Digitate this works for us as expected so we shared it. It seems like it helps others as well. If it doesn't work for you or you found one better suited to your needs, that doesn't mean this answer isn't good.Woman
@liorry , I disagree. This is the first answer other people will see, and it is massively up-voted. Due to all the things you need to do to get a project up and running after a fresh clone from git using this particular .gitignore I strongly feel this is not what most people would need. Although I guess the number of up-votes tells me otherwise, but I still don't agree. At the very least, perhaps some information stating that you most likely will have to set the project up again and it won't work out-of-the-box.Digitate
@Digitate this information is there since I posted the answer... you can verify that and see I didn't edit it. Also, When I posted my answer, there was already an answer marked as "accepted" and the OP changed the "accepted" to my answer so my answer wasn't the top one. Moreover, in Phil's answer, there's a link that if you visit there, you see people are arguing about this gitignore file as well. So Phil's answer is not the correct one as well? NO. Use what works good for your needs.Woman
@liorry, I don't mean to be rude or anything mate, please don't take it personally. The issue is, these things need to work with minimal amount of setup to be of any practical use. When you need to Import the project, and manually add module dependancies its immediately entered a realm of lunacy. When you are familiar with a project, and know these things inside-out, then there is no issue with your approach. But for a developer who is cloning the project for the first time, its just not that practical. I really am just trying to make sure that your approach does not become the norm thats all.Digitate
@Digitate None taken, really. that's OK and everyone's entitled to their own opinion. The users have both answers to choose from, my answer is very clear about the need to re-import dependencies, all that's left is for them to choose what better suits their needs... Thanks for your feedback. I'll try to find the time to take it into consideration and edit the answer if needed.Woman
I agree .DS_Store is missing. This is a good source, yet not up to date: code.google.com/p/iosched/source/browse/.gitignoreStrikebreaker
Be careful when copying the Code posted above to your .gitignore. There are some whitespaces before the statements which cause the file to not work properly. Better take the attached source!Bayou
i think it should be /*/build instead of /*/*/buildSerigraph
If you have build/ in your .gitignore file you don't really need *.class, *.dex, *.apk and *.ap_Meed
@ParampalP true for Android studio. This file is also for Eclipse.Woman
Alex Ruiz, a developer on android studio, has said *.iml files do not need to be included as it is recreated. Android studio does not necessarily follow the same recommendations as Intelli-jPolyzoarium
why include Eclipse files if this is built with Android studio?Vinnievinnitsa
Does this answer still hold in Android Studio 1.0?Innoxious
@KevinKrumwiede yes but since Android Studio 1.0, new projects are automatically added with a gitignore file. updated answer.Woman
@LiorIluz Hmmm... there are several files not in the default .gitignore that contain the absolute path to the project. You mentioned something about using relative paths. How do you do that? I've asked a question here: #27563291Innoxious
So basically, the new default .gitignore says the opposite of your previous answer: check in project and module files.Empathic
@SkyKelsey things changed... this answer has been through several changes along with the changes in the Studio project structure and the gradle version. I'm just keeping the answer updated as much as I can. If you find something wrong, please let me know so I can fix it asap.Woman
Removed app/build too and everything is perfect.Atween
Unfortunately this is still a mess. Files that contain both user-specific configurations (apparently) but also contain required information. Cant believe this couldnt be sorted out before a 1.0 release.Spitler
You should not version the .iml files unless you wan't to deal with unneeded annoyances if other users name the project differently when they check out.Unmentionable
Also, "app/app.iml" file seems to change every time I switch Android Studio from "Unit Test" build variant to "Instrumentation Test". This should disqualify at least "app/app.iml" for revision control. (Noted on Android Studio 1.1.0)Absolute
Suggest adding obj/ to ignore JNI (C/C++) object files too. Apart from that this worked perfectly for my Android Studio migration, many thanks.Drunkometer
@ReubenScratton Thanks for the input. Added. I don't have JNI files to test it with so let me know if I added obj/ incorrectly.Woman
I use this, but I found that .idea/modules.xml and .idea/gradle.xml (the latter discussed in Sky Kelsey's answer) both contain paths that are specific to my machine. It does not make sense to push these, but I am wondering whether simply removing these two will be fine or if it will imply removing other dependencies as well.Stopgap
@Stopgap you're right, but ".idea" is added to this ignore file so I don't understand why it still pushed files under this folder for you. Maybe because it's missing '/'?Woman
The top part of this answer should state that Android Studio also creates a .gitignore in the <app-name> directory which ignores <app-name>/build/. People using that part of the answer will try and emulate, so it should be complete (other answers here simply use build/ instead of /build but you can see how that may not be desirable in some cases).Sectionalize
/app/build needs to be added to .gitignore tooLattonia
@Lattonia build/ is already there and it ignores all build folders for us.Woman
oh ok I was reading the top update, where there's /build instead of build/Lattonia
Sure... it shouldn't change because of a new studio versionWoman
@LiorIluz what about libs folders in the modules. have you intentionally missed them in the git ignore file ? or do you think they should be in version control system ?Parallelepiped
@Parallelepiped If I understand you correctly, I think they should be in version control... if you add a library and import its classes, your team members will need the jar pushed as well, no?Woman
Android Studio 1.5 appears to be ignoring *.iml and /captures by default. Can anyone else confirm if this is the case?Sumption
@Sumption I can confirm that Android Studio 1.5 on PC adds *.iml* and /captures to .gitignore.Concubinage
Since Android Studio 2.2, they added .externalNativeBuild to the default .gitignore. Please update your answer...Ear
@LiorIluz you included output.json with a #Android Studio 3.0 comment in the same line. The inclusion of the comment inline with the file prevents git from actually ignoring the file (at least with Source Tree on mac). Had to separate the file and the comment into 2 lines to make it work. Thanks though!Cos
And why would you put .gradle files in the .gitignore? The app.gradle has dependencies and it and etcDuration
@LiorIluz Hi Lior, Should I ignore the gradlew file?Cashew
@Cashew don't think so. It's the Gradle Wrapper util that checks if gradle is installed so you can build your project. Better keep it.Woman
E
161

Building on my normal Android .gitignore, and after reading through documentation on the Intellij IDEA website and reading posts on StackOverflow, I have constructed the following 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

Also note that as pointed out, the built native files section is primarily useful when you are building your own native code with the Android NDK. If, on the other hand, you are using a third party library that includes these files, you may wish to remove these lines (*.o and *.so) from your .gitignore.

Elga answered 10/1, 2014 at 16:23 Comment(9)
Almost right. I don't think its a good idea to ignore *.so because you won't be able to work with projects that have linked dependancies on NDK libraries. But a very good starting point by all accounts!Digitate
@Digitate good point. I had these in there from when I was building my own native files - but I have also worked on projects that require a simple copy and paste of pre-built files. I added a note about this to the answer above.Elga
@Elga Do you have any opinions about the XML files in .idea/libraries? Should they be shared or excluded in your opinion?Cummine
@AlexLockwood I think these files should be included if the project is not dependent on another project or module. If, however, the project is dependent on a module that contains the libraries, then this file should be ignored at the project level, but not by the module.Elga
@Elga very cool and I have used this so far but a dex file slips through the cracks: /moduledirectory/build/intermediates/dex-cache/cache.xml - wouldn't it make sense to add **/build in order to exclude the build folders in the modules as well?Fidole
There is a build directory that gets created within the Application directory, for sample apps, shouldn't that be ignored too? - github.com/googlesamples/android-ActionBarCompat-BasicCalan
@SumeetPareek yes, any directories with built or generated files should be ignored.Elga
@Elga & @Skela, you should keep *.so in here (at the root .gitignore) and for those cases where you do not want to ignore *.so, do git add -f on them OR create a .gitignore in that subdirectory and add !*.so to it, to un-ignore them ONLY in that subset of the tree.Spense
It's pretty much sums up all that is required for android studio .gitignore but i would rather track .gradle file and i did it in my setupInconspicuous
E
84

Updated 7/2015:

Here is the definitive source from JetBrains


Directory based project format (.idea directory)

This format is used by all the recent IDE versions by default. Here is what you need to share:

  • All the files under .idea directory in the project root except the workspace.xml and tasks.xml files which store user specific settings
  • All the .iml module files that can be located in different module directories (applies to IntelliJ IDEA)

Be careful about sharing the following:

  • Android artifacts that produce a signed build (will contain keystore passwords)
  • In IDEA 13 and earlier dataSources.ids, datasources.xml can contain database passwords. IDEA 14 solves this problem.

You may consider not to share the following:

  • gradle.xml file, see this discussion
  • user dictionaries folder (to avoid conflicts if other developer has the same name)
  • XML files under .idea/libraries in case they are generated from Gradle project

Legacy project format (.ipr/.iml/.iws files)

  • Share the project .ipr file and all the .iml module files, don't share the .iws file as it stores user specific settings

While these instructions are for IntelliJ IDEA, they hold true 100% for Android Studio.


Here is a .gitignore snippet that incorporates all of the above rules:

# Android Studio / IntelliJ IDEA 
*.iws
.idea/libraries
.idea/tasks.xml
.idea/vcs.xml
.idea/workspace.xml
Empathic answered 26/8, 2013 at 22:45 Comment(10)
Which SDKs are supported is defined in the AndroidManifest.xml (and also by Gradle). Any SDK allowed by that setting must be ok for development. Concerning code styles: this is not something that has to be maintained in each project separately, and moreover it should be clarified independent of the IDE. Copyright headers: hopefully, these are in your code base and not in any IDE project files. Otherwise building on the commandline would simply not include them...Akkadian
@Akkadian 1) SDKs are defined at the IDE level as well. They are referenced in the Manifest, but the project file contains the actual SDK definitions. 2) Code style should be maintained AT LEAST at the project level. Ideally, everyone would write standard Java, but oh well. 3) Copyright headers are stored in the project. They are used for new file creation, and can contain macros for name, company name, project, date, etc. I recommend you check them out! In summary, the project files contain important meta information about the project that needs to be shared and controlled across the team.Empathic
@SkyKelsey thanks for the clarification. 1) the SDK should only be defined in Gradle and AndroidManifest. The SDK must not interfere. Continuous Integration is agnostic of any IDE. 2)+3) I understand that these are the only reasons for versioning IDE project files. I prefer maintaining the config export files of different IDEs in a project independent matter, on a team/company level (their own repo). BTW the .idea folder holds plugin and user specific stuff, caches libraries and there are relative paths. Maintaining .gitignore entries for that - is that worth the effort?Akkadian
I believe that the SDK needs to be defined in Android Studio for syntax highlighting. This may have changed with recent builds. It is necessary when building with IntelliJ. But if it is no longer necessary for Android Studio, there are still plenty of reasons to check the project files in. The reasons I mentioned are just the ones that spring to mind, and certainly not the only reasons. The link provided tells you what to checkin from .idea and what to leave out. I don't know if there is other stuff in there from plugins that should be left out. I still think you are doing it wrong.Empathic
A maintainer has pulled the changes to his own repo. It'll probably be pulled into master soon.Jonjona
JetBrains has deprecated DOC-1186 and put their updated recommendations in a new post: DO INCLUDE: All the files under .idea directory in the project root except the workspace.xml and tasks.xml, and all the .iml files. BE CAREFUL when sharing Android artifacts that produce a signed build (will contain keystore passwords), dataSources.ids and datasources.xml (they may contain passwords). CONSIDER EXCLUDING: gradle.xml, user dictionaries folder, and XML files under .idea/libraries (in case they are generated from Gradle project).Harbaugh
Thanks. Ugh that is a mess. I wish they had planned to separate out public and private information a little better.Empathic
That's a lovely theory but this simply doesn't work for us. We consistently end up with .iml files with entries like this: <orderEntry type="jdk" jdkName="1.6 (38)" jdkType="JavaSDK" /> Notice the number 38 that seems to constantly be being incremented. (the misc.xml file also has this trouble).Terpsichore
I would file an enhancement request with Jetbrains in that case. Personally, I get this <orderEntry type="jdk" jdkName="1.6" jdkType="JavaSDK" />. That said, this small annoyance doesn't outweigh the benefits.Empathic
I too think it makes much more sense to commit (most) of the .idea directory, and .iml. Android projects differ from other types of projects because there is configuration that is beyond just coding an app: selecting the SDK version, referencing libraries, etc. If someone wanted to work on the same project, they would have to import it, select a new target SDK version, and re-add all of the libraries and .jars. Committing the .idea avoids that.Jericajericho
K
56

Android Studio Iguana 2023.2.1

If you create a Gradle project using Android Studio the .gitignore file will contain the following:

.gitignore

*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

I would recommend ignoring the complete ".idea" directory because it contains user-specific configurations, nothing important for the build process.

Gradle project folder

The only thing that should be in your (Gradle) project folder after repository cloning is this structure (at least for the use cases I encountered so far):

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

Note: It is recommended to check-in the gradle wrapper scripts (gradlew, gradlew.bat) as described here.

To make the Wrapper files available to other developers and execution environments you’ll need to check them into version control.

Killing answered 30/6, 2016 at 12:6 Comment(5)
What about build_file_checksums.ser? If not ignored, it should not produce compile-time problems but must be deleted/reverted before you are able to -say- switch branches.Jubbah
@MassimoFrittelli In which Android Studio version was this file created?Killing
4.something. Unfortunately I am not working on that project anymore so I cannot give you precise details, but I guess that every Android Studio 4 will generate that file.Jubbah
So the gradle project folder should have the items you mentioned in the end of your answer - but what does .gradle do in the ignore?Argue
Right, I see, .gradle is a folder containing generated build files and it need not be included, just like a few other 'dot' folders. I answered my own question!Argue
U
51

I disagree with all of these answers. The following configuration is working great for our organization's app.

I ignore:

  • /build
  • /.idea (with possible exceptions, see comments in dalewking's answer)
  • *.iml
  • local.properties

I think almost everyone agrees about /build.

I got sick of constantly seeing messages about the various library.xml files that Gradle creates or deletes in /.idea. The build.gradle will run on the developers's local when they first check out the project, so why do those XML files need to be versioned? Android Studio will also generate the rest of /.idea when a developer creates a project using Check out from Version Control, so why does anything in that folder need to be versioned?

If the *.iml is versioned a new user will have to name the project exactly the same as it was when committed. Since this is also a generated file, why version it in the first place?

The local.properties files points to an absolute path on the file system for the SDK, so it definitely shouldn't be versioned.

Edit 1: Added .gradle to ignore the gradle caching stuff that should not be versioned (thanks Vasily Makarov).

Edit 2: Added .DS_Store now that I am using Mac. This folder is Mac specific and should not be versioned.

Additional note: You probably also want to add a directory to put your signing keys in when building a release version.

For copy/paste convenience:

.gradle
/build
/.idea
*.iml
local.properties
.DS_Store 
Unmentionable answered 10/7, 2014 at 14:57 Comment(7)
I agree with your answer. I also believe that neither the *.iml or .idea files should be versioned: https://mcmap.net/q/45311/-what-should-be-in-my-gitignore-for-an-android-studio-projectStrap
My vote is for your gitignore as it is very much like mine. Couple suggestions: Use build/ instead of /build to match module build dirs like app/build. Use .gradle to match gradle caching directory.Klina
I also question why the default gitignore lists /build instead of build/ I end up with all the files in app/build in my repository if I use /buildFiasco
@Fiasco I just noticed that I have another .gitignore file in my app directory that also contains /build. Is this auto generated, I can't remember? So build/ will apply to subfolders?Unmentionable
@mattblang yes .gitignore is auto generated when you create a new project. It is not created however when you import a project from say Eclipse. build/ will match all directories named "build" beneath the location of the .gitignore file. Eg. app/build will be ignored.Fiasco
Platform-specific files that are unrelated to the project, such as .DS_Store, are better ignored locally (.git/info/exclude) or globally as a per-system configuration (see core.excludesfile git setting).Ianteen
All rules in this answer are included in the default .gitignore by AndroidStudio 4.2.1 (as of 2021)Riles
G
38

I use this .gitignore. I found it at: http://th4t.net/android-studio-gitignore.html

*.iml
*.iws
*.ipr
.idea/
.gradle/
local.properties

*/build/

*~
*.swp
Girdler answered 21/5, 2013 at 10:53 Comment(2)
*/build/ is not ignoring unchanged files in my build directory. any ideas? @Solved: i had to add */*/build/ as my build folder was a couple of directories deep.Octopod
Use just build/ to ignore any file in any folder named build, no matter where in or nested under the folder the .gitignore is in. Using /build/ will only ignore a build folder directly in the top level. Using */build/ only looks for build folders nested 1 deep. Using **/build/ will look recursively - I'm not sure if it starts at the top level or 1 level deep though (if at top level, then it would be same as build/ though, so...)Apologetic
E
36

In the case of Android Studio, the only files that are required to be saved in version control are the files required to build the application from the command line using gradle. So you can ignore:

  • *.iml
  • .idea
  • build

However, if you save any IDE settings, such as custom code style settings, they get saved in the .idea folder. If you want those changes in version control, then you'd save the IDEA files as well (*.iml and .idea).

Extrabold answered 24/5, 2013 at 15:11 Comment(5)
Thanks for explaining that. From what I have read if you are going to include .idea in your project you should ignore */.idea/workspace.xml and */.idea/tasks.xmlBrett
do not ignore .idea folder for now. Gradle plugin doesn't have any 'gradle idea' task yet and import project in Android Studio is far from perfect now.Ranchman
Also if you are working in a team consider ignoring local.properties because it contains the sdk path hardcoded.Pump
@robotoaster, would you still recommend not ignoring the .idea folder?Hydromancy
@Ioeschg no longer required. if you checkout clean git repo use Import New Project and it should work fine as long as build files are present.Ranchman
P
21

My advise would be also to not ignore the .idea folder.

I've imported a Git-based Eclipse project to Android Studio and that went fine. Later, I wanted to import this project with Git (like the first time) to another machine with Android Studio, but that didn't worked. Android Studio did load all the files but wasn't able to "see" the project as a project. I only could open Git-files.

While importing the project for the first time (from Eclipse to Android Studio) my old .gitignore was overwritten and the new one looked like this:

  • .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

So, I tried to use an empty gitignore and now it worked. The other Android Studio could load the files and the Project. I guess some files are not important (profiles_settings.xml) for Git and importing but I am just happy it worked.

Peregrination answered 21/6, 2013 at 0:35 Comment(0)
A
11

It's the best way to generate .gitignore via here

Avis answered 2/6, 2014 at 0:17 Comment(5)
I can't seem to make this work for Android Studio. If I just select "android" it seems to be an Eclipse implementation. Am I doing it wrong?Honor
The only mention to Eclipse is on one line: "Proguard folder generated by Eclipse". The rest seems OK for ASFinney
@zipzit, possibly you are right. It seems the site generates .gitignore not for Android Studio as it doesn't contain .idea/.Ringhals
There is Android Studio Option tooJustification
This is a non-answer. What link is it, where is it pointing, and what should one do if the link does not work?Squalor
S
9

There is NO NEED to add to the source control any of the following:

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

So you can configure hgignore or gitignore accordingly.

The first time a developer clones the source control can go:

  1. Open Android Studio
  2. Import Project
  3. Browse for the build.gradle within the cloned repository and open it

That's all

PS: Android Studio will then, through maven, get the gradle plugin assuming that your build.gradle looks similar to this:

// 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 will generate the content of .idea folder (including the workspace.xml, which shouldn't be in source control because it is generated) and the .gradle folder.

This approach is Eclipse-friendly in the way that the source control does not really know anything about Android Studio. Android Studio just needs the build.gradle to import a project and generate the rest.

Strap answered 10/10, 2014 at 0:34 Comment(2)
Guys, those who vote negatively should provide a valid reason to do so. It might be helpful to let us/all know if we are mistaken with our answer.Strap
There is NO NEED yes there are some cases: copyright templates that need to be share across team members, for instance.Groceryman
D
8

I support the committing of .idea folder (excluding workspace.xml and tasks.xml). But I am starting to come to the conclusion that .iml files should be ignored.

Here is the issue:

Open a project in a directory named "foo" for example and you will get foo.iml and that all seems well and good. The problem is that if I simply rename the directory to foo2 (or clone it into another directory name) when you try to open the project in Android Studio you will get three things:

  • A new iml file named foo2.iml
  • The iml file for your Android project will be changed to point now to foo2 as its parent
  • .idea/modules.xml will have a line added for foo2.iml so it has both the old iml file and the one for the new directory

I can find no way to prevent Android Studio from doing this iml file generation when the project is stored in a different directory. Adding them to source control is going to cause problems. Therefore I think perhaps we should ignore *.iml files and .idea/modules.xml

Darcydarda answered 6/5, 2014 at 20:38 Comment(4)
I ignore both /.idea and .iml files. I would like to hear why the .idea folder should be committed.Unmentionable
Looking at my current project, I guess there are only 2 things I have checked in from .idea/: code style settings to enforce for the team and a user dictionary containing words specific to the project that are not real words. I started out with many files in .idea committed, but when a file starts showing up as changed for no good reason it would get added to .gitignore. My point was not so much that .idea should be checked in as it was to say .iml files and modules.xml should not be.Darcydarda
Sorry, SO took my comment before I was done with it (gotta remember that comments don't accept line breaks). Edited with the rest of my thoughts.Darcydarda
Thanks! Yeah, those files that you mentioned do make sense. I agree, the biggest headache was the library.xml files that kept triggering messages. Also, I don't understand why I keep seeing people say that *.iml files should be included, so great point there.Unmentionable
C
7

Depends on how your project format is maintained:

You have two options:

  1. Directory-based format (You will have a .idea folder which contains the project specific files)
  2. File-based format (configuration files are .iws and .ipr)

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

Files committed to version control depends on the above:

  1. Include .idea folder to version control, exclude workspace.xml and tasks.xml
  2. Version control .ipr file and all the .iml module files, exclude the .iws file as it stores user specific settings.

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

Chesney answered 30/5, 2013 at 9:9 Comment(2)
all of my projects seem to have both .idea folders and .iws filesBrett
Personally I tried following advice from JetBrains but it didn't work for me. Me and another dev are using Android Studio and we had .idea and .iml file in git. I soon found out that once you start merging commits and get to all sorts of trouble when merge tool fails to merge any of the files under .idea path. As result I added all imls and .idea to gitignore. After all Studio does a very good job of creating project structure when importing Gradle project. So now I just pay close attention to what I have in my gradle files.Candidate
K
7

Tested with Android Studio 3.0

You might need to Install .ignore plugin.

You can auto-generate the .gitignore file for Android. Right click on folder and follow

Add .gitignore file

Then Select Android from left panel and click Generate

Generate .gitignore file

Android Studio will generate .gitignore file which contains all the file need to ignore.

Taken from http://menukanows.com/how-to-add-gitignore-file-in-android-project/

Kiethkiev answered 21/12, 2017 at 8:10 Comment(0)
G
6

Basically any file that is automatically regenerated.

A good test is to clone your repo and see if Android Studio is able to interpret and run your project immediately (generating what is missing).
If not, find what is missing, and make sure it isn't ignored, but added to the repo.

That being said, you can take example on existing .gitignore files, like the Android one.

# 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/
Germanium answered 24/5, 2013 at 14:4 Comment(5)
This is incorrect. You should check in your *.iml files, and most likely .idea and *.ipr as well. The "anything that is automatically generated" part is especially wrong. Most Android projects are automatically generated after all.Empathic
The *.iml, *.idea and *.ipr are Android-Studio/IntelliJ specific. They are not needed to build the project. As they are IDE-specific, and not build-chain specific, they should probably not be checked in. Everyone can use any IDE, there is no reason to check in IntelliJ project files and not Eclipse ones, for example.Haim
If you want to work on multiple forks of the same project, or with a team where everyone uses the same IDE, or have version control of the intricate settings you use for your IDE, then yes, you should check the files in. Project files for IntelliJ are much more than simple fluff used to open your code in an editor.Empathic
why do my iml files keep showing as changed between me and my colleague? specifically external.root.project.path keeps changing under the <module/> tagTerpsichore
Using Android Studio 0.8.12 on Windows 8.1 and on OS X Mavericks with the same project, I notice that the following two files get modified and marked as changed by Git when I open the project: <project name>.iml and .idea\misc.xml. Specifically: <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> gets added or removed to/from <project name>.iml and .idea\misc.xml gets changed to due JDK install differences between the OS's.Unconventional
B
5

As of Android Studio 0.8.4 .gitignore file is generated automatically when starting new project. By default it contains:

.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
Byrdie answered 18/8, 2014 at 20:46 Comment(0)
J
5

Using the api provided by gitignore.io, you can get is automatically generated. Here is the direct-link also gitignore.io/api/androidstudio

### AndroidStudio ###
# Covers files to be ignored for android development using Android Studio.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle
.gradle/
build/

# Signing files
.signing/

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

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp

# Android Patch
gen-external-apklibs

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# NDK
obj/

# IntelliJ IDEA
*.iml
*.iws
/out/

# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*

## Plugin-specific files:

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Mongo Explorer plugin
.idea/mongoSettings.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### AndroidStudio Patch ###

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.gitignore.io/api/androidstudio
Justification answered 25/12, 2018 at 8:59 Comment(0)
C
4

I'm kosher with adding the .iml files and Intellij sez to add the .idea folder but ignore .idea/workspace.xml and .idea/tasks.xml, but what about .idea/libraries/ ?

I don't see how it makes sense to add this. It has a list of XML files that list libraries the Android Studio project is supposed to know about. These are supposed to come instead from build.gradle defined dependencies -- not an IDE project file.

Also the contents of one of these files looks like this:

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

It doesn't make sense to commit this. What if the user specified a different home dir for gradle, or if they use a different gradle version, the path under .gradle/caches/artifacts-xxx is going to be different for them (i.e. artifacts- the number appended on the end will relate to the gradle version release you are using.) These paths are not universal, and yet the advice is to check all this in?

Cephalization answered 2/10, 2013 at 16:58 Comment(0)
D
3

I know this is an old topic and there are certainly a lot of options, but I really prefer gibo by Simon Whitaker. It's super simple to use, cross-platform (mac, *nix, and windows), and uses the github gitignore repo so it is (basically) always up to date.

Make sure your local cache is up to date:

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

Search for the language/technology you need:

    $ gibo --search android
    Android

Display the .gitignore file:

    $ 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

Now, append it to your project's .gitignore file:

    $ gibo Android >> .gitignore

(Make sure you use >> to append to your project's .gitignore file; one > will overwrite it - as I've done many times on accident!)

I know this isn't answering the OP's exact question, but using gibo makes it so you pretty much don't have to think about 'the question' anymore! .. it's nice! ;)

Definiens answered 9/12, 2014 at 19:28 Comment(0)
B
3

To get a better idea, all you need are the following files

  • app
  • build.gradle
  • settings.gradle

Basic Android project structure

You could put everything else in the .gitignore file. All your app changes lies mostly in these files and folders. The rest you see in a basic project are gradle build files or Android Studio configuration files.

If you are using Android Studio, you can use "Import project" to successfully build the project. Alternatively you can build using command line, follow Building Android Projects with Gradle.

Blistery answered 21/9, 2015 at 2:24 Comment(0)
O
3

It's best to add up the .gitignore list through the development time to prevent unknown side effect when Version Control won't work for some reason because of the pre-defined (copy/paste) list from somewhere. For one of my project, the ignore list is only of:

.gradle
.idea
libs
obj
build
*.log
Overtop answered 17/11, 2015 at 20:27 Comment(0)
H
3

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 (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

Android Gitignore in github

Happiness answered 15/2, 2017 at 5:8 Comment(2)
While this link may answer the question, it is better to include the essential parts of the answer here and provide the link for reference. Link-only answers can become invalid if the linked page changes. - From ReviewPharisee
@Pharisee plausible.. I have updated the answer and put the link as referenceHappiness
M
2

I merge Github .gitignore files

### 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

Please read: JetBrains Support: How to manage projects under Version Control Systems

Mattias answered 31/8, 2015 at 10:17 Comment(1)
As of 2016, I follow this answer as the most close to our needs. ThanksGroceryman
F
1

As of Android Studio 0.8.4 .gitignore file is generated automatically when starting new project. By default it contains:

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

I agree with this statement, however I modify this file to change /build to build/ (This will include /build and /app/build) So I don't end up with all the files in app/build in my repository.

Note also that if you import a project from Eclipse, the .gitignore won't be copied, or "automagically" created for you.

Fiasco answered 5/5, 2015 at 18:33 Comment(0)
M
1

Android Studio 3.5.3

I use this for my libraries and projects and it covers most of the files that generate by android studio and other famous tools:

# Built application files
*.apk
*.ap_
*.aab

# Files for the ART/Dalvik VM
*.dex

# Generated files
bin/
gen/
out/
app/release/

# Gradle files
.gradle/
build/

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

# 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/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches

# Keystore files
# Uncomment the following lines if you do not want to check your keystore files in.
#*.jks
#*.keystore

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md

#NDK
*.so
Musing answered 30/12, 2019 at 12:51 Comment(0)
D
1

This is created using the reference of http://gitignore.io/ Where you can create the latest updated gitignore file for any project. For Android http://gitignore.io/api/androidstudio. Hope this helps. Currently I am using Android Studio 3.6.3

# Created by https://www.gitignore.io/api/androidstudio
# Edit at https://www.gitignore.io/?templates=androidstudio

### AndroidStudio ###
# Covers files to be ignored for android development using Android Studio.

# Built application files
*.apk
*.ap_

# Files for the ART/Dalvik VM
*.dex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle
.gradle/
build/

# Signing files
.signing/

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

# Proguard folder generated by Eclipse
proguard/

# Log Files
*.log

# Android Studio
/*/build/
/*/local.properties
/*/out
/*/*/build
/*/*/production
captures/
.navigation/
*.ipr
*~
*.swp

# Android Patch
gen-external-apklibs

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# NDK
obj/

# IntelliJ IDEA
*.iml
*.iws
/out/

# User-specific configurations
.idea/caches/
.idea/libraries/
.idea/shelf/
.idea/workspace.xml
.idea/tasks.xml
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
.idea/datasources.xml
.idea/dataSources.ids
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
.idea/assetWizardSettings.xml

# OS-specific files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Legacy Eclipse project files
.classpath
.project
.cproject
.settings/

# Mobile Tools for Java (J2ME)
.mtj.tmp/

# Package Files #
*.war
*.ear

# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml)
hs_err_pid*

## Plugin-specific files:

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Mongo Explorer plugin
.idea/mongoSettings.xml

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

### AndroidStudio Patch ###

!/gradle/wrapper/gradle-wrapper.jar

# End of https://www.gitignore.io/api/androidstudio
Deuteranope answered 13/5, 2020 at 10:0 Comment(0)
E
0

Compilation:

#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/
Elan answered 8/5, 2015 at 12:18 Comment(0)
D
0

To circumvent the import of all files, where Android Studio ignores the "Ignored Files" list, but still leverage Android Studio VCS, I did the following: This will use the "Ignored Files" list from Android Studio (after import! not during) AND avoid having to use the cumbersome way Tortoise SVN sets the svn:ignore list.

  1. Use the Tortoise SVN repository browser to create a new project folder directly in the repository.
  2. Use Tortoise SVN to checkout the new folder over the top of the folder you want to import. You will get a warning that the local folder is not empty. Ignore the warning. Now you have a versioned top level folder with unversioned content.
  3. Open your project from the local working directory. VCS should now be enabled automatically
  4. Set your file exceptions in File -> Settings -> Version Control -> Ignored Files
  5. Add files to SVN from Android Studio: select 'App' in Project Structure -> VCS -> Add to VCS (this will add all files, except "Ignored Files")
  6. Commit Changes

Going forward, "Ignored Files" will be ignored and you can still manage VCS from Android Studio.

Cheers, -Joost

Duchess answered 3/3, 2018 at 11:55 Comment(0)
T
0

You can auto generate .gitignore templates for any type of project on this website

Tanbark answered 20/3, 2023 at 5:44 Comment(0)
H
-1

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.

Hexateuch answered 11/12, 2014 at 16:48 Comment(1)
Why was this voted down? Vote downs with no explanation are the worst thing about SO.Hexateuch
K
-1

.gitignore from AndroidRate library

# Copyright 2017 - 2018 Vorlonsoft LLC
#
# Licensed under The MIT License (MIT)

# Built application files
*.ap_
*.apk

# Built library files
*.aar
*.jar

# Built native files
*.o
*.so

# Files for the Dalvik/Android Runtime (ART)
*.dex
*.odex

# Java class files
*.class

# Generated files
bin/
gen/
out/

# Gradle files
.gradle/
build/

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

# Windows thumbnail cache
Thumbs.db

# macOS
.DS_Store/

# Log Files
*.log

# Android Studio
.navigation/
captures/
output.json

# NDK
.externalNativeBuild/
obj/

# IntelliJ
## User-specific stuff
.idea/**/tasks.xml
.idea/**/workspace.xml
.idea/dictionaries
## Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/dynamic.xml
.idea/**/sqlDataSources.xml
.idea/**/uiDesigner.xml
## Gradle
.idea/**/gradle.xml
.idea/**/libraries
## VCS
.idea/vcs.xml
## Module files
*.iml
## File-based project format
*.iws
Kozhikode answered 16/3, 2018 at 12:18 Comment(0)
M
-1

https://github.com/github/gitignore is awesome collection

Android.gitignore

# 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/assetWizardSettings.xml
.idea/dictionaries
.idea/libraries
.idea/caches

# Keystore files
# Uncomment the following line if you do not want to check your keystore files in.
#*.jks

# External native build folder generated in Android Studio 2.2 and later
.externalNativeBuild

# Google Services (e.g. APIs or Firebase)
google-services.json

# Freeline
freeline.py
freeline/
freeline_project_description.json

# fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
fastlane/readme.md
Miran answered 17/7, 2018 at 17:1 Comment(0)
U
-3

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
Underpants answered 9/9, 2013 at 7:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.