def INITIAL_CLIENT_VERS = 8 def VERSION_CODE_BASE = 126 def VERSION_NAME = '4.4.130' def FABRIC_API_KEY = System.getenv("FABRIC_API_KEY") def GCM_SENDER_ID = System.getenv("GCM_SENDER_ID") def BUILD_INFO_NAME = "build-info.txt" boolean forFDroid = hasProperty('forFDroid') // Get the git revision we're using. Since fdroid modifies files as // part of its build process -dirty will always be added, confusing // users. So add that for the non-fdroid case. def GITREV = "git describe --tags" if (! forFDroid) { GITREV += " --dirty" } GITREV = GITREV.execute().text.trim() apply plugin: 'com.android.application' if ( FABRIC_API_KEY && hasProperty('useCrashlytics') ) { apply plugin: 'io.fabric' } repositories { maven { url 'https://maven.fabric.io/public' } } android { buildToolsVersion '23.0.3' defaultConfig { minSdkVersion 8 targetSdkVersion 23 versionCode VERSION_CODE_BASE versionName VERSION_NAME } // Rename all output artifacts to include version information applicationVariants.all { variant -> // renameArtifact(variant) // variant.buildConfigField "String", "FIELD_NAME", "\"my String\"" variant.buildConfigField "String", "FABRIC_API_KEY", "\"$FABRIC_API_KEY\"" resValue "string", "git_rev", "$GITREV" variant.buildConfigField "String", "GIT_REV", "\"$GITREV\"" // def stamp = Long.valueOf('date +\'%s\''.execute().text.trim()); def stamp = Math.round(System.currentTimeMillis() / 1000) variant.buildConfigField "long", "BUILD_STAMP", "$stamp" // FIX ME variant.buildConfigField "String", "STRINGS_HASH", "\"00000\"" variant.buildConfigField "short", "CLIENT_VERS_RELAY", "$INITIAL_CLIENT_VERS" variant.buildConfigField "boolean", "FOR_FDROID", "$forFDroid" } flavorDimensions "variant"//, "abi" productFlavors { all { buildConfigField "String", "BUILD_INFO_NAME", "\"${BUILD_INFO_NAME}\"" } xw4 { dimension "variant" applicationId "org.eehouse.android.xw4" manifestPlaceholders = [ APP_ID: applicationId ] resValue "string", "app_name", "CrossWords" resValue "string", "nbs_port", "3344" resValue "string", "invite_prefix", "/and/" buildConfigField "boolean", "WIDIR_ENABLED", "false" buildConfigField "boolean", "RELAYINVITE_SUPPORTED", "false" buildConfigField "String", "GCM_SENDER_ID", "\"$GCM_SENDER_ID\"" } xw4d { dimension "variant" minSdkVersion 8 applicationId "org.eehouse.android.xw4dbg" manifestPlaceholders = [ FABRIC_API_KEY: "$FABRIC_API_KEY", APP_ID: applicationId, ] resValue "string", "app_name", "CrossDbg" resValue "string", "nbs_port", "3345" resValue "string", "invite_prefix", "/anddbg/" buildConfigField "boolean", "WIDIR_ENABLED", "true" buildConfigField "boolean", "RELAYINVITE_SUPPORTED", "true" buildConfigField "String", "GCM_SENDER_ID", "\"\"" } // WARNING: "all" breaks things. Seems to be a keyword. Need // to figure out how to express include-all-abis // all { // dimension "abi" // versionCode 0 + VERSION_CODE_BASE // } // armeabi { // dimension "abi" // versionCode 1 + VERSION_CODE_BASE // } // x86 { // dimension "abi" // versionCode 2 + VERSION_CODE_BASE // } // armeabiv7a { // dimension "abi" // versionCode 3 + VERSION_CODE_BASE // } } signingConfigs { debug { def path = System.getenv("DEBUG_KEYSTORE_PATH") if (! path) { path = "./debug.keystore" } storeFile file(path) keyAlias "androiddebugkey" storePassword "android" keyPassword "android" } } buildTypes { release { debuggable false minifyEnabled false // PENDING // proguard crashes when I do this (the optimize part) // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { debuggable true minifyEnabled true // for testing proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // This doesn't work on marshmallow: duplicate permission error // applicationIdSuffix ".debug" } } sourceSets { // Use symlinks instead of setting non-conventional // directories here. AS doesn't respect what's set here: it'll // compile, but post-install app launch and source-level // debugging don't work. xw4 { release { jniLibs.srcDir "../libs-xw4Release" } debug { jniLibs.srcDir "../libs-xw4Debug" } } xw4d { release { jniLibs.srcDir "../libs-xw4dRelease" } debug { jniLibs.srcDir "../libs-xw4dDebug" } } } lintOptions { abortOnError false } applicationVariants.all { variant -> variant.outputs.each { output -> def newName = output.outputFile.name newName = newName.replace(".apk","-${GITREV}.apk") newName = newName.replace("app-","") output.outputFile = new File(output.outputFile.parent, newName) } } } dependencies { // Look into replacing this with a fetch too PENDING compile files('../libs/gcm.jar') compile 'com.android.support:support-v4:23.4.0' xw4dCompile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') { transitive = true; } } task mkImages(type: Exec) { workingDir '../' commandLine './scripts/mkimages.sh' } task copyStrings(type: Exec) { workingDir '../' commandLine './scripts/copy-strings.py' } task ndkSetup(type: Exec) { workingDir '../' commandLine "./scripts/ndksetup.sh", "--with-clang" } task myPreBuild(dependsOn: ['ndkSetup', 'mkImages', 'copyStrings', 'mkXml']) { } preBuild.dependsOn myPreBuild task mkXml(type: Exec) { workingDir '../' commandLine './scripts/mk_xml.py', '-o', "app/src/main/java/org/eehouse/android/xw4/loc/LocIDsData.java", '-t', "debug" } afterEvaluate { ArrayList cleanCmdLst = new ArrayList<>(["rm", "-rf"]); android.applicationVariants.all { variant -> // print "variant: " + variant.name + "\n" String BUILD = variant.getBuildType().getName() // print "type: " + BUILD + "\n" String FLAVOR = variant.getFlavorName() // print "flavor: " + variant.getFlavorName() + "\n" // print "variant: " + variant + "\n" String variantCaps = variant.name.capitalize() String nameLC = variant.getBuildType().getName().toLowerCase() String lib = "libs-${variant.name}" String ndkBuildTask = "ndkBuild${variantCaps}" task "$ndkBuildTask"(type: Exec) { workingDir '../' commandLine './scripts/ndkbuild.sh', '-j3', "BUILD_TARGET=${nameLC}", "INITIAL_CLIENT_VERS=$INITIAL_CLIENT_VERS", "VARIANT=${FLAVOR}", "NDK_LIBS_OUT=${lib}", "NDK_OUT=./obj-${variant.name}" } String compileTask = "compile${variantCaps}Ndk" tasks.getByName(compileTask).dependsOn ndkBuildTask // For clean task cleanCmdLst.add("libs-${variant.name}") cleanCmdLst.add("./obj-${variant.name}") } task cleanNDK(type: Exec) { workingDir '../' commandLine cleanCmdLst } clean.dependsOn 'cleanNDK' String copyStringsTask = "copyStringsXw4D" task "$copyStringsTask"(type: Exec) { workingDir './' environment.put('APPNAME', 'CrossDbg') commandLine 'make', '-f', '../scripts/Variant.mk', "src/xw4d/res/values/strings.xml" } preBuild.dependsOn copyStringsTask } task makeBuildAssets() { def assetsDir = android.sourceSets.main.assets.srcDirs.toArray()[0] String path = new File(assetsDir, BUILD_INFO_NAME).getAbsolutePath() String out = "git: ${GITREV}\n" String diff = "git diff".execute().text.trim() if (diff) { out += "\n" + diff } new File(path).write(out) } gradle.projectsEvaluated { build.dependsOn(makeBuildAssets) }