def INITIAL_CLIENT_VERS = 9 def VERSION_CODE_BASE = 154 def VERSION_NAME = '4.4.158' def FABRIC_API_KEY = System.getenv("FABRIC_API_KEY") def BUILD_INFO_NAME = "build-info.txt" // Not all variants use the same BT_UUID. Those with the same talk to // each other def XW_UUID = '"7be0d084-ff89-4d6d-9c78-594773a6f963"' // from comms.h def XWD_UUID = '"b079b640-35fe-11e5-a432-0002a5d5c51b"' // from comms.h // AID must start with F (first 4 bits) and be from 5 to 16 bytes long def NFC_AID_XW4 = "FC8FF510B360" def NFC_AID_XW4d = "FDDA0A3EB5E5" 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() // Make CURTAG non-empty IFF we're at a tag (release build) def CURTAG = "git describe --exact-match".execute().text.trim() // print "CURTAG: " + CURTAG + "\n" apply plugin: 'com.android.application' if ( FABRIC_API_KEY && hasProperty('useCrashlytics') ) { // rm-for-fdroid apply plugin: 'io.fabric' // rm-for-fdroid } // rm-for-fdroid repositories { google() maven { url 'https://maven.fabric.io/public' } // rm-for-fdroid } android { // Specify buildToolsVersion so gradle will inform when the // default changes and .travis.yml can be kept in sync buildToolsVersion '28.0.3' ndkVersion '21.0.6113669' defaultConfig { // HostApduService requires 19. But is it a problem? minSdkVersion 14 targetSdkVersion 28 // must match ../build.gradle 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\"" // We need both of these because xwprefs.xml can't reference // the BuildConfig constant 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", "DB_NAME", "\"xwdb\"" buildConfigField "String", "BUILD_INFO_NAME", "\"${BUILD_INFO_NAME}\"" buildConfigField "boolean", "IS_TAGGED_BUILD", "${CURTAG}" == '' ? "false" : "true" resValue "string", "invite_prefix", "/and/" buildConfigField "boolean", "UDP_ENABLED", "true" buildConfigField "boolean", "REPORT_LOCKS", "false" buildConfigField "boolean", "LOG_LIFECYLE", "false" buildConfigField "String", "KEY_FCMID", "\"FBMService_fcmid\"" buildConfigField "boolean", "ATTACH_SUPPORTED", "false" } xw4NoSMS { dimension "variant" applicationId "org.eehouse.android.xw4" manifestPlaceholders = [ APP_ID: applicationId ] resValue "string", "app_name", "CrossWords" resValue "string", "nbs_port", "3344" buildConfigField "boolean", "WIDIR_ENABLED", "false" buildConfigField "String", "VARIANT_NAME", "\"Google Play Store\"" buildConfigField "int", "VARIANT_CODE", "1" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4NoSMS'] externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } xw4fdroid { dimension "variant" applicationId "org.eehouse.android.xw4" manifestPlaceholders = [ APP_ID: applicationId ] resValue "string", "app_name", "CrossWords" resValue "string", "nbs_port", "3344" buildConfigField "boolean", "WIDIR_ENABLED", "false" buildConfigField "String", "VARIANT_NAME", "\"F-Droid\"" buildConfigField "int", "VARIANT_CODE", "2" buildConfigField "boolean", "FOR_FDROID", "true" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4fdroid'] externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } xw4d { dimension "variant" buildConfigField "String", "DB_NAME", "\"xwddb\"" 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" buildConfigField "boolean", "WIDIR_ENABLED", "true" buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug\"" buildConfigField "int", "VARIANT_CODE", "3" buildConfigField "boolean", "REPORT_LOCKS", "true" buildConfigField "String", "KEY_FCMID", "\"FBMService_fcmid1\"" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4d}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4d" externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4d'] externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XWD_UUID] } xw4dNoSMS { dimension "variant" applicationId "org.eehouse.android.xw4dbg" buildConfigField "String", "DB_NAME", "\"xwddb\"" manifestPlaceholders = [ FABRIC_API_KEY: "$FABRIC_API_KEY", APP_ID: applicationId, ] resValue "string", "app_name", "CrossDbg" resValue "string", "nbs_port", "3345" buildConfigField "boolean", "WIDIR_ENABLED", "true" buildConfigField "String", "VARIANT_NAME", "\"Dev/Debug NoSMS\"" buildConfigField "int", "VARIANT_CODE", "4" buildConfigField "boolean", "REPORT_LOCKS", "true" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4d}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4d" externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4dNoSMS'] externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XWD_UUID] } xw4SMS { dimension "variant" applicationId "org.eehouse.android.xw4" manifestPlaceholders = [ APP_ID: applicationId ] resValue "string", "app_name", "CrossWords" resValue "string", "nbs_port", "3344" buildConfigField "boolean", "WIDIR_ENABLED", "false" buildConfigField "String", "VARIANT_NAME", "\"FOSS\"" buildConfigField "int", "VARIANT_CODE", "5" buildConfigField "String", "NFC_AID", "\"${NFC_AID_XW4}\"" resValue "string", "nfc_aid", "$NFC_AID_XW4" externalNativeBuild.ndkBuild.cFlags += ['-DVARIANT_xw4SMS'] externalNativeBuild.ndkBuild.arguments += ['XW_BT_UUID=' + XW_UUID] } // 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 { all { externalNativeBuild { ndkBuild.arguments += ["INITIAL_CLIENT_VERS=" + INITIAL_CLIENT_VERS] } } release { debuggable false minifyEnabled false // PENDING // proguard crashes when I do this (the optimize part) // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' resValue "bool", "DEBUG", "false" externalNativeBuild { ndkBuild.arguments += ['BUILD_TARGET=release'] } ndk { abiFilters 'armeabi-v7a', 'arm64-v8a' } } debug { debuggable true resValue "bool", "DEBUG", "true" // Drop this. Takes too long to build // minifyEnabled true // for testing proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // This doesn't work on marshmallow: duplicate permission error // applicationIdSuffix ".debug" externalNativeBuild { ndkBuild { cFlags += ['-DDEBUG'] arguments += ['BUILD_TARGET=debug'] } } ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } } } externalNativeBuild { ndkBuild { path "../jni/Android.mk" } } 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. xw4NoSMS { release { jniLibs.srcDir "../libs-xw4NoSMSRelease" } debug { jniLibs.srcDir "../libs-xw4NoSMSDebug" } } xw4d { release { jniLibs.srcDir "../libs-xw4dRelease" } debug { jniLibs.srcDir "../libs-xw4dDebug" } } xw4dNoSMS { release { jniLibs.srcDir "../libs-xw4dNoSMSRelease" } debug { jniLibs.srcDir "../libs-xw4dNoSMSDebug" } } xw4SMS { release { jniLibs.srcDir "../libs-xw4SMSRelease" } debug { jniLibs.srcDir "../libs-xw4SMSDebug" } } 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.outputFileName = newName } } } dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.core:core:1.0.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.0.0' // 2.6.8 is probably as far forward as I can go without upping my // min-supported SDK version xw4dImplementation('com.crashlytics.sdk.android:crashlytics:2.6.3@aar') { // rm-for-fdroid transitive = true // rm-for-fdroid } // rm-for-fdroid xw4dNoSMSImplementation('com.crashlytics.sdk.android:crashlytics:2.6.3@aar') { // rm-for-fdroid transitive = true // rm-for-fdroid } // rm-for-fdroid implementation 'com.google.firebase:firebase-messaging:17.3.4' // rm-for-fdroid implementation 'com.google.firebase:firebase-core:16.0.6' // rm-for-fdroid implementation 'com.github.eehouse:nbsproxy:v0.2.2' } task mkImages(type: Exec) { workingDir '../' commandLine './scripts/mkimages.sh' } task copyLocStrings(type: Exec) { workingDir '../' commandLine 'make', '-f', './scripts/copy-strings.mk' } task cleanLocStrings(type: Exec) { workingDir '../' commandLine 'make', '-f', './scripts/copy-strings.mk', 'clean' } clean.dependsOn cleanLocStrings task myPreBuild(dependsOn: ['mkImages', 'copyLocStrings', 'mkXml', 'copyStringsXw4D', 'copyStringsXw4DNoSMS']) { } 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" } task copyStringsXw4D(type: Exec) { workingDir './' environment.put('APPNAME', 'CrossDbg') commandLine 'make', '-f', '../scripts/Variant.mk', "src/xw4d/res/values/strings.xml" } task copyStringsXw4DNoSMS(type: Exec) { workingDir './' environment.put('APPNAME', 'CrossDbg') commandLine 'make', '-f', '../scripts/Variant.mk', "src/xw4dNoSMS/res/values/strings.xml" } task makeBuildAssets() { def assetsDir = android.sourceSets.main.assets.srcDirs.toArray()[0] String path = new File(assetsDir, BUILD_INFO_NAME).getAbsolutePath() String out = "git_describe: ${GITREV}\n" String HEAD = "git rev-parse HEAD".execute().text.trim() out += "HEAD: ${HEAD}\n" String date = "date".execute().text.trim() out += "date: ${date}\n" // I want the variant, but that's harder. Here's a quick hack from SO. // String target = gradle.startParameter.taskNames[0] // out += "target: ${target}\n" String diff = "git diff".execute().text.trim() if (diff) { out += "\n" + diff } new File(path).write(out) } gradle.projectsEvaluated { build.dependsOn(makeBuildAssets) } apply plugin: 'com.google.gms.google-services' // rm-for-fdroid