According to the msysgit wiki on GitHub and the related fix this error, Filename too long, comes from a Windows API limitation of file paths having 260 characters or fewer.
Resolution
To resolve this issue, run the following command from GitBash or the Git CMD prompt (as administrator):
Since I adopted Fabric as a way to monitor vital app stats such as ‘Time in App per User‘ and it’s Beta distribution platform to distribute test builds, increasing APK’s versionCode numbers became a tedious task.
I decided to simplify the things by letting Gradle to do auto versionCode increments when producing release APK’s
Our implementation of build number increments will consist of a property file named version.properties located in the root folder of our project.
The property file will contain 2 variables, one defining the version name such as “2.3” and one defining the version code such as 15
VERSION_NAME=2.3VERSION_CODE=19
VERSION_NAME=2.3
VERSION_CODE=19
In our app module build.gradle file
build.gradle
we will define a function which takes care of retrieving the a bough mentioned values from the properties file and increment the VERSION_CODE if needed.
/**
* Get's value from 'version.properties' file
* @param varName the name of the variable which value we wan't to get.
* @return the variable value.
*/
def getVersionPropertiesValue(def varName){
def propertiesFile = file('version.properties')if(!propertiesFile.canRead()){thrownew GradleException("Could not read "+ propertiesFile.name)}Properties properties =newProperties();
properties.load(newFileInputStream(propertiesFile))
def propertyValue = properties[varName]if(varName =='VERSION_CODE'){// If we are building release increment the version codeList gradleTasksNames = gradle.startParameter.getTaskNames();for(String taskName : gradleTasksNames){if(taskName.contains("Release")){
propertyValue = propertyValue.toInteger()+1
properties[varName]= propertyValue.toString()
properties.store(propertiesFile.newWriter(), null)break}}}return propertyValue
}
/**
* Get's value from 'version.properties' file
* @param varName the name of the variable which value we wan't to get.
* @return the variable value.
*/
def getVersionPropertiesValue(def varName)
{
def propertiesFile = file('version.properties')
if(!propertiesFile.canRead()) {
throw new GradleException("Could not read " + propertiesFile.name)
}
Properties properties = new Properties();
properties.load(new FileInputStream(propertiesFile))
def propertyValue = properties[varName]
if(varName == 'VERSION_CODE')
{
// If we are building release increment the version code
List gradleTasksNames = gradle.startParameter.getTaskNames();
for(String taskName : gradleTasksNames)
{
if(taskName.contains("Release"))
{
propertyValue = propertyValue.toInteger() + 1
properties[varName] = propertyValue.toString()
properties.store(propertiesFile.newWriter(), null)
break
}
}
}
return propertyValue
}
In the defaultConfig section of the gradle build script we will call this function to retrieve values for the versionName and versionCode of our app.
Now each time a release build is made, the version code will increment automatically. If we want to change the version name we can do so by changing the value of VERSION_NAME property.