diff --git a/app/build.gradle b/app/build.gradle index 65ac8e0a3..e97066563 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,9 +1,7 @@ -import com.android.build.OutputFile import plugin.KiwixConfigurationPlugin plugins { id("com.android.application") - id("com.github.triplet.play") version("2.4.1") } apply plugin: KiwixConfigurationPlugin @@ -50,51 +48,17 @@ android { versionName generateVersionName() } - signingConfigs { - release { - storeFile file("../kiwix-android.keystore") - storePassword System.getenv("KEY_STORE_PASSWORD") ?: "000000" - keyAlias System.getenv("KEY_ALIAS") ?: "keystore" - keyPassword System.getenv("KEY_PASSWORD") ?: "000000" - } - } - buildTypes { - debug { multiDexKeepProguard file("multidex-instrumentation-config.pro") buildConfigField "boolean", "KIWIX_ERROR_ACTIVITY", "false" } release { - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.release buildConfigField "boolean", "KIWIX_ERROR_ACTIVITY", "true" } } - def abiCodes = ['arm64-v8a': 6, 'x86': 3, 'x86_64': 4, 'armeabi-v7a': 5] - def densityCodes = ['mdpi': 2, 'hdpi': 3, 'xhdpi': 4, 'xxhdpi': 5, 'xxxhdpi': 6] - splits { - density { - enable false - reset() - include "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi" - } - } - applicationVariants.all { variant -> - variant.outputs.each { output -> - def baseAbiVersionCode = abiCodes.get(output.getFilter(OutputFile.ABI)) ?: 0 - def baseDensityVersionCode = densityCodes.get(output.getFilter(OutputFile.DENSITY)) ?: 0 - output.versionCodeOverride = - (baseDensityVersionCode * 10000000) + - (baseAbiVersionCode * 1000000) + - variant.versionCode - } - } - sourceSets { androidTest { java.srcDirs += "$rootDir/core/src/sharedTestFunctions/java" @@ -103,10 +67,6 @@ android { } play { - enabled = true - serviceAccountCredentials = file("../google.json") - track = "alpha" - releaseStatus = "draft" resolutionStrategy = "fail" } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index e33c62f56..fc9d49570 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -11,10 +11,11 @@ repositories { } dependencies { - implementation("com.android.tools.build:gradle:3.5.0") + implementation("com.android.tools.build:gradle:3.5.2") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50") implementation("com.dicedmelon.gradle:jacoco-android:0.1.4") implementation("org.jlleitschuh.gradle:ktlint-gradle:8.2.0") + implementation("com.github.triplet.gradle:play-publisher:2.5.0") implementation(gradleApi()) implementation(localGroovy()) } diff --git a/buildSrc/src/main/kotlin/plugin/AppConfigurer.kt b/buildSrc/src/main/kotlin/plugin/AppConfigurer.kt index 0c40d90fc..0c7256e31 100644 --- a/buildSrc/src/main/kotlin/plugin/AppConfigurer.kt +++ b/buildSrc/src/main/kotlin/plugin/AppConfigurer.kt @@ -19,11 +19,15 @@ package plugin import Libs +import com.android.build.VariantOutput import com.android.build.gradle.AppExtension +import com.android.build.gradle.api.ApkVariantOutput +import com.github.triplet.gradle.play.PlayPublisherExtension import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.exclude import org.gradle.kotlin.dsl.project +import java.io.File class AppConfigurer { fun configure(target: Project) { @@ -31,22 +35,54 @@ class AppConfigurer { defaultConfig { vectorDrawables.useSupportLibrary = true } + signingConfigs { + create("releaseSigningConfig") { + this.storeFile = File(target.rootDir, "kiwix-android.keystore") + storePassword = System.getenv("KEY_STORE_PASSWORD") ?: "000000" + keyAlias = System.getenv("KEY_ALIAS") ?: "keystore" + keyPassword = System.getenv("KEY_PASSWORD") ?: "000000" + } + } + buildTypes { + getByName("release") { + isMinifyEnabled = true + isShrinkResources = true + signingConfig = signingConfigs.getByName("releaseSigningConfig") + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + File("${target.rootDir}/app", "proguard-rules.pro") + ) + } + } dexOptions { javaMaxHeapSize = "4g" } + val abiCodes = mapOf("arm64-v8a" to 6, "x86" to 3, "x86_64" to 4, "armeabi-v7a" to 5) splits { abi { isEnable = true reset() - include("x86", "x86_64", "armeabi-v7a", "arm64-v8a") + include(*abiCodes.keys.toTypedArray()) isUniversalApk = true } } + applicationVariants.all { + outputs.filterIsInstance().forEach { output: ApkVariantOutput -> + val abiVersionCode = abiCodes[output.getFilter(VariantOutput.FilterType.ABI)] ?: 0 + output.versionCodeOverride = (abiVersionCode * 1_000_000) + output.versionCode + } + } aaptOptions { cruncherEnabled = true } } - + target.plugins.apply("com.github.triplet.play") + target.configureExtension { + isEnabled = true + serviceAccountCredentials = File(target.rootDir, "google.json") + track = "alpha" + releaseStatus = "draft" + } configureDependencies(target) } diff --git a/custom/build.gradle.kts b/custom/build.gradle.kts new file mode 100644 index 000000000..457ef4b8d --- /dev/null +++ b/custom/build.gradle.kts @@ -0,0 +1,31 @@ +import com.android.build.gradle.internal.dsl.ProductFlavor +import plugin.KiwixConfigurationPlugin + +plugins { + android +} +plugins.apply(KiwixConfigurationPlugin::class) + +android { + defaultConfig { + applicationId = "org.kiwix" + } + + flavorDimensions("default") + + // productFlavors { + // create("customexample") { + // versionName = "2017-07" + // versionCode = 1 + // applicationIdSuffix = ".kiwixcustomexample" + // configureStrings("Test Custom App") + // } + // } +} + +apply(from = File("build_custom.gradle")) + +fun ProductFlavor.configureStrings(appName: String) { + resValue("string", "app_name", appName) + resValue("string", "app_search_string", "Search $appName") +} diff --git a/custom/build.gradle b/custom/build_custom.gradle similarity index 94% rename from custom/build.gradle rename to custom/build_custom.gradle index f6e89940c..c9d3ac187 100644 --- a/custom/build.gradle +++ b/custom/build_custom.gradle @@ -1,9 +1,6 @@ import groovy.json.JsonSlurper -import plugin.KiwixConfigurationPlugin apply plugin: 'com.android.application' -apply plugin: KiwixConfigurationPlugin - String[] archs = ['arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'] // Set custom app import directory @@ -12,7 +9,6 @@ def custom = new File("custom/src") if (project.hasProperty("customDir")) { custom = file(project.property("customDir")) } - // Set up flavours for each custom app in the directory if (custom.listFiles()) { custom.eachFile() { file -> @@ -28,15 +24,6 @@ if (custom.listFiles()) { } } android { - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - - flavorDimensions "default" - productFlavors { // Custom apps built from a json file, zim file and icon set map.each { name, directory -> diff --git a/custom/proguard-rules.pro b/custom/proguard-rules.pro deleted file mode 100644 index f1b424510..000000000 --- a/custom/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile