【问题标题】:Flutter build apk with --enable-software-rendering?Flutter 使用--enable-software-rendering 构建apk?
【发布时间】:2018-10-12 02:47:45
【问题描述】:

是否可以这样做:

flutter build apk --enable-software-rendering

我需要一个执行方式如下的发布版本:

flutter run --enable-software-rendering --profile

谢谢。

【问题讨论】:

  • 你需要这个做什么?我假设您已经尝试过并且知道它是否有效。
  • 如果 Flutter 尝试使用 Raspberry Pi 上可用的硬件加速,它将变得无法使用。几乎好像屏幕刷新的唯一时间是用户输入,即使那样,它也很糟糕。我只能在使用 --enable-software-rendering 进行分析时获得可用的应用程序,所以我希望能够有一个强制软件渲染的发布 apk。

标签: dart flutter


【解决方案1】:

TL;DRgetIntent().putExtra("enable-software-rendering", true); 放在您的onCreate() 之上


注意 - 我假设 Android 来自有问题的“apk”标题和软件渲染的需要。

查看源代码,flutter run--enable-software-rendering 标志会导致使用 am start--ez enable-software-rendering true 启动活动,这会将其作为布尔附加值放入 Intent。

如果您希望控制何时从代码中使用软件渲染(例如取决于 API 级别或设备型号),请在您的 onCreate() 中提前设置提及的意图。

完整示例:

import android.os.Bundle;
import io.flutter.embedding.android.FlutterActivity;

public class MyActivity extends FlutterActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        // use software rendering (ideally only when you need to)
        getIntent().putExtra("enable-software-rendering", true);

        // start Flutter
        super.onCreate(savedInstanceState);
    }
}

【讨论】:

  • import io.flutter.facade.Flutter; 现已折旧。有什么办法吗?
  • @MichaelTolsma Flutter 1.12+ 不需要该调用,我已经更新了示例/导入。
【解决方案2】:

对于那些因为您的 Flutter Android 应用因以下错误而崩溃而苦苦挣扎的人

ERROR:flutter/shell/gpu/gpu_surface_gl Failed to setup Skia Gr context

当被放到后台返回前台时,只需像我们的朋友 Matej Snoha 上面所说的那样,将 enable-software-rendering 添加到 "onCreate" 方法即可。 p>

换句话说,将android/app/src/main/kotlin/[project]/MainActivity 文件更改为以下 Kotlin 代码:

class MainActivity : FlutterActivity() {

    // add onCreate method (if not exists)
    override fun onCreate(savedInstanceState: Bundle?) {
        // add this line to "onCreate" method
        this.getIntent().putExtra("enable-software-rendering", true)
        // don't forget to call "super"
        super.onCreate(savedInstanceState)
    }

}

它对我来说就像一个魅力(无需致电Flutter.startInitialization(this);)。

【讨论】:

  • 'onCreate' overrides nothing 是我收到的错误
【解决方案3】:

Matej 的回答为基于 Java 的 Flutter 应用程序提供了解决方案。对于使用 Kotlin 启动的新创建的应用程序,代码如下所示:

import android.os.Bundle;
import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {

        // use software rendering (ideally only when you need to)
        getIntent().putExtra("enable-software-rendering", true)

        // start Flutter
        super.onCreate(savedInstanceState)
    }
}

MainActivity 类位于此路径中:

android/app/src/main/kotlin/com/.../.../MainActivity.kt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 2022-01-15
    • 2020-01-27
    • 2020-03-10
    • 2020-05-15
    • 2021-04-22
    相关资源
    最近更新 更多