apply plugin: 'com.android.application' // Global Parameters accepted // APK_NUMBER_VERSION - version number of apk // APK_VERSION - build number like #9999Z, for dev builds appended to app_version like 2.0.0 in no_translate.xml) // flavor Z : M=-master, D=-design, B=-Blackberry, MD=-main-default, MQA=-main-qt-arm, MQDA=-main-qt-default-arm, S=-sherpafy // TARGET_APP_NAME - app name // APP_EDITION - date stamp of builds // APP_FEATURES - features +play_market +gps_status -parking_plugin -blackberry -free_version -amazon // 1. To be done Filter fonts // // // // // // // Less important android { compileSdkVersion 21 buildToolsVersion "21.1.2" signingConfigs { development { storeFile file("../keystores/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } publishing { storeFile file("/var/lib/jenkins/osmand_key") storePassword System.getenv("OSMAND_APK_PASSWORD") keyAlias "osmand" keyPassword System.getenv("OSMAND_APK_PASSWORD") } } defaultConfig { minSdkVersion 9 targetSdkVersion 21 versionCode System.getenv("APK_NUMBER_VERSION") ? System.getenv("APK_NUMBER_VERSION").toInteger() : versionCode //versionName already assigned in code //versionName System.getenv("APK_VERSION")? System.getenv("APK_VERSION").toString(): versionName } lintOptions { lintConfig file("lint.xml") abortOnError false warningsAsErrors false } // This is from OsmAndCore_android.aar - for some reason it's not inherited aaptOptions { // Don't compress any embedded resources noCompress "qz" } dexOptions { jumboMode = true } sourceSets { main { manifest.srcFile "AndroidManifest.xml" jni.srcDirs = [] jniLibs.srcDirs = ["libs"] aidl.srcDirs = ["src"] java.srcDirs = ["src"] resources.srcDirs = ["src"] renderscript.srcDirs = ["src"] res.srcDirs = ["res"] assets.srcDirs = ["assets"] } free { manifest.srcFile "AndroidManifest-free.xml" } legacy { jniLibs.srcDirs = ["libgnustl"] } } flavorDimensions "version", "coreversion", "abi" productFlavors { // ABI armv7 { flavorDimension "abi" ndk { abiFilter "armeabi-v7a" } } armv5 { flavorDimension "abi" ndk { abiFilter "armeabi" } } x86 { flavorDimension "abi" ndk { abiFilter "x86" } } mips { flavorDimension "abi" ndk { abiFilter "mips" } } fat { flavorDimension "abi" } // Version free { flavorDimension "version" applicationId "net.osmand" } full { flavorDimension "version" applicationId "net.osmand.plus" } // CoreVersion legacy { flavorDimension "coreversion" } qtcore { flavorDimension "coreversion" } qtcoredebug { flavorDimension "coreversion" } } buildTypes { debug { // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' // minifyEnabled true // proguardFiles 'proguard-project.txt' signingConfig signingConfigs.development } release { // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' // minifyEnabled true //proguardFiles 'proguard-project.txt' signingConfig signingConfigs.publishing } } } def replaceNoTranslate(line) { if (line.contains("\"app_name\"") && System.getenv("TARGET_APP_NAME")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("TARGET_APP_NAME") + "<") } if (line.contains("\"app_edition\"") && System.getenv("APP_EDITION")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("APP_EDITION") + "<") } if (line.contains("\"app_version\"") && System.getenv("APK_VERSION")) { return line.replaceAll(">[^<]*<", ">" + System.getenv("APK_VERSION") + "<") } if (line.contains("\"app_version\"") && System.getenv("APK_VERSION_SUFFIX")) { // appends build number to version number for dev builds return line.replaceAll("[^<]*<", ">" + System.getenv("APP_FEATURES") + "<") } return line; } task updateNoTranslate(type: Copy) { from('.') { include 'no_translate.xml' filter { line -> replaceNoTranslate(line); } } into 'res/values/' } task collectVoiceAssets(type: Sync) { from "../../resources/voice" into "assets/voice" include "**/*.p" } task collectHelpContentsAssets(type: Sync) { from "../../help/help" into "assets/help" include "*.html" include "images/**/*.png" from "assets/" into "assets/help" include "style.css" } task collectRoutingResources(type: Sync) { from "../../resources/routing" into "src/net/osmand/router" include "*.xml" } task collectMiscResources(type: Copy) { into "src/net/osmand/osm" from("../../resources/obf_creation") { include "rendering_types.xml" } from("../../resources/poi") { include "poi_types.xml" } } task collectRenderingStylesResources(type: Sync) { from "../../resources/rendering_styles" into "src/net/osmand/render" include "*.xml" } task collectRegionsInfoResources(type: Copy) { from "../../resources/countries-info" into "src/net/osmand/map" include "regions.ocbf" } task copyStyleIcons(type: Copy) { from "../../resources/rendering_styles/style-icons/" into "res/" include "**/*.png" } task collectExternalResources << {} collectExternalResources.dependsOn collectVoiceAssets, collectHelpContentsAssets, collectRoutingResources, collectRenderingStylesResources, collectRegionsInfoResources, collectMiscResources, copyStyleIcons, updateNoTranslate // tasks.whenTaskAdded { task -> // if (task.name.startsWith("generate") && task.name.endsWith("Resources")) { // task.dependsOn collectExternalResources // } // } // Legacy core build import org.apache.tools.ant.taskdefs.condition.Os task buildOsmAndCore(type: Exec) { description "Build Legacy OsmAndCore" if (!Os.isFamily(Os.FAMILY_WINDOWS)) { commandLine "bash", file("./old-ndk-build.sh").getAbsolutePath() } else { commandLine "cmd", "/c", "echo", "Not supported" } } task cleanupDuplicatesInCore() { dependsOn buildOsmAndCore // doesn't work for legacy debug builds doLast { file("libgnustl/armeabi").mkdirs() file("libs/armeabi/libgnustl_shared.so").renameTo(file("libgnustl/armeabi/libgnustl_shared.so")) file("libgnustl/armeabi-v7a").mkdirs() file("libs/armeabi-v7a/libgnustl_shared.so").renameTo(file("libgnustl/armeabi-v7a/libgnustl_shared.so")) file("libgnustl/mips").mkdirs() file("libs/mips/libgnustl_shared.so").renameTo(file("libgnustl/mips/libgnustl_shared.so")) file("libgnustl/x86").mkdirs() file("libs/x86/libgnustl_shared.so").renameTo(file("libgnustl/x86/libgnustl_shared.so")) } } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn << [collectExternalResources, buildOsmAndCore, cleanupDuplicatesInCore] } clean.dependsOn 'cleanNoTranslate' task cleanNoTranslate() { delete ('res/values/no_translate.xml') } repositories { ivy { name = "OsmAndBinariesIvy" url = "http://builder.osmand.net" layout "pattern", { artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" } } // mavenCentral() } dependencies { compile project(path: ":OsmAnd-java", configuration: "android") compile project(":eclipse-compile:appcompat") compile fileTree( dir: "libs", include: ["*.jar"], exclude: [ "QtAndroid-bundled.jar", "QtAndroidAccessibility-bundled.jar", "OsmAndCore_android.jar", "OsmAndCore_wrapper.jar"]) // compile "com.github.ksoichiro:android-observablescrollview:1.5.0" // compile "com.android.support:appcompat-v7:21.0.3" // compile "com.github.shell-software:fab:1.0.5" legacyCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@jar" qtcoredebugCompile "net.osmand:OsmAndCore_androidNativeDebug:0.1-SNAPSHOT@aar" qtcoredebugCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" qtcoreCompile "net.osmand:OsmAndCore_androidNativeRelease:0.1-SNAPSHOT@aar" qtcoreCompile "net.osmand:OsmAndCore_android:0.1-SNAPSHOT@aar" }