如何从抖动中删除软件包以减小项目的大小?

时间:2018-08-20 08:28:44

标签: flutter

我使用了一些在flutter项目中不再需要的软件包,即wilddog_authwilddog_sync,可以从pubspec.yaml文件和dart文件(也称为删除import 'package:wilddog_sync/wilddog_sync.dart'等)并删除MainActivity.java和Xcode项目中的导入,但是我无法清除flutter,cocoapod和gradle安装的未使用文件。现在,在flutter中有一个统一的命令,我可以立即删除所有未使用的软件包吗?

我很确定使用flutter clean仅删除构建文件夹,而从flutter packages get删除软件包后使用pubspec.yaml不会从cocoapodgradle删除软件包要么。

例如,在flutter cleanflutter packages get之后,我重建了项目:

Launching lib/main.dart on Android SDK built for x86 64 in debug mode...
Initializing gradle...
Resolving dependencies...
Running 'gradlew assembleDebug'...
Built build/app/outputs/apk/debug/app-debug.apk.
Installing build/app/outputs/apk/app.apk...
I/FlutterActivityDelegate(11331): onResume setting current activity to this
I/Choreographer(11331): Skipped 107 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation(11331): eglMakeCurrent: 0x79f21b4dbec0: ver 2 0 (tinfo 0x79f219b4f160)
I/OpenGLRenderer(11331): Davey! duration=1903ms; Flags=1, IntendedVsync=7544454683637, Vsync=7546238016899, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=7546253803603, AnimationStart=7546253996603, PerformTraversalsStart=7546254171603, DrawStart=7546279222603, SyncQueued=7546288526603, SyncStart=7546295569603, IssueDrawCommandsStart=7546296644603, SwapBuffers=7546334455603, FrameCompleted=7546365204603, DequeueBufferDuration=2892000, QueueBufferDuration=199000, 
Syncing files to device Android SDK built for x86 64...
D/        (11331): HostConnection::get() New Host Connection established 0x79f219ab81e0, tid 11383
D/EGL_emulation(11331): eglMakeCurrent: 0x79f21b5e26e0: ver 2 0 (tinfo 0x79f219aa66c0)
W/IInputConnectionWrapper(11331): getCursorCapsMode on inactive InputConnection

cocoapods gradle

但是所有软件包文件都保留了。

我当然可以进入./ios/运行pods install来移除豆荚:

pod install
Analyzing dependencies
Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
Removing Wilddog
Removing WilddogCore
Removing WilddogSync
Downloading dependencies
Using Flutter (1.0.0)
Generating Pods project
Integrating client project
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

[!] Automatically assigning platform `ios` with version `8.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile. See `https://guides.cocoapods.org/syntax/podfile.html#platform`.

6 个答案:

答案 0 :(得分:1)

删除flutter SDK目录下.pub-cache的托管文件夹

cd path/to/flutter_sdk_directory

rm -rf .pub-cache/hosted

删除项目根目录下的.packages文件

 cd path/to/project_root_directory

 rm -rf .packages

获取项目包

cd path/to/project_root_directory

flutter pub get

在 Android Studio 中打开项目

完成。

答案 1 :(得分:0)

此行为似乎是一个错误。您可以在这里https://github.com/flutter/flutter/issues/65718

进行跟踪

答案 2 :(得分:0)

有时候,项目中可能没有使用某些软件包,但是您在开发阶段已安装了某些软件包。要找出这些内容,请首先转到每个dart文件并删除未使用的导入,然后转到pubspec.yaml并逐个注释软件包并保存项目。然后刷新应用程序(不重新加载)。如果我们在项目中使用了该软件包,那么它将抛出一个错误。在所有软件包上重复上述步骤后,您将能够从pubspec中删除所有不需要的软件包。

现在,删除pubspec.lock文件,然后再次运行pub get。现在,您的项目将仅具有所需的软件包,而这可能是可以达到的最小大小。

enter image description here

答案 3 :(得分:0)

您可以使用这三个步骤来解决此问题

  1. '颤动干净'
  2. 删除 pubspec.yaml 中不需要的依赖项
  3. 删除 pubspec.lock

重新加载项目并再次执行“pub get”并运行 iOS/Android 项目

答案 4 :(得分:0)

最好的方法是

flutter clean

如果这不起作用,只需创建一个新项目,将您的旧代码复制到新项目中,在这里您可以在运行 pub get 之前仅添加您想要的依赖项。

答案 5 :(得分:0)

有一种直观的方法。 安装 this

dev_dependencies:
  dependency_validator: ^x.x.x

然后运行 ​​flutter pub run dependency_validator 它将显示有关已安装软件包的所有详细信息。 示例:=>

<块引用>

这些包固定在 pubspec.yaml 中:

  • dependency_validator: null -- 这是一个直接引脚。
  • permission_handler: null -- 这是一个直接的 pin。
  • swipe_to: null -- 这是一个直接引脚。
<块引用>

这些包在 lib/ 中使用,但不是依赖项:

  • 连通性
  • 路径
<块引用>

以下包包含可执行文件,假定使用它们:

  • flutter_native_splash
<块引用>

这些包可能未使用,或者您可能正在使用这些包中的资产:

  • cupertino_icons
  • firebase_analytics
  • http
  • 正在加载
  • sign_in_with_apple