1360 Make abi splits, signing configs and valid release builds intrinsic to an app that applies our plugin - separate custom build logic

This commit is contained in:
Sean Mac Gillicuddy 2019-11-06 15:22:57 +00:00
parent 188252345e
commit 778fc768ae
6 changed files with 71 additions and 77 deletions

View File

@ -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"
}

View File

@ -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())
}

View File

@ -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<ApkVariantOutput>().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<PlayPublisherExtension> {
isEnabled = true
serviceAccountCredentials = File(target.rootDir, "google.json")
track = "alpha"
releaseStatus = "draft"
}
configureDependencies(target)
}

31
custom/build.gradle.kts Normal file
View File

@ -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")
}

View File

@ -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 ->

View File

@ -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