linux 代码上传插件,flutter 添加 linux pc 自动引入插件功能

这篇博客详细介绍了如何临时解决Flutter在Linux平台上不能自动引入插件的问题。通过修改Flutter SDK中的`build_linux.dart`文件,添加必要的环境变量,并缓存配置文件,实现了手动构建过程。同时,代码中提到了目前只实现了Debug模式的构建,并给出了相关警告和问题跟踪链接。
摘要由CSDN通过智能技术生成

临时解决flutter 不能自动引自 linux pc 插件的问题

修改 flutter SDK 中的  /flutter/packages/flutter_tools/lib/src/linux/build_linux.dart

文件

代码// Copyright 2014 The Flutter Authors. All rights reserved.

// Use of this source code is governed by a BSD-style license that can be

// found in the LICENSE file.

import'dart:io';

import'../artifacts.dart';

import'../base/common.dart';

import'../base/logger.dart';

import'../base/process.dart';

import'../build_info.dart';

import'../cache.dart';

import'../globals.dart' as globals;

import'../platform_plugins.dart';

import'../plugins.dart';

import'../project.dart';

import'../reporting/reporting.dart';

/// Builds the Linux project through the Makefile.

FuturebuildLinux(LinuxProject linuxProject, BuildInfo buildInfo, {String target ='lib/main.dart'})async {

if (!linuxProject.makeFile.existsSync()) {

throwToolExit('No Linux desktop project configured. See '

'https://github.com/flutter/flutter/wiki/Desktop-shells#create '

'to learn about adding Linux support to a project.');

}

final StringBuffer buffer =StringBuffer('''

# Generated code do not commit.

export FLUTTER_ROOT=${Cache.flutterRoot}export TRACK_WIDGET_CREATION=${buildInfo?.trackWidgetCreation ==true}export FLUTTER_TARGET=$targetexport PROJECT_DIR=${linuxProject.project.directory.path}

''');

if (globals.artifactsis LocalEngineArtifacts) {

final LocalEngineArtifacts localEngineArtifacts = globals.artifactsas LocalEngineArtifacts;

final String engineOutPath = localEngineArtifacts.engineOutPath;

buffer.writeln('export FLUTTER_ENGINE=${globals.fs.path.dirname(globals.fs.path.dirname(engineOutPath))}');

buffer.writeln('export LOCAL_ENGINE=${globals.fs.path.basename(engineOutPath)}');

}

/// Cache flutter configuration files in the linux directory.

linuxProject.generatedMakeConfigFile

..createSync(recursive:true)

..writeAsStringSync(buffer.toString());

if (!buildInfo.isDebug) {

const String warning ='🚧 ';

globals.printStatus(warning *20);

globals.printStatus('Warning: Only debug is currently implemented for Linux. This is effectively a debug build.');

globals.printStatus('See https://github.com/flutter/flutter/issues/38478 for details and updates.');

globals.printStatus(warning *20);

globals.printStatus('');

}

// Invoke make.

final String buildFlag = getNameForBuildMode(buildInfo.mode ?? BuildMode.release);

final Stopwatch sw =Stopwatch()..start();

final Status status = globals.logger.startProgress(

'Building Linux application...',

timeout:null,

);

int result;

try {

var lib=await buildPlugins(linuxProject, buildInfo,buildFlag);

result =await processUtils.stream([

'make',

'-C',

linuxProject.makeFile.parent.path,

'BUILD=$buildFlag',

'EXTRA_CPPFLAGS=-I${linuxProject.project.directory.path}/build/linux/$buildFlag/include',

'EXTRA_LDFLAGS=${lib}',

], trace:true);

}on ArgumentError {

throwToolExit('make not found. Run \'flutter doctor\' for more information.');

}finally {

status.cancel();

}

if (result !=0) {

throwToolExit('Build process failed');

}

flutterUsage.sendTiming('build', 'make-linux', Duration(milliseconds: sw.elapsedMilliseconds));

}

const String _kBinaryNameVariable ='PLUGIN_NAME=';

StringpluginsName(Plugin plugin) {

for (final String linein File('${plugin.path}linux/Makefile').readAsLinesSync()) {

if (line.startsWith(_kBinaryNameVariable)) {

return line.split(_kBinaryNameVariable).last.trim();

}

}

return null;

}

FuturebuildPlugins(LinuxProject linuxProject, BuildInfo buildInfo, String buildFlag)async {

final List plugins = findPlugins(linuxProject.project).where((element) =>null != element.platforms[LinuxPlugin.kConfigKey]).toList();

String lib ='';

for (var itemin plugins) {

lib +='-l${pluginsName(item)}';

await processUtils.stream([

'make',

'-C',

'${item.path}linux',

'FLUTTER_EPHEMERAL_DIR=${'${linuxProject.makeFile.parent.path}/flutter/ephemeral'}',

'OUT_DIR=${linuxProject.project.directory.path}/build/linux/$buildFlag',

'BUILD=$buildFlag',

], trace:true);

}

return lib;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值