Initial project import
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
import java.io.FileInputStream
|
||||
import java.util.Base64
|
||||
import java.util.Properties
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id("dev.flutter.flutter-gradle-plugin")
|
||||
}
|
||||
|
||||
val keystorePropertiesFile = rootProject.file("key.properties")
|
||||
val keystoreProperties = Properties().apply {
|
||||
if (keystorePropertiesFile.exists()) {
|
||||
load(FileInputStream(keystorePropertiesFile))
|
||||
}
|
||||
}
|
||||
val releaseSigningKeys = listOf(
|
||||
"storePassword",
|
||||
"keyPassword",
|
||||
"keyAlias",
|
||||
"storeFile",
|
||||
)
|
||||
val releaseSigningConfigured = keystorePropertiesFile.exists() &&
|
||||
releaseSigningKeys.all { !keystoreProperties.getProperty(it).isNullOrBlank() }
|
||||
|
||||
android {
|
||||
namespace = "com.nx.miaoji"
|
||||
compileSdk = flutter.compileSdkVersion
|
||||
ndkVersion = flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "com.nx.miaoji"
|
||||
minSdk = flutter.minSdkVersion
|
||||
targetSdk = flutter.targetSdkVersion
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
if (releaseSigningConfigured) {
|
||||
create("release") {
|
||||
keyAlias = keystoreProperties["keyAlias"] as String
|
||||
keyPassword = keystoreProperties["keyPassword"] as String
|
||||
storeFile = file(keystoreProperties["storeFile"] as String)
|
||||
storePassword = keystoreProperties["storePassword"] as String
|
||||
storeType = keystoreProperties.getProperty("storeType", "PKCS12")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions += "environment"
|
||||
productFlavors {
|
||||
create("internal") {
|
||||
dimension = "environment"
|
||||
applicationIdSuffix = ".internal"
|
||||
versionNameSuffix = "-internal"
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
}
|
||||
create("production") {
|
||||
dimension = "environment"
|
||||
if (releaseSigningConfigured) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {}
|
||||
}
|
||||
}
|
||||
|
||||
val dartDefines = (project.findProperty("dart-defines") as? String)
|
||||
.orEmpty()
|
||||
.split(',')
|
||||
.mapNotNull { encoded ->
|
||||
runCatching {
|
||||
String(Base64.getDecoder().decode(encoded), Charsets.UTF_8)
|
||||
}.getOrNull()
|
||||
}
|
||||
.mapNotNull { define ->
|
||||
val separator = define.indexOf('=')
|
||||
if (separator <= 0) null
|
||||
else define.substring(0, separator) to define.substring(separator + 1)
|
||||
}
|
||||
.toMap()
|
||||
|
||||
val internalReleaseRequested = gradle.startParameter.taskNames.any { requestedTask ->
|
||||
val taskName = requestedTask.substringAfterLast(':')
|
||||
taskName.contains("InternalRelease", ignoreCase = true)
|
||||
}
|
||||
if (internalReleaseRequested) {
|
||||
val expectedApiUrl = "https://lt.frp-say.com:38012"
|
||||
if (dartDefines["INTERNAL_BUILD"] != "true") {
|
||||
throw GradleException(
|
||||
"Internal release requires --dart-define=INTERNAL_BUILD=true",
|
||||
)
|
||||
}
|
||||
if (dartDefines["API_BASE_URL"] != expectedApiUrl) {
|
||||
throw GradleException(
|
||||
"Internal release requires --dart-define=API_BASE_URL=$expectedApiUrl",
|
||||
)
|
||||
}
|
||||
if (dartDefines["APP_VERSION"].isNullOrBlank()) {
|
||||
throw GradleException(
|
||||
"Internal release requires --dart-define=APP_VERSION=<build-id>",
|
||||
)
|
||||
}
|
||||
}
|
||||
val productionReleaseRequested = gradle.startParameter.taskNames.any { requestedTask ->
|
||||
val taskName = requestedTask.substringAfterLast(':')
|
||||
taskName.contains("ProductionRelease", ignoreCase = true) ||
|
||||
taskName.equals("assembleRelease", ignoreCase = true) ||
|
||||
taskName.equals("bundleRelease", ignoreCase = true)
|
||||
}
|
||||
if (productionReleaseRequested && !releaseSigningConfigured) {
|
||||
throw GradleException(
|
||||
"Production release signing is not configured. " +
|
||||
"Create frontend/android/key.properties before building productionRelease.",
|
||||
)
|
||||
}
|
||||
|
||||
if (releaseSigningConfigured) {
|
||||
val releaseStore = file(keystoreProperties["storeFile"] as String)
|
||||
if (!releaseStore.isFile) {
|
||||
throw GradleException("Configured production release keystore does not exist: $releaseStore")
|
||||
}
|
||||
}
|
||||
val stripIntegrationTestFromReleaseRegistrant = tasks.register(
|
||||
"stripIntegrationTestFromReleaseRegistrant",
|
||||
) {
|
||||
doLast {
|
||||
val registrant = file(
|
||||
"src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java",
|
||||
)
|
||||
if (!registrant.isFile) return@doLast
|
||||
val integrationTestRegistration = Regex(
|
||||
"""(?ms)^\s*try \{\r?\n\s*flutterEngine\.getPlugins\(\)\.add\(new dev\.flutter\.plugins\.integration_test\.IntegrationTestPlugin\(\)\);\r?\n\s*\} catch \(Exception e\) \{\r?\n\s*Log\.e\(TAG, "Error registering plugin integration_test,[^\r\n]*\);\r?\n\s*\}\r?\n?""",
|
||||
)
|
||||
val source = registrant.readText()
|
||||
val sanitized = source.replace(integrationTestRegistration, "")
|
||||
if (sanitized != source) registrant.writeText(sanitized)
|
||||
}
|
||||
}
|
||||
|
||||
tasks.matching {
|
||||
it.name.matches(Regex("compile.*ReleaseJavaWithJavac"))
|
||||
}.configureEach {
|
||||
dependsOn(stripIntegrationTestFromReleaseRegistrant)
|
||||
}
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation("com.google.mlkit:text-recognition-chinese:16.0.1")
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
}
|
||||
Reference in New Issue
Block a user