alibaba / flutter_boost

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts
https://github.com/alibaba/flutter_boost
MIT License
6.96k stars 1.23k forks source link

[Problem] 如何使用 settings.gradle.kts 接入? #2137

Open nesteiner opened 3 weeks ago

nesteiner commented 3 weeks ago

在文档那里,接入部分

setBinding(new Binding([gradle: this]))
evaluate(new File(
        settingsDir.parentFile,
        'flutter_module/.android/include_flutter.groovy'
))
include ':flutter_module'
project(':flutter_module').projectDir = new File('../flutter_module')

这是 settings.gradle 的代码,但是我用的是 settings.gradle.kts ,我试着

val flutterModulePath = File(settingsDir.parentFile, "flutter_module/.android/include_flutter.groovy")
apply {
    from(flutterModulePath)
}

可是我发现 kts 无法 evaluate groovy 文件,这可怎么办呐

jiyuren commented 3 weeks ago

可以把这些代码写到一个单独的build-flutter.gradle 文件里,然后引用它试试, apply(from = "build-flutter.gradle")

fanpeihua commented 3 weeks ago

可以把这些代码写到一个单独的build-flutter.gradle 文件里,然后引用它试试, apply(from = "build-flutter.gradle")

这个方式的确可以解决

nesteiner commented 3 weeks ago

额,出了点小问题,他说

A problem occurred evaluating script.
> Could not find method include() for arguments [:flutter] on build of type org.gradle.invocation.DefaultGradle.

然后这是自动生成的 include_flutter.groovy,我把它粘贴到 build-flutter.gradle 中了

def scriptFile = getClass().protectionDomain.codeSource.location.toURI()
def flutterProjectRoot = new File(scriptFile).parentFile.parentFile

gradle.include ":flutter"
gradle.project(":flutter").projectDir = new File(flutterProjectRoot, ".android/Flutter")

def localPropertiesFile = new File(flutterProjectRoot, ".android/local.properties")
def properties = new Properties()

assert localPropertiesFile.exists(), "❗️The Flutter module doesn't have a `$localPropertiesFile` file." +
        "\nYou must run `flutter pub get` in `$flutterProjectRoot`."
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
gradle.apply from: "$flutterSdkPath/packages/flutter_tools/gradle/module_plugin_loader.gradle"