xwords/xwords4/android/app/build.gradle
2017-11-27 20:40:16 -08:00

295 lines
9.3 KiB
Groovy

def INITIAL_CLIENT_VERS = 8
def VERSION_CODE_BASE = 127
def VERSION_NAME = '4.4.131'
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\""
}
xw4fdroid {
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", "\"\""
}
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"
}
}
xw4fdroid {
release {
jniLibs.srcDir "../libs-xw4fdroidRelease"
}
debug {
jniLibs.srcDir "../libs-xw4fdroidDebug"
}
}
}
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
xw4Compile 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<String> 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)
}