技术小黑屋

Vs Code 快速实现 重写 方法

作为一个从 Android Studio/IntelliJ 切到 VS code 的开发者,一开始会遇到各种不适应的情况。 比如快捷键不一样,使用习惯不一样等。

这里将简单记录一下 个人遇到的一些痛点,比如如何重写方法。

使用 FVM 解决 Flutter 3 无法添加 Uploader 问题

Flutter 3 之后,移除了 添加 uploader 的功能,这使得一些使用unpub 的用户很是苦恼,所以想要继续使用命令添加 uploader, 需要切回 flutter 2 才可以。

这里简单介绍一个很便捷的方式来处理上面的问题,就是使用 fvm 来指定 flutter 2 来执行 uploader 添加。

AAPT2 aapt2-7.2.2-7984345-osx Daemon #5: Idle Daemon Unexpectedly Exit. This Should Not Happen 问题解决

CI 构建机,一直有概率出现构建失败的情况,查看了日志,得到了这样的相关错误信息

1
2
3
4
5
6
7
8
9
AAPT2 aapt2-7.2.2-7984345-osx Daemon #7: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #8: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #0: shutdown
15:32:49 [  +98 ms] AAPT2 aapt2-7.2.2-7984345-osx Daemon #6: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #4: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #3: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #5: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [        ] AAPT2 aapt2-7.2.2-7984345-osx Daemon #1: Idle daemon unexpectedly exit. This should not happen.
15:32:49 [ +499 ms] The message received from the daemon indicates that the daemon has disappeared.

Git Clone 使用代理,实现百倍加速

有时候我们对 github 的仓库进行 clone 的时候,会发现很慢,甚至是龟速,很不够效率。好在有一个简单且快捷的方法来倍速提升clone 效率。

我们通过检索 git 的帮助文档发现有这样的描述

If you just want to use proxy on a specified repository, don’t need on other repositories. The preferable way is the -c, —config <key=value> option when you git clone a repository. e.g.

Flutter 处理 Error Setter Not Found AsciiChar 问题

当我们进行了 flutter 升级后,有时候运行程序会发现无法编译,出现下面这样的错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[        ] [   +2 ms] ../../../../.pub-cache/hosted/pub.flutter-io.cn/cached_network_image-3.2.0/lib/src/image_provider/multi_image_stream_completer.dart:152:22: Warning: Operand of null-aware operation '?.' has
type 'SchedulerBinding' which excludes null.
[        ] [        ]  - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../../code/flutter_3/packages/flutter/lib/src/scheduler/binding.dart').
[        ] [        ]     SchedulerBinding.instance?.scheduleFrameCallback(_handleAppFrame);
[        ] [        ]                      ^
[ +402 ms] [ +414 ms] ../../../../.pub-cache/hosted/pub.flutter-io.cn/win32-2.3.1/lib/src/structs.g.dart:554:31: Error: Member not found: 'UnicodeChar'.
[        ] [        ]   int get UnicodeChar => Char.UnicodeChar;
[        ] [        ]                               ^^^^^^^^^^^
[        ] [        ] ../../../../.pub-cache/hosted/pub.flutter-io.cn/win32-2.3.1/lib/src/structs.g.dart:555:38: Error: Setter not found: 'UnicodeChar'.
[        ] [        ]   set UnicodeChar(int value) => Char.UnicodeChar = value;
[        ] [        ]                                      ^^^^^^^^^^^
[        ] [        ] ../../../../.pub-cache/hosted/pub.flutter-io.cn/win32-2.3.1/lib/src/structs.g.dart:557:29: Error: Member not found: 'AsciiChar'.
[        ] [        ]   int get AsciiChar => Char.AsciiChar;
[        ] [        ]                             ^^^^^^^^^
[        ] [        ] ../../../../.pub-cache/hosted/pub.flutter-io.cn/win32-2.3.1/lib/src/structs.g.dart:558:36: Error: Setter not found: 'AsciiChar'.
[        ] [        ]   set AsciiChar(int value) => Char.AsciiChar = value;
[        ] [        ]                                    ^^^^^^^^^

iSlide 插件买两年送 180 天,每月不到 6 元钱

是不是每次在制作 PPT 时,都丝毫没有头绪?各种模板东拼西凑没有章法?你和 PPT 高手之间,其实就只差一个 iSlide。

iSlide 是一款口碑优秀的 PPT 插件,海量在线资源库,超 30 万专业模板、素材一键插入 PPT,更有一键排版等 38 种辅助功能,真正实现「让 PPT 设计简单起来」。

https://asset.droidyue.com/image/lizhi_io/islide/1.png

​iSlide 目前正在限时优惠中,前往数码荔枝买两年送 180 天,买一年送 90 天,每月不到 6 元钱,新用户首单还能立减 5 元,非常值的价格别错过!

赶快点击[合作伙伴]专属优惠链接收下这款人见人爱的 PPT 神器吧!订阅时长可叠加,趁现在便宜快买买买~

修复 Flutter 项目中 xxx.kt: (19, 8): Redeclaration: xxxManager

在我们日常构建 Android app 包时,多少会遇到这样的问题

1
2
3
4
5
6
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (19, 8): Redeclaration: xxxManager
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (79, 12): Redeclaration: gogogoResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.3/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (82, 12): Redeclaration: gogogoListResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (21, 8): Redeclaration: xxxManager
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (94, 12): Redeclaration: gogogoResult
[        ] e: /Users/xxxxxxxxx/.pub-cache/hosted/unpub.xxxxx.com/gogogo-1.0.4/android/src/main/kotlin/com/example/gogogo/xxxManager.kt: (97, 12): Redeclaration: gogogoListResult

Mac 平台知名视频下载工具 Downie 4 买断仅需 79 元

Downie 4 是一款 Mac 上备受好评的视频下载利器,支持 Youtube、B 站、优酷、爱奇艺、腾讯视频 等 1000+ 国内外视频流媒体网站。

https://asset.droidyue.com/image/lizhi_io/downie/%E5%9B%BE1.png

点击[合作伙伴]专属优惠链接,下单 Downie 4 到手价只需 79 元,新注册用户再享立减 5 元优惠!


支持 1000+ 视频网站

从网站扒视频,最烦恼的就是工具不万能。部分站点轻松下载,另外的网站却不可用,大大拖慢效率……

在 Downie 4 下,这个问题几乎不存在。软件支持超过 1000 个视频站点,从 YouTube、TED、Vimeo,到爱奇艺、优酷、Bilibili、网易云音乐……基本上只要你用过的网站,它都能下载。

https://asset.droidyue.com/image/lizhi_io/downie/%E5%9B%BE2.png

Android Some Runtime JAR Files in the Classpath Have an Incompatible Version Kotlin 问题解决

在 Android 工程中,随着依赖包的引入,也会出现 多个 Kotlin 版本的问题,比如会有下面这样的警告信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 ] > Task :app:lintVitalAnalyzeRelease
[        ] w: Runtime JAR files in the classpath should have the same version. These files were found in the classpath:
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk8/1.6.10/e80fe6ac3c3573a80305f5ec43f86b829e8ab53d/kotlin-stdlib-jdk8-1.6.10.jar (version 1.6)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.7.10/1ef73fee66f45d52c67e2aca12fd945dbe0659bf/kotlin-stdlib-jdk7-1.7.10.jar (version 1.7)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.7.10/d2abf9e77736acc4450dc4a3f707fa2c10f5099d/kotlin-stdlib-1.7.10.jar (version 1.7)
[        ]     /Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10/bac80c520d0a9e3f3673bc2658c6ed02ef45a76a/kotlin-stdlib-common-1.7.10.jar (version 1.7)
[        ] w: Some runtime JAR files in the classpath have an incompatible version. Consider removing them from the classpath
[  +98 ms] timber.lint.TimberIssueRegistry in /Users/xxxxxxxxx/.gradle/caches/transforms-3/d91983d38205de71b5c5d645c8d4eb47/transformed/jetified-timber-4.7.1/jars/lint.jar does not specify a vendor; see
IssueRegistry#vendor
[  +96 ms] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/1.7.10/1ef73fee66f45d52c67e2aca12fd945dbe0659bf/kotlin-stdlib-jdk7-1.7.10.jar!/META-INF/kotlin-stdlib-jdk7.kotlin_modul
e: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
[        ] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.7.10/d2abf9e77736acc4450dc4a3f707fa2c10f5099d/kotlin-stdlib-1.7.10.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was
compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
[        ] e:
/Users/xxxxxxxxx/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-common/1.7.10/bac80c520d0a9e3f3673bc2658c6ed02ef45a76a/kotlin-stdlib-common-1.7.10.jar!/META-INF/kotlin-stdlib-common.kotlin
_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.

