apply plugin: 'android' //import org.ajoberstar.grgit.* android { compileSdkVersion 19 buildToolsVersion "20" defaultConfig { minSdkVersion 14 targetSdkVersion 19 testInstrumentationRunner "android.test.InstrumentationTestRunner" } signingConfigs { release { storeFile project.hasProperty('storeFileProperty') ? file(storeFileProperty) : null storePassword project.hasProperty('storePasswordProperty') ? storePasswordProperty : "" keyAlias project.hasProperty('keyAliasProperty') ? keyAliasProperty : "" keyPassword project.hasProperty('keyPasswordProperty') ? keyPasswordProperty : "" } } buildTypes { release { //runProguard true if(signingConfigs.contains(release)) signingConfig signingConfigs.release.isSigningReady() ? signingConfigs.release : signingConfigs.debug } } lintOptions { abortOnError false } sourceSets { main { assets.srcDirs = ['assets', 'ovpnlibs/assets'] jniLibs.srcDirs = ['ovpnlibs/jniLibs'] jni.srcDirs = [] //disable automatic ndk-build } debug { assets.srcDirs = ['src/debug/assets'] } } } dependencies { androidTestCompile 'com.jayway.android.robotium:robotium-solo:5.2.1' compile 'com.jakewharton:butterknife:6.0.0+' compile 'com.intellij:annotations:12.0' } def processFileInplace(file, Closure processText) { def text = file.text file.write(processText(text)) } task checkoutStrippedIcsOpenVPN ( type: Copy ) { //FIXME Checkout ics-openvpn-stripped from branch "ics-openvpn-upstream" //grgit = Grgit.open(project.file('../')) from '../../bitmask_android_tmp/ics-openvpn-stripped' into '../ics-openvpn-stripped' } task copyIcsOpenVPNClasses( type: Copy, dependsOn: 'checkoutStrippedIcsOpenVPN' ) { from ('../ics-openvpn-stripped/main/') { include '**/*.java' include '**/*.aidl' include '**/strings.xml' include '**/log_*.xml' include '**/vpnstatus.xml' include '**/styles.xml' include '**/dimens.xml' include '**/logmenu.xml' rename 'strings.xml', 'strings-icsopenvpn.xml' filter { line -> line.replaceAll('de.blinkt.openvpn.R', 'se.leap.bitmaskclient.R') } filter { line -> line.replaceAll('de.blinkt.openvpn.BuildConfig', 'se.leap.bitmaskclient.BuildConfig') } filter { line -> line.replace('package de.blinkt.openvpn;', 'package de.blinkt.openvpn;\n\nimport se.leap.bitmaskclient.R;') } filter { line -> line.replace('package de.blinkt.openvpn.fragments;', 'package de.blinkt.openvpn.fragments;\n\nimport se.leap.bitmaskclient.R;') } filter { line -> line.replaceAll('.*name="app".*', '') } } into '.' } // thanks to http://pleac.sourceforge.net/pleac_groovy/fileaccess.html task removeDuplicatedStrings( dependsOn: 'copyIcsOpenVPNClasses' ) << { new File('app').eachFileRecurse { if(it.name.equals('strings.xml')) { def ics_openvpn_file = file(it.absolutePath.replace('strings.xml', 'strings-icsopenvpn.xml')) if(ics_openvpn_file.exists()) { def ics_openvpn_strings_names = (new XmlParser()).parse(ics_openvpn_file) def current_file = it ics_openvpn_strings_names.string.each { processFileInplace(current_file) { text -> text.replaceAll('.*name=\"' + it.attribute('name') + '\".*(\n)*.*string>.*\n+', '') } } } } } } task mergeUntranslatable( type: Copy, dependsOn: 'removeDuplicatedStrings') { from ('../ics-openvpn-stripped/main/') { include '**/untranslatable.xml' rename 'untranslatable.xml', 'untranslatable-icsopenvpn.xml' } into '.' def bitmask_untranslatable = file('src/main/res/values/untranslatable.xml') def ics_openvpn_untranslatable = new File(bitmask_untranslatable.path.replace('untranslatable.xml', 'untranslatable-icsopenvpn.xml')) ics_openvpn_untranslatable.createNewFile() def string_continuation = false; ics_openvpn_untranslatable.eachLine { text -> if(text.contains('string name=')) { if(!bitmask_untranslatable.text.contains(text)) bitmask_untranslatable << text if(text.contains('')) string_continuation = true } else if(string_continuation) { bitmask_untranslatable << text } if(text.contains('')) { string_continuation = false bitmask_untranslatable << System.getProperty("line.separator") } } bitmask_untranslatable.write(bitmask_untranslatable.text.replaceAll("", "")) bitmask_untranslatable << "" delete ics_openvpn_untranslatable } task updateIcsOpenVpn( type: Copy, dependsOn: 'mergeUntranslatable') { from('../ics-openvpn-stripped/main') { include 'openvpn/**' include 'lzo/**' include 'jni/**' include 'misc/**' include 'ovpn3/**' include 'snappy/**' } into '.' } task buildNative ( type: Exec ) { commandLine 'sh', 'misc/build-native.sh', 'USE_BREAKPAD=0', '-j 8' } preBuild.dependsOn buildNative //assembleRelease.dependsOn connectedCheck afterEvaluate { //installRelease.dependsOn connectedCheck }