diff --git a/{{cookiecutter.out_dir}}/android/app/build.gradle b/{{cookiecutter.out_dir}}/android/app/build.gradle deleted file mode 100644 index 3615911..0000000 --- a/{{cookiecutter.out_dir}}/android/app/build.gradle +++ /dev/null @@ -1,105 +0,0 @@ -plugins { - id "com.android.application" - id "org.jetbrains.kotlin.android" - id "dev.flutter.flutter-gradle-plugin" -} - -def localProperties = new Properties() -def localPropertiesFile = rootProject.file('local.properties') -if (localPropertiesFile.exists()) { - localPropertiesFile.withReader('UTF-8') { reader -> - localProperties.load(reader) - } -} - -def flutterVersionCode = localProperties.getProperty('flutter.versionCode') -if (flutterVersionCode == null) { - flutterVersionCode = '1' -} - -def flutterVersionName = localProperties.getProperty('flutter.versionName') -if (flutterVersionName == null) { - flutterVersionName = '1.0' -} - -android { - namespace "{{ cookiecutter.org_name_2 }}.{{ cookiecutter.package_name }}" - compileSdkVersion flutter.compileSdkVersion - - packagingOptions { - jniLibs { - useLegacyPackaging true - } - doNotStrip "*/arm64-v8a/libpython*.so" - doNotStrip "*/armeabi-v7a/libpython*.so" - doNotStrip "*/x86/libpython*.so" - doNotStrip "*/x86_64/libpython*.so" - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlinOptions { - jvmTarget = '17' - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - } - - {% set min_sdk_version = get_pyproject("tool.flet.android.min_sdk_version") %} - {% set target_sdk_version = get_pyproject("tool.flet.android.target_sdk_version") %} - - defaultConfig { - applicationId "{{ cookiecutter.org_name_2 }}.{{ cookiecutter.package_name }}" - minSdkVersion {{ min_sdk_version if min_sdk_version else "flutter.minSdkVersion" }} - targetSdkVersion {{ target_sdk_version if target_sdk_version else "flutter.targetSdkVersion" }} - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName - - println("Gradle build config:") - println(" minSdkVersion: {{ min_sdk_version if min_sdk_version else "$flutter.minSdkVersion" }}") - println(" targetSdkVersion: {{ target_sdk_version if target_sdk_version else "$flutter.targetSdkVersion" }}") - println(" versionCode: $flutter.versionCode") - println(" versionName: $flutter.versionName") - -// flet: split_per_abi {% if not cookiecutter.split_per_abi %} - ndk { - {% if cookiecutter.options.target_arch %} - abiFilters {% for arch in cookiecutter.options.target_arch %}'{{ arch }}'{% if not loop.last %}, {% endif %}{% endfor %} - {% else %} - abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64' - {% endif %} - } -// flet: end of split_per_abi {% endif %} - } - -// flet: android_signing {% if cookiecutter.options.android_signing %} - signingConfigs { - release { - keyAlias System.getenv('FLET_ANDROID_SIGNING_KEY_ALIAS') - keyPassword System.getenv('FLET_ANDROID_SIGNING_KEY_PASSWORD') - storeFile System.getenv('FLET_ANDROID_SIGNING_KEY_STORE') ? file(System.getenv('FLET_ANDROID_SIGNING_KEY_STORE')) : null - storePassword System.getenv('FLET_ANDROID_SIGNING_KEY_STORE_PASSWORD') - } - } -// flet: end of android_signing {% endif %} - - buildTypes { - release { -// flet: android_signing {% if cookiecutter.options.android_signing %} - signingConfig signingConfigs.release -// {% else %} - signingConfig signingConfigs.debug -// flet: end of android_signing {% endif %} - } - } -} - -flutter { - source '../..' -} - -dependencies {} diff --git a/{{cookiecutter.out_dir}}/android/app/build.gradle.kts b/{{cookiecutter.out_dir}}/android/app/build.gradle.kts new file mode 100644 index 0000000..0e25dd9 --- /dev/null +++ b/{{cookiecutter.out_dir}}/android/app/build.gradle.kts @@ -0,0 +1,103 @@ +import java.util.Properties + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. + id("dev.flutter.flutter-gradle-plugin") +} + +val localProperties = Properties().apply { + val localPropertiesFile = rootProject.file("local.properties") + if (localPropertiesFile.exists()) { + localPropertiesFile.inputStream().use { load(it) } + } +} + +val flutterVersionCode = localProperties.getProperty("flutter.versionCode")?.toIntOrNull() ?: 1 +val flutterVersionName = localProperties.getProperty("flutter.versionName") ?: "1.0" + +android { + namespace = "{{ cookiecutter.org_name_2 }}.{{ cookiecutter.package_name }}" + compileSdk = flutter.compileSdkVersion + ndkVersion = flutter.ndkVersion + + packaging { + jniLibs { + useLegacyPackaging = true + keepDebugSymbols += listOf( + "*/arm64-v8a/libpython*.so", + "*/armeabi-v7a/libpython*.so", + "*/x86/libpython*.so", + "*/x86_64/libpython*.so", + ) + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + + sourceSets["main"].java.srcDir("src/main/kotlin") + + {% set min_sdk_version = get_pyproject("tool.flet.android.min_sdk_version") %} + {% set target_sdk_version = get_pyproject("tool.flet.android.target_sdk_version") %} + + defaultConfig { + applicationId = "{{ cookiecutter.org_name_2 }}.{{ cookiecutter.package_name }}" + val resolvedMinSdk = {{ min_sdk_version if min_sdk_version else "flutter.minSdkVersion" }} + minSdk = resolvedMinSdk + val resolvedTargetSdk = {{ target_sdk_version if target_sdk_version else "flutter.targetSdkVersion" }} + targetSdk = resolvedTargetSdk + versionCode = flutterVersionCode + versionName = flutterVersionName + + println("Gradle build config:") + println(" minSdkVersion: $resolvedMinSdk") + println(" targetSdkVersion: $resolvedTargetSdk") + println(" versionCode: $flutterVersionCode") + println(" versionName: $flutterVersionName") + +// flet: split_per_abi {% if not cookiecutter.split_per_abi %} + ndk { + {% if cookiecutter.options.target_arch %} + abiFilters += listOf({% for arch in cookiecutter.options.target_arch %}"{{ arch }}"{% if not loop.last %}, {% endif %}{% endfor %}) + {% else %} + abiFilters += listOf("arm64-v8a", "armeabi-v7a", "x86_64") + {% endif %} + } +// flet: end of split_per_abi {% endif %} + } + +// flet: android_signing {% if cookiecutter.options.android_signing %} + signingConfigs { + create("release") { + keyAlias = System.getenv("FLET_ANDROID_SIGNING_KEY_ALIAS") + keyPassword = System.getenv("FLET_ANDROID_SIGNING_KEY_PASSWORD") + storeFile = System.getenv("FLET_ANDROID_SIGNING_KEY_STORE")?.let { file(it) } + storePassword = System.getenv("FLET_ANDROID_SIGNING_KEY_STORE_PASSWORD") + } + } +// flet: end of android_signing {% endif %} + + buildTypes { + release { +// flet: android_signing {% if cookiecutter.options.android_signing %} + signingConfig = signingConfigs.getByName("release") +// {% else %} + signingConfig = signingConfigs.getByName("debug") +// flet: end of android_signing {% endif %} + } + } +} + +flutter { + source = "../.." +} + +dependencies {} diff --git a/{{cookiecutter.out_dir}}/android/app/src/main/AndroidManifest.xml b/{{cookiecutter.out_dir}}/android/app/src/main/AndroidManifest.xml index ea5ee3f..b01da97 100644 --- a/{{cookiecutter.out_dir}}/android/app/src/main/AndroidManifest.xml +++ b/{{cookiecutter.out_dir}}/android/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" + android:taskAffinity="" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" @@ -57,4 +58,15 @@ android:name="flutterEmbedding" android:value="2" /> - \ No newline at end of file + + + + + + + + diff --git a/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt b/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt index 8e797f0..8ab8e07 100644 --- a/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt +++ b/{{cookiecutter.out_dir}}/android/app/src/main/kotlin/{{ cookiecutter.kotlin_dir }}/MainActivity.kt @@ -2,5 +2,4 @@ package {{ cookiecutter.org_name_2 }}.{{ cookiecutter.package_name }} import io.flutter.embedding.android.FlutterActivity -class MainActivity: FlutterActivity() { -} +class MainActivity : FlutterActivity() diff --git a/{{cookiecutter.out_dir}}/android/build.gradle b/{{cookiecutter.out_dir}}/android/build.gradle deleted file mode 100644 index bc157bd..0000000 --- a/{{cookiecutter.out_dir}}/android/build.gradle +++ /dev/null @@ -1,18 +0,0 @@ -allprojects { - repositories { - google() - mavenCentral() - } -} - -rootProject.buildDir = '../build' -subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" -} -subprojects { - project.evaluationDependsOn(':app') -} - -tasks.register("clean", Delete) { - delete rootProject.buildDir -} diff --git a/{{cookiecutter.out_dir}}/android/build.gradle.kts b/{{cookiecutter.out_dir}}/android/build.gradle.kts new file mode 100644 index 0000000..dbee657 --- /dev/null +++ b/{{cookiecutter.out_dir}}/android/build.gradle.kts @@ -0,0 +1,24 @@ +allprojects { + repositories { + google() + mavenCentral() + } +} + +val newBuildDir: Directory = + rootProject.layout.buildDirectory + .dir("../../build") + .get() +rootProject.layout.buildDirectory.value(newBuildDir) + +subprojects { + val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) + project.layout.buildDirectory.value(newSubprojectBuildDir) +} +subprojects { + project.evaluationDependsOn(":app") +} + +tasks.register("clean") { + delete(rootProject.layout.buildDirectory) +} diff --git a/{{cookiecutter.out_dir}}/android/gradle.properties b/{{cookiecutter.out_dir}}/android/gradle.properties index 2597170..fbee1d8 100644 --- a/{{cookiecutter.out_dir}}/android/gradle.properties +++ b/{{cookiecutter.out_dir}}/android/gradle.properties @@ -1,3 +1,2 @@ -org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError +org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true -android.enableJetifier=true diff --git a/{{cookiecutter.out_dir}}/android/gradle/wrapper/gradle-wrapper.properties b/{{cookiecutter.out_dir}}/android/gradle/wrapper/gradle-wrapper.properties index 6b74f0f..e4ef43f 100644 --- a/{{cookiecutter.out_dir}}/android/gradle/wrapper/gradle-wrapper.properties +++ b/{{cookiecutter.out_dir}}/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip diff --git a/{{cookiecutter.out_dir}}/android/settings.gradle b/{{cookiecutter.out_dir}}/android/settings.gradle deleted file mode 100644 index 68cadce..0000000 --- a/{{cookiecutter.out_dir}}/android/settings.gradle +++ /dev/null @@ -1,30 +0,0 @@ -pluginManagement { - def flutterSdkPath = { - def properties = new Properties() - file("local.properties").withInputStream { properties.load(it) } - def flutterSdkPath = properties.getProperty("flutter.sdk") - assert flutterSdkPath != null, "flutter.sdk not set in local.properties" - return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() - - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") - - repositories { - google() - mavenCentral() - gradlePluginPortal() - } - - plugins { - id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false - } -} - -plugins { - id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.6.1" apply false - id "org.jetbrains.kotlin.android" version "2.1.0" apply false -} - -include ":app" diff --git a/{{cookiecutter.out_dir}}/android/settings.gradle.kts b/{{cookiecutter.out_dir}}/android/settings.gradle.kts new file mode 100644 index 0000000..e095d7c --- /dev/null +++ b/{{cookiecutter.out_dir}}/android/settings.gradle.kts @@ -0,0 +1,27 @@ +pluginManagement { + val flutterSdkPath = + run { + val properties = java.util.Properties() + file("local.properties").inputStream().use { properties.load(it) } + val flutterSdkPath = properties.getProperty("flutter.sdk") + require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" } + flutterSdkPath + } + settings.extra["flutterSdkPath"] = flutterSdkPath + + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id("dev.flutter.flutter-plugin-loader") version "1.0.0" + id("com.android.application") version "8.11.1" apply false + id("org.jetbrains.kotlin.android") version "2.2.20" apply false +} + +include(":app") diff --git a/{{cookiecutter.out_dir}}/lib/main.dart b/{{cookiecutter.out_dir}}/lib/main.dart index 2c84762..8b4b9c9 100644 --- a/{{cookiecutter.out_dir}}/lib/main.dart +++ b/{{cookiecutter.out_dir}}/lib/main.dart @@ -37,7 +37,7 @@ show_startup_screen: {{ show_startup_screen }} startup_screen_message: {{ startup_screen_message }} */ -const bool isProduction = bool.fromEnvironment('dart.vm.product'); +const bool isRelease = bool.fromEnvironment('dart.vm.product'); const assetPath = "app/app.zip"; const pythonModuleName = "{{ cookiecutter.python_module_name }}"; @@ -124,7 +124,7 @@ void main(List args) async { } Future prepareApp() async { - if (!_args.contains("--debug")) { + if (!_args.contains("--debug") && isRelease) { // ignore: avoid_returning_null_for_void debugPrint = (String? message, {int? wrapWidth}) => null; } else { diff --git a/{{cookiecutter.out_dir}}/pubspec.yaml b/{{cookiecutter.out_dir}}/pubspec.yaml index 194eeb7..d764dce 100644 --- a/{{cookiecutter.out_dir}}/pubspec.yaml +++ b/{{cookiecutter.out_dir}}/pubspec.yaml @@ -29,13 +29,13 @@ dependency_overrides: ref: main url: https://github.com/flet-dev/flet.git - serious_python: 0.9.4 + # serious_python: 0.9.4 - # serious_python: - # git: - # url: https://github.com/flet-dev/serious-python.git - # ref: main - # path: src/serious_python + serious_python: + git: + url: https://github.com/flet-dev/serious-python.git + ref: ios-bundle-id-fix + path: src/serious_python wakelock_plus: ^1.2.10 web: ^1.0.0