Flutter 3 迁移后编译 Warnings 一键修复

当我们的 app 支持 flutter 3 后,无论是编译速度,还是运行效率,方方面面会有很大的提升。但是在我们编译的时候,会有类似下面的这些警告。

1
2
3
../../../your_pub/lib/src/framework.dart:275:26: Warning: Operand of null-aware operation '!' has type 'SchedulerBinding' which excludes null.
[        ]  - 'SchedulerBinding' is from 'package:flutter/src/scheduler/binding.dart' ('../../../code/flutter_3/packages/flutter/lib/src/scheduler/binding.dart').
[        ]     if (SchedulerBinding.instance!.schedulerPhase ==

上面的警告虽然不会影响应用的编译,但是长久来看,还是需要解决的。

正版软件优惠,近期新品软件推荐

不管是手机还是电脑,出色的硬件是好用的基础。而其中的软件工具,也是提高效率、减轻负担的好东西。

免费的软件工具众多,当然付费工具也不少。大家可能会觉得正版软件很贵,但国内软件代理商的价格其实很实惠。

本次为大家介绍,优秀代理商「数码荔枝」近期上架的多款软件工具。分别是多平台抠图工具:傲软抠图,以及无需剪辑的在线视频制作工具:右糖

点击我们的专属链接,直接购买即为优惠价格。


关于仓库的批量处理脚本,效率提升 500%

很多时候,我们会遇到这样的场景

  • 换了新电脑,需要挨个 clone gitlab repos?
  • 无法确定哪个 repo 包含了 maven.aliyun.com 这个设置?
  • 能否批量更新 本地的 repos?

如果你有上述的疑问或者情况,你可以尝试本文中的一些批量处理 repos 的方法

JetBrains 系列即将涨价,抓紧最后的好价入手!

对于开发者来讲,每天都要和各种编程 IDE 和开发工具打交道。想必一定听说过 JetBrains 公司,或旗下的产品:IntelliJ IDEAPyCharmWebStorm 等。

不久前,JetBrains 发布公告,他们即将上调系列产品的订阅价格!

https://asset.droidyue.com/image/lizhi_io/jetbrains/%E5%9B%BE1.png

涨价风暴将席卷旗下一众产品,包括:IDE、.NET 工具和 All Products Pack。

Unpub 发布原子化处理

目前 unpub 作为我们重要的 pub 私有服务托管着 众多的 pubs。在日常的开发过程中,我们也会对pub 做出了一些约束。比如

  • 只允许在 master 或者 release/* 分支发布
  • 不符合上述条件的分支不允许发布。

今天我们讨论的问题重点,非上述的问题,而是发布 unpub 的原子性。

使用 Flutter Attach 实现代码与应用进程关联

当我们使用 flutter run 调试 App 时,假如数据线接触不良或者断开,当我们想要继续调试的时候,可能就需要再次执行 flutter run

但其实,还有一个命令叫做 flutter attach. 它可以实现如下的功能

  • attach 到一个现在运行的 app
  • 支持指定设备 id 进行 attach
  • 支持指定端口进行 attach
  • 支持设置超时时间
  • 支持传递 key-value 键值对设置

Nexus Repo 503 错误解决

最近访问Nexus Repo 曝出了下面的503 问题

1
http://your_server:8081/nexus/content/repositories/xxxx/module/3.0.0/module-3.0.0.pom. Return code is: 503, ReasonPhrase:Service Unavailable. ->

尝试重新启动 Nexus Repo 服务也没有解决。

Flutter Webview 处理回退历史

在 App 开发中,我们总会遇到使用 WebView 的情况, 比如 我们打开了 网页A,然后点击 A 中的链接跳转到 B。如果这个时候,我们按一下系统的返回键,预期的应该是 返回A,而不是推到一个 Native 页面。

Linux 下解决 Grep Is Directory 问题

Grep 是一个很便捷有用的终端工具,它可以帮助我们快速过滤筛选出一些内容。通常配合 find 命令,可以实现更加强大的能力。

比如这个这样的组合,可以快速发现并定位到 哪个.gradle 文件包含 maven.aliyun.com 。

1
find . -name "*.gradle" | xargs grep -E -n --color=always "maven.aliyun.com"

但是我们在执行的时候,总会遇到这样的错误提示输出。

1
grep: ./example/android/.gradle: Is a directory