Skip to content

Instantly share code, notes, and snippets.

@josephrodriguez
Last active August 29, 2015 14:16
Show Gist options
  • Save josephrodriguez/55f0ce998f85668e94d3 to your computer and use it in GitHub Desktop.
Save josephrodriguez/55f0ce998f85668e94d3 to your computer and use it in GitHub Desktop.
Tasks to configure assets with Gradle and Continous Integration on Android deployments.
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserFactory
task findAssetsFolderPath(type: FindXmlElementAttributeTask){
inputFile file("$project.name" + ".iml")
charset 'utf-8'
elementName 'option'
attributeName 'value'
filters = [ name : 'ASSETS_FOLDER_RELATIVE_PATH']
}
task copyAssetFiles(dependsOn: findAssetsFolderPath) << {
def folder = file(findAssetsFolderPath.attributeValue)
if(!folder.exists()){
folder.mkdirs()
}
fileTree (dir: findAssetsFolderPath.attributeValue).visit { def asset ->
asset.file.delete()
}
fileTree( dir: "assets/$env").each{ asset ->
copy{
from asset
into findAssetsFolderPath.attributeValue
}
}
}
task assembleArtifact(dependsOn:[ clean, copyAssetFiles, assembleRelease ]) << {
println "Assembled artifact for $env environment."
}
copyAssetFiles.mustRunAfter clean
assembleRelease.mustRunAfter copyAssetFiles
class FindXmlElementAttributeTask extends DefaultTask{
@Input
def inputFile, charset, elementName, attributeName, filters
@TaskAction
def action(){
ext.attributeValue = null
def factory = XmlPullParserFactory.newInstance()
factory.setNamespaceAware(true)
def parser = factory.newPullParser()
def rawXml = new StringReader(inputFile.getText(charset))
parser.setInput(rawXml)
def eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG && parser.getName() == elementName) {
def successful = true
for (def filter : filters){
if(successful){
def value = parser.getAttributeValue(null, filter.key)
successful &= filter.value == value
}
}
if(successful){
ext.attributeValue = parser.getAttributeValue(null, attributeName)
break
}
}
eventType = parser.next()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